feature_engineering
Descripción General
Módulo de ingeniería de características para crear variables derivadas automáticamente. Mejora el poder predictivo de los modelos mediante transformaciones, ratios e interacciones.
Clases Principales
FeatureEngineer
Métodos de Creación de Características
create_financial_ratios
Crea ratios financieros fundamentales.
- Returns:
DataFrame con ratios financieros
Ratios creados:
ltv_ratio: Loan-to-Value (Préstamo/Valor inmueble) %
dti_ratio: Debt-to-Income (Deuda/Ingreso) %
capacidad_ahorro_nueva: Salario - Egresos
ratio_ahorro_salario: (Ahorro/Salario) %
ratio_patrimonio_deuda: Patrimonio/Deuda
saldo_relativo: Saldo banco/Salario
meses_colchon: Saldo/Cuota mensual
ratio_cuota_inicial: (Cuota inicial/Valor inmueble) %
Ejemplo:
df_with_ratios = engineer.create_financial_ratios()
# Ver nuevos ratios
print(df_with_ratios[['ltv_ratio', 'dti_ratio', 'meses_colchon']].head())
create_risk_indicators
Crea indicadores de riesgo específicos.
- Parameters:
df(DataFrame): DataFrame con ratios financieros
- Returns:
DataFrame con indicadores de riesgo
Indicadores creados:
score_edad: Penalización por edades extremas
flag_sobreendeudamiento: DTI > 40% (binario)
nivel_sobreendeudamiento: Bajo/Moderado/Alto/Crítico
score_estabilidad: Estabilidad laboral (0-125)
riesgo_legal: Función exponencial de demandas
score_educacion: Codificación ordinal (1-4)
flag_alta_liquidez: Saldo > 3 salarios (binario)
Ejemplo:
df_with_indicators = engineer.create_risk_indicators(df)
# Ver indicadores
print(df_with_indicators[['score_edad', 'score_estabilidad', 'riesgo_legal']].head())
create_interaction_features
Crea variables de interacción entre características.
- Parameters:
df(DataFrame): DataFrame con características base
- Returns:
DataFrame con interacciones
Interacciones creadas:
educacion_x_salario: Educación × Salario/1M
propiedades_x_patrimonio: Propiedades × log(Patrimonio)
edad_x_empleo: Edad × Antigüedad empleo
ltv_x_puntaje: LTV × (900 - Puntaje DataCrédito)/100
Ejemplo:
df_with_interactions = engineer.create_interaction_features(df)
# Ver interacciones
print(df_with_interactions[['educacion_x_salario', 'ltv_x_puntaje']].head())
create_binned_features
Crea variables discretizadas/categorizadas.
- Parameters:
df(DataFrame): DataFrame con variables continuas
- Returns:
DataFrame con variables discretizadas
Variables discretizadas:
grupo_edad: Joven/Adulto_Joven/Adulto/Adulto_Mayor
rango_salarial: Muy_Bajo/Bajo/Medio/Alto/Muy_Alto
categoria_puntaje: Malo/Regular/Bueno/Muy_Bueno/Excelente
nivel_ltv: Muy_Bajo/Bajo/Medio/Alto/Muy_Alto
Ejemplo:
df_binned = engineer.create_binned_features(df)
# Ver distribución de grupos
print(df_binned['grupo_edad'].value_counts())
print(df_binned['rango_salarial'].value_counts())
create_transformed_features
Crea variables transformadas matemáticamente.
- Parameters:
df(DataFrame): DataFrame con variables originales
- Returns:
DataFrame con transformaciones
Transformaciones aplicadas:
Logarítmica: Para variables con distribución sesgada
Raíz cuadrada: Alternativa a log para valores pequeños
Cuadrática: Para capturar relaciones no lineales
- Variables transformadas:
salario_mensual_log, salario_mensual_sqrt
patrimonio_total_log, patrimonio_total_sqrt
valor_inmueble_log, valor_inmueble_sqrt
saldo_promedio_banco_log, saldo_promedio_banco_sqrt
dti_cuadrado
edad_cuadrado
calculate_feature_importance
Calcula importancia de características usando mutual information.
- Parameters:
df(DataFrame): DataFrame con característicastarget_col(str): Variable objetivo (default: “nivel_riesgo”)
- Returns:
Diccionario ordenado con importancias
Ejemplo:
importance = engineer.calculate_feature_importance(df_enhanced, 'nivel_riesgo')
# Top 10 características
for feature, score in list(importance.items())[:10]:
print(f"{feature}: {score:.4f}")
generate_all_features
Genera todas las características derivadas en un solo paso.
- Returns:
DataFrame con todas las características
Proceso completo:
Ratios financieros
Indicadores de riesgo
Variables de interacción
Variables discretizadas
Transformaciones matemáticas
Funciones de Renderizado
render_feature_engineering
Renderiza el módulo de ingeniería de características en Streamlit.
render_feature_engineering_module
Función principal para renderizar el módulo completo.
Ejemplo Completo de Uso
from src.feature_engineering import FeatureEngineer
import pandas as pd
# Cargar datos originales
df = pd.read_csv("datos_credito_hipotecario_realista.csv")
print(f"Características originales: {len(df.columns)}")
# Crear ingeniero
engineer = FeatureEngineer(df)
# Generar todas las características
df_enhanced = engineer.generate_all_features()
print(f"Características totales: {len(df_enhanced.columns)}")
print(f"Nuevas características: {len(engineer.new_features)}")
# Ver nuevas características
print("\nNuevas características creadas:")
for feature, description in engineer.new_features.items():
print(f" - {feature}: {description}")
# Calcular importancia
importance = engineer.calculate_feature_importance(df_enhanced)
print("\nTop 10 características más importantes:")
for i, (feature, score) in enumerate(list(importance.items())[:10], 1):
print(f"{i:2d}. {feature:30s}: {score:.4f}")
# Guardar dataset enriquecido
df_enhanced.to_csv("datos_con_caracteristicas.csv", index=False)
print(f"\n✅ Dataset enriquecido guardado")
Fórmulas de Características
Ratios Financieros
Indicadores de Riesgo
Ver también
data_processor - Procesamiento de datos
supervised_models - Modelos de clasificación
rbm_model - Características RBM