5. Ingeniería de Características

Esta guía te enseñará a crear variables derivadas y transformaciones que mejoren el poder predictivo de tus modelos de Machine Learning.

Objetivo del Módulo

El módulo de ingeniería de características te permite:

  • 🔧 Crear variables derivadas automáticamente

  • 📐 Transformar variables (log, sqrt, polinomiales)

  • 🎯 Codificar categóricas (one-hot, label encoding)

  • 📊 Normalizar y escalar datos

  • 🔗 Generar interacciones entre variables

  • 💡 Aplicar domain knowledge financiero

Acceso al Módulo

En el sidebar, click en:

📈 Análisis → 🔧 Ingeniería de Características

Variables Derivadas Automáticas

El sistema genera automáticamente 15+ características derivadas:

Ratios Financieros

✓ dti (Debt-to-Income): cuota / salario * 100
✓ ltv (Loan-to-Value): monto / valor_inmueble * 100
✓ ratio_patrimonio_deuda: patrimonio / monto
✓ ratio_cuota_ahorro: cuota / capacidad_ahorro
✓ ratio_egreso_salario: egresos / salario * 100

Capacidades

✓ capacidad_ahorro: salario - egresos
✓ capacidad_residual: capacidad_ahorro - cuota
✓ meses_colchon: saldo_banco / cuota

Scores

✓ score_edad: Puntaje basado en edad óptima
✓ score_estabilidad_laboral: Antigüedad + tipo empleo
✓ riesgo_legal: Basado en número de demandas

Interacciones

✓ educacion_x_salario: nivel_educacion * salario
✓ edad_x_antiguedad: edad * antiguedad_empleo
✓ ltv_x_puntaje: ltv * (900 - puntaje_datacredito)

Transformaciones

Transformaciones Numéricas

1. Logarítmica

Para variables con distribución sesgada:

Variables a transformar:
☑ salario_mensual
☑ valor_inmueble
☑ patrimonio_total

Transformación: log(x + 1)

[🔄 Aplicar Transformación Log]

Resultado:

salario_mensual_log creada
Asimetría antes: 1.23 → después: 0.15
Distribución más normal ✓

2. Raíz Cuadrada

Para reducir impacto de outliers:

Variables: monto_credito, cuota_mensual
Transformación: sqrt(x)

3. Box-Cox

Transformación automática óptima:

[🎯 Aplicar Box-Cox Automático]

Lambda óptimo encontrado: 0.23
Transformación aplicada ✓

Transformaciones Polinomiales

Crear términos cuadráticos y cúbicos:

Variable: edad

☑ edad²
☑ edad³

[📐 Generar Polinomios]

Uso: Capturar relaciones no lineales.

Codificación de Variables

Variables Categóricas

1. One-Hot Encoding

Variable: tipo_empleo

Resultado:
✓ tipo_empleo_Formal
✓ tipo_empleo_Informal
✓ tipo_empleo_Independiente

2. Label Encoding

Variable: nivel_educacion

Mapeo:
Bachiller → 1
Técnico → 2
Profesional → 3
Posgrado → 4

3. Target Encoding

Codifica basado en la media del target:

Variable: ciudad
Target: nivel_riesgo

Bogotá → 0.58 (% riesgo alto)
Medellín → 0.62
Cali → 0.65
...

Variables Ordinales

Para variables con orden natural:

Variable: estrato_socioeconomico
Ya es ordinal: 1, 2, 3, 4, 5, 6 ✓

Variable: nivel_dti
Mapeo:
Excelente → 1
Bueno → 2
Aceptable → 3
Límite → 4
Alto → 5
Crítico → 6

Normalización y Escalado

Métodos de Escalado

1. StandardScaler (Z-Score)

Fórmula: (x - μ) / σ

Resultado: Media = 0, Desv. Est. = 1

Uso: Algoritmos sensibles a escala (SVM, KNN, RBM)

2. MinMaxScaler

Fórmula: (x - min) / (max - min)

Resultado: Rango [0, 1]

Uso: Redes neuronales, algoritmos de distancia

3. RobustScaler

Fórmula: (x - mediana) / IQR

Resultado: Robusto a outliers

Uso: Datos con muchos outliers

Aplicar Escalado

Método de escalado: StandardScaler

Variables a escalar:
☑ salario_mensual
☑ valor_inmueble
☑ puntaje_datacredito
☑ dti
☑ ltv

[⚖️ Aplicar Escalado]

