Feature engineering
Introducción
En la ciencia de datos, el feature engineering es uno de los pasos más cruciales y a veces olvidado. Es la fase donde convertimos los datos brutos en características que pueden ser utilizadas por un modelo para aprender patrones útiles. Una buena estrategía de feature engineering puede mejorar significativamente la precisión del modelo, reducir el overfitting y aumentar la generalización. En esta guía, exploraremos cómo realizar feature engineering efectivo y evitar errores comunes en este proceso.
Explicación principal con ejemplos
Transformaciones numéricas
Una de las tareas más básicas del feature engineering es transformar variables numéricas para que sean más útiles para los modelos. Por ejemplo, podemos aplicar una transformación logarítmica a una variable que tiene un rango muy amplio:
import numpy as np
def log_transform(data):
return np.log1p(data)
# Ejemplo de uso
data = [10, 20, 30, 40]
transformed_data = log_transform(data)
print(transformed_data)
Creación de características intermedias
Creación de nuevas características a partir de combinaciones o transformaciones de las existentes puede mejorar significativamente el rendimiento del modelo. Por ejemplo, si estamos trabajando con datos de venta en una tienda, podemos crear una nueva característica que represente el día de la semana:
import pandas as pd
def add_day_of_week(df):
df['day_of_week'] = df['date'].dt.dayofweek
return df
# Ejemplo de uso
data = pd.DataFrame({'date': ['2023-01-01', '2023-01-02', '2023-01-03']})
df_transformed = add_day_of_week(data)
print(df_transformed)
Manejo de datos categóricos
Los modelos basados en regresión o clasificación no pueden manejar directamente variables categóricas. Es necesario transformar estas variables a valores numéricos utilizando técnicas como one-hot encoding:
from sklearn.preprocessing import OneHotEncoder
def encode_categorical(data):
encoder = OneHotEncoder()
encoded_data = encoder.fit_transform(data).toarray()
return encoded_data
# Ejemplo de uso
data = pd.DataFrame({'color': ['red', 'green', 'blue']})
encoded_data = encode_categorical(data)
print(encoded_data)
Selección de características relevantes
Eliminar características irrelevantes o no útiles puede mejorar la velocidad y precisión del modelo. Métodos como el análisis de importancia de características (feature importance) en modelos de árboles pueden ayudar a identificar las características más importantes:
from sklearn.feature_selection import SelectKBest, f_classif
def select_best_features(X, y):
selector = SelectKBest(f_classif, k=3)
X_new = selector.fit_transform(X, y)
return X_new
# Ejemplo de uso
X = pd.DataFrame({'feature1': [10, 20, 30], 'feature2': [40, 50, 60]})
y = pd.Series([1, 2, 3])
selected_features = select_best_features(X, y)
print(selected_features)
Errores típicos / trampas
Ignorar la exploración de datos (EDA)
La exploración de datos es un paso crítico que a menudo se omite. Es importante analizar las distribuciones, relaciones entre variables y valores atípicos antes de realizar feature engineering.
No evaluar el impacto en el rendimiento del modelo
Es fácil centrarse en la transformación de características sin verificar si realmente mejora el rendimiento del modelo. Se debe realizar una validación adecuada para asegurarse de que las transformaciones son útiles.
Usar una misma transformación para entrenamiento y prueba
Las transformaciones deben aplicarse a los datos de entrenamiento y luego usarse en la fase de prueba exactamente igual, sin ajustarlas al conjunto de prueba. Esto puede llevar a resultados falsamente optimistas.
Checklist accionable
- Realiza una EDA exhaustiva antes de comenzar con el feature engineering.
- Aplica transformaciones logarítmicas o raices cuadradas para variables con distribuciones no normales.
- Crea nuevas características a partir de combinaciones existentes, especialmente en datasets temporales.
- Transforma variables categóricas usando one-hot encoding o embeddings.
- Selecciona las características más relevantes utilizando métodos como SelectKBest o Random Forest.
- Evalúa regularmente el rendimiento del modelo después de cada transformación.
- Evita ajustar las transformaciones al conjunto de prueba, siempre aplica las mismas transformaciones a los datos de entrenamiento y prueba.
Cierre con "Siguientes pasos"
Siguientes pasos
- Explora la creación de características interactivas en tus datasets.
- Implementa técnicas avanzadas como el feature scaling o la normalización.
- Aprende a manejar valores atípicos en tus datos para evitar distorsiones en las características.
Siguiendo estas pautas, podrás realizar feature engineering efectivo y mejorar significativamente el rendimiento de tus modelos.