Mejor feature engineering
Introducción
En el mundo de la ciencia de datos y el machine learning, el feature engineering (ingeniería de características) es una de las tareas más cruciales. Es aquí donde transformamos los datos brutos en representaciones que son significativas para nuestros modelos predictivos. Un buen feature engineering puede llevar a un modelo con bajo overfitting y alta generalización, mientras que uno deficiente o mal ejecutado puede conducir al underfitting y errores persistentes.
En esta unidad, aprenderemos cómo mejorar el feature engineering para evitar el underfitting y construir modelos más robustos. Veremos ejemplos prácticos y discutiremos los errores típicos a evitar en este proceso.
Explicación principal con ejemplos
Transformación de variables numéricas
Una de las técnicas fundamentales en feature engineering es la transformación de variables numéricas. Por ejemplo, si trabajamos con una variable que sigue una distribución no normal, como la distribución log-normal, podemos aplicar una transformación logarítmica para hacerla más normal.
import numpy as np
# Ejemplo: Transformación logarítmica de datos
data = [0.5, 1, 2, 4, 8]
log_transformed_data = np.log(data + 1) # Añadimos 1 para evitar ceros en el logaritmo natural
print(log_transformed_data)
Creación de variables no lineales
Las relaciones no lineales son comunes en muchos datos reales. La creación de nuevas características a través del producto o la suma de variables existentes puede ayudar a capturar estas relaciones.
# Ejemplo: Creación de una variable no lineal
x1 = [1, 2, 3]
x2 = [4, 5, 6]
non_linear_feature = x1 * x2
print(non_linear_feature)
Selección de características relevantes
Seleccionar las características más relevantes es crucial para evitar el overfitting y mejorar la generalización del modelo. Métodos como la correlación con la variable objetivo o técnicas avanzadas como lasso o ridge pueden ayudarnos en este proceso.
# Ejemplo: Selección de características basada en correlación
import pandas as pd
data = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
correlation_matrix = data.corr()
print(correlation_matrix)
Manejo de datos categóricos
Las variables categóricas deben ser transformadas en una forma que pueda ser utilizada por los modelos. Métodos como one-hot encoding o label encoding son comunes.
# Ejemplo: One-hot encoding de datos categóricos
from sklearn.preprocessing import OneHotEncoder
data = pd.DataFrame({'color': ['rojo', 'verde', 'azul']})
encoder = OneHotEncoder()
encoded_data = encoder.fit_transform(data['color'].values.reshape(-1, 1))
print(encoded_data.toarray())
Errores típicos / trampas
Ignorar el manejo de datos faltantes
Los datos faltantes pueden introducir sesgos en los modelos. Es importante identificar y manejar adecuadamente estos datos antes del feature engineering.
# Ejemplo: Manejo de datos faltantes
data_with_na = pd.DataFrame({'A': [1, 2, np.nan]})
print(data_with_na.fillna(0)) # Sustituir valores NaN con cero
No transformar variables no lineales
Las relaciones no lineales pueden ser importantes y deben ser explotadas a través de la creación de nuevas características.
# Ejemplo: Transformación sin crear nueva característica
x = [1, 2, 3]
print(x**2) # No se crea una nueva columna; solo se muestra el cuadrado
Ignorar correlaciones no lineales
Las correlaciones entre variables pueden ser no lineales y deben ser identificadas y manejadas adecuadamente para evitar el underfitting.
# Ejemplo: Identificación de correlación no lineal
x = [1, 2, 3, 4]
y = [0.5, 1, 2.5, 4]
plt.scatter(x, y)
plt.show()
Checklist accionable
- Transforma variables numéricas según la distribución.
- Crea nuevas características no lineales (exponenciales, logarítmicas).
- Maneja datos faltantes adecuadamente (sustitución, eliminación).
- Utiliza técnicas de correlación para seleccionar características relevantes.
- Transforma variables categóricas a una forma útil para los modelos (one-hot encoding, label encoding).
Cierre con "Siguientes pasos"
Siguientes pasos
- Explorar más profundamente en el manejo de correlaciones no lineales.
- Experimentar con diferentes técnicas de feature engineering para mejorar la precisión del modelo.
- Aprender sobre validación cruzada y separación adecuada de datos para evitar overfitting.
Siguiendo estos pasos, podrás mejorar significativamente el performance de tus modelos de machine learning, asegurándote de que estén bien ajustados a los datos sin overfitting.