Advertencia

Guarda los parámetros del scaler para aplicar a datos nuevos.

Binning y Discretización

Crear Rangos

Binning Equidistante:

Variable: edad
Número de bins: 4

Resultado:
[22-32): Joven
[32-42): Adulto Joven
[42-52): Adulto
[52-65]: Adulto Mayor

Binning por Cuantiles:

Variable: salario_mensual
Cuantiles: 5 (quintiles)

Resultado:
Q1: Muy Bajo ($1M - $2M)
Q2: Bajo ($2M - $3.5M)
Q3: Medio ($3.5M - $5M)
Q4: Medio-Alto ($5M - $8M)
Q5: Alto ($8M+)

Binning Personalizado:

Variable: puntaje_datacredito

Rangos personalizados:
[150-400): Crítico
[400-500): Muy Malo
[500-600): Malo
[600-700): Regular
[700-800): Bueno
[800-850): Muy Bueno
[850-950]: Excelente

Selección de Características

Métodos Automáticos

1. Correlación con Target

[🎯 Calcular Importancia por Correlación]

Top 10 Features:
1. dti: 0.68
2. puntaje_datacredito: -0.54
3. capacidad_residual: -0.48
4. ltv: 0.42
5. score_estabilidad: -0.38
...

2. Mutual Information

Captura relaciones no lineales:

[📊 Calcular Mutual Information]

Top features por MI:
1. dti: 0.42
2. capacidad_residual: 0.38
3. puntaje_datacredito: 0.35
...

3. Feature Importance (Tree-based)

Usa Random Forest para calcular importancia:

[🌳 Calcular Feature Importance]

Importancia por Random Forest:
1. dti: 0.18
2. puntaje_datacredito: 0.15
3. capacidad_residual: 0.12
...

Eliminar Features Redundantes

Multicolinealidad:

[🔍 Detectar Multicolinealidad]

VIF (Variance Inflation Factor):

salario_mensual: 2.3 ✓
patrimonio_total: 8.5 ⚠️ (alta correlación)
capacidad_ahorro: 12.3 ⚠️ (alta correlación)

Recomendación: Eliminar capacidad_ahorro

Correlación Alta:

Pares con correlación > 0.9:

valor_inmueble ↔ monto_credito: 0.95
Acción: Mantener solo monto_credito

Casos de Uso

Caso 1: Preparar para RBM

Objetivo: Crear features para entrenamiento de RBM.

Pasos: 1. Generar variables derivadas automáticas 2. Normalizar con StandardScaler 3. Seleccionar top 20 features 4. Guardar transformaciones

Caso 2: Mejorar Modelo Supervisado

Objetivo: Aumentar precisión de clasificadores.

Pasos: 1. Crear interacciones polinomiales 2. Aplicar transformaciones log 3. Codificar categóricas (one-hot) 4. Seleccionar por importancia

Caso 3: Reducir Dimensionalidad

Objetivo: Eliminar features redundantes.

Pasos: 1. Calcular VIF 2. Eliminar alta multicolinealidad 3. Seleccionar por mutual information 4. Validar con modelo baseline

Tips y Mejores Prácticas

Haz:

  • Crea features basadas en domain knowledge

  • Normaliza antes de RBM y redes neuronales

  • Guarda transformaciones para producción

  • Valida features con modelos simples

Evita:

  • Crear demasiadas features (curse of dimensionality)

  • Aplicar transformaciones sin entender el impacto

  • Olvidar escalar datos de test

  • Usar target encoding sin validación cruzada

Guardar Transformaciones

[💾 Guardar Pipeline de Transformaciones]

Guardado:
✓ Scaler (StandardScaler)
✓ Encoders (OneHot, Label)
✓ Feature names
✓ Parámetros de transformación

Archivo: feature_pipeline.pkl

Importante

Usa el mismo pipeline en producción para consistencia.

Troubleshooting

Problema: Transformación log falla

Solución: Verifica que no haya valores negativos o cero.

Problema: Scaler produce NaN

Solución: Elimina valores faltantes antes de escalar.

Problema: Demasiadas features después de one-hot

Solución: Usa target encoding o agrupa categorías raras.

Próximos Pasos

Con tus features creadas:

  1. Segmentar: 6. Clustering y Segmentación

  2. Entrenar RBM: 7. Máquina de Boltzmann Restringida (RBM)

  3. Modelos supervisados: 8. Modelos Supervisados

¡Features listas para modelado! 🔧