Transformaciones de Ingeniería de Características Polinomiales

Escrito por

en

Capturando Relaciones No Lineales en Machine Learning

Las Transformaciones de Ingeniería de Características Polinomiales (Polynomial Feature Engineering) son una técnica ampliamente utilizada en Data Science y Machine Learning para enriquecer un conjunto de datos mediante la creación de nuevas variables derivadas de las características originales.

Su objetivo principal es permitir que algoritmos lineales puedan modelar relaciones no lineales presentes en los datos sin necesidad de utilizar modelos más complejos. Esta técnica resulta especialmente útil cuando existe evidencia de que la relación entre las variables predictoras y la variable objetivo no sigue una tendencia lineal simple.

Las características polinomiales forman parte de las técnicas clásicas de ingeniería de características y suelen utilizarse como paso previo al entrenamiento de modelos predictivos.

¿Qué son las transformaciones de características polinomiales?

Las transformaciones polinomiales consisten en generar nuevas variables elevando las características originales a diferentes potencias y creando combinaciones entre ellas. Por ejemplo, si disponemos de una variable X. Podemos generar nuevas características como:

$$X, X^2, X^3, X^4$$

Si contamos con dos variables: \(X_1, X_2\), las nuevas características podrían incluir:

$$X_1, X_2, X_1^2, X_2^2, X_1X_2$$

Estas nuevas variables permiten representar patrones más complejos que no podrían capturarse utilizando únicamente las características originales.

¿Cómo funcionan las características polinomiales?

La idea fundamental consiste en ampliar el espacio de características. Supongamos una relación real entre una variable de entrada y una variable objetivo:

$$y=x^2+3x+2″$$

Si utilizamos únicamente la variable (x), un modelo lineal tendrá dificultades para representar correctamente la curva. Sin embargo, si añadimos la característica \(X_2\), el problema puede transformarse en una regresión lineal sobre las variables:

  • \(x\)
  • \(x^2\)

Desde la perspectiva del modelo, la relación sigue siendo lineal respecto a los coeficientes, aunque la función representada sea no lineal.

Generación de características polinomiales

Para un polinomio de grado 2 con dos variables: \(x_1,x_2\) las nuevas características serían:

$$1,x_1,x_2,x_1^2,x_1x_2,x_2^2$$

Para un polinomio de grado 3:

$$x_1^3,x_1^2x_2,x_1x_2^2,x_2^3$$

A medida que aumenta el grado del polinomio, también crece significativamente el número de variables generadas.

Ejemplo conceptual

Supongamos un problema inmobiliario donde queremos predecir el precio de una vivienda utilizando metros cuadrados. La relación real podría ser:

  • Las viviendas pequeñas aumentan de precio rápidamente.
  • Las viviendas medianas mantienen una tendencia estable.
  • Las viviendas muy grandes muestran incrementos menos pronunciados.

Esta relación suele adoptar una forma curva. Al incorporar:

  • Metros cuadrados.
  • Metros cuadrados al cuadrado.

El modelo puede capturar mejor dicha curvatura.

Beneficios de las transformaciones polinomiales

  • Permiten modelar relaciones no lineales.
  • Mejoran la capacidad predictiva de modelos lineales.
  • Son fáciles de implementar.
  • Incrementan la flexibilidad del modelo.
  • Facilitan la captura de interacciones entre variables.
  • Pueden mejorar significativamente el rendimiento sin cambiar de algoritmo.

¿Cuándo utilizar características polinomiales?

  • Existen relaciones no lineales evidentes.
  • Los modelos lineales presentan bajo rendimiento.
  • Se desea mantener la interpretabilidad.
  • El número de variables originales es relativamente reducido.
  • Se sospecha que existen interacciones entre variables.

Escenarios habituales:

  • Predicción de precios.
  • Modelos económicos.
  • Series temporales simples.
  • Análisis de comportamiento de clientes.
  • Modelos de riesgo financiero.

Ejemplos prácticos

Predicción inmobiliaria

Variables originales:

  • Superficie.
  • Antigüedad.

Características adicionales:

  • Superficie².
  • Antigüedad².
  • Superficie × Antigüedad.

Marketing

Variables originales:

  • Inversión publicitaria.
  • Frecuencia de exposición.

Características adicionales:

  • Inversión².
  • Frecuencia².
  • Inversión × Frecuencia.

Salud

Variables originales:

  • Edad.
  • Índice de masa corporal.

Características adicionales:

  • Edad².
  • IMC².
  • Edad × IMC.

Estas nuevas variables permiten capturar patrones más complejos en los datos.

Ventajas

  • Fácil aplicación.
  • Compatible con numerosos algoritmos.
  • Mejora el ajuste de modelos lineales.
  • Captura relaciones curvilíneas.
  • Permite modelar interacciones.
  • Mantiene cierta interpretabilidad.

Además, suele combinarse muy bien con algoritmos como:

  • Regresión Lineal.
  • Regresión Logística.
  • Support Vector Machines.
  • Redes neuronales.

Desventajas

  • Incrementa rápidamente la dimensionalidad.
  • Puede introducir ruido.
  • Aumenta el riesgo de sobreajuste.
  • Incrementa los tiempos de entrenamiento.
  • Reduce la interpretabilidad cuando se generan muchas variables.

A medida que aumenta el grado polinomial, estos problemas suelen hacerse más evidentes.

Limitaciones

  • Explosión combinatoria: El número de características generadas crece rápidamente: 10 variables originales es polinomio de grado 3. Pueden generar cientos de nuevas características. Esto aumenta: memoria utilizada, coste computacional y riesgo de sobreajuste.
  • Sobreajuste: Los polinomios de grado elevado pueden ajustarse excesivamente a los datos de entrenamiento, como consecuencia, el rendimiento en entrenamiento mejora y la capacidad de generalización disminuye.
  • Interpretación más compleja: Aunque el modelo siga siendo lineal, interpretar decenas o cientos de términos polinomiales puede resultar difícil.
  • Sensibilidad a escalas: Las variables elevadas a potencias superiores generan valores mucho mayores. Por ello suele recomendarse aplicar previamente: estandarización y normalización.

Aplicaciones en Data Science y Machine Learning

Las transformaciones polinomiales tienen numerosas aplicaciones.

Modelos de regresión

  • Predicción de precios.
  • Predicción de demanda.
  • Pronósticos económicos.

Clasificación

  • Regresión logística enriquecida.
  • Clasificación de clientes.
  • Scoring crediticio.

Machine Learning tradicional

  • Support Vector Machines.
  • Redes neuronales.
  • Gradient Boosting.

Ciencia de datos empresarial

  • Marketing analítico.
  • Predicción de abandono de clientes.
  • Modelos de conversión.

Investigación científica

  • Modelado físico.
  • Sistemas biológicos.
  • Análisis experimentales.

Buenas prácticas al utilizar características polinomiales

Para obtener mejores resultados es recomendable:

  • Comenzar con grados bajos (2 o 3).
  • Escalar las variables antes de la transformación.
  • Utilizar validación cruzada.
  • Evaluar posibles problemas de sobreajuste.
  • Aplicar regularización cuando sea necesario.

Las técnicas de regularización más utilizadas son:

  • Ridge Regression.
  • Lasso Regression.
  • Elastic Net.

Implementación en Python

Scikit-Learn proporciona la clase PolynomialFeatures para generar automáticamente estas variables.

Ejemplo básico

import numpy as np
from sklearn.preprocessing import PolynomialFeatures

X = np.array([
    [2],
    [3],
    [4]
])

poly = PolynomialFeatures(
    degree=2,
    include_bias=False
)

X_poly = poly.fit_transform(X)

print(X_poly)
[[ 2.  4.]
 [ 3.  9.]
 [ 4. 16.]]

La segunda columna corresponde a: \(x^2\)

Ejemplo con múltiples variables

import numpy as np
from sklearn.preprocessing import PolynomialFeatures

X = np.array([
    [2, 3]
])

poly = PolynomialFeatures(
    degree=2,
    include_bias=False
)

X_poly = poly.fit_transform(X)

print(X_poly)
[[2. 3. 4. 6. 9.]]

Las nuevas características son:

  • x₁
  • x₂
  • x₁²
  • x₁x₂
  • x₂²

Uso con Regresión Lineal

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

modelo = Pipeline([
    ("poly", PolynomialFeatures(degree=2)),
    ("regressor", LinearRegression())
])

modelo.fit(X_train, y_train)

predicciones = modelo.predict(X_test)

Este enfoque permite entrenar un modelo lineal capaz de representar relaciones no lineales.

Combinación con escalado

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge

modelo = Pipeline([
    ("scaler", StandardScaler()),
    ("poly", PolynomialFeatures(degree=3)),
    ("ridge", Ridge(alpha=1.0))
])

modelo.fit(X_train, y_train)

Esta combinación suele ofrecer mejores resultados y reduce el riesgo de sobreajuste.

Conclusión

Las Transformaciones de Ingeniería de Características Polinomiales son una técnica fundamental para enriquecer conjuntos de datos y permitir que modelos lineales capturen relaciones no lineales complejas. Mediante la generación de potencias e interacciones entre variables, es posible aumentar significativamente la capacidad predictiva de numerosos algoritmos sin recurrir necesariamente a modelos más sofisticados.

Aunque presentan desafíos relacionados con la dimensionalidad y el sobreajuste, su correcta aplicación, acompañada de escalado y regularización, puede generar mejoras sustanciales en el rendimiento de modelos de Machine Learning. Por ello, constituyen una herramienta esencial dentro del proceso de ingeniería de características y preparación de datos en proyectos de Data Science.