falla por una razón: mala selección de variables. Eliges variables que funcionan con tus datos de entrenamiento. Se desmoronan con nuevos datos. El modelo luce muy bien en desarrollo y se interrumpe en producción.
Hay una mejor manera. Este artículo le muestra cómo seleccionar variables que sean estables, interpretables y sólidas, sin importar cómo divida los datos.
La idea central: estabilidad por encima del rendimiento
Una variable es robusta si importa en cada subconjunto de datos, no solo en el conjunto de datos completo.
Para comprobar esto, dividimos los datos de entrenamiento en 4 pliegues mediante validación cruzada estratificada. Estratificamos según la variable predeterminada y el año para garantizar que cada pliegue sea representativo de la población completa.
Desde sklearn.model_selection importe StratifiedKFold. skf = StratifiedKFold(n_splits=4, shuffle=True, random_state=42) train_imputed[“fold”] = -1 para doblar, (_, test_idx) en enumerar (skf.split (train_imputed, train_imputed)[“def_year”])): tren_imputado.loc[test_idx, “fold”] = doblar
Luego construimos cuatro pares (entrenamiento, prueba). Cada par utiliza tres pliegues para entrenamiento y uno para prueba. Aplicamos todas las reglas de selección únicamente en el conjunto de entrenamiento, nunca en el conjunto de prueba. Esto evita la fuga de datos.
pliegues = build_and_save_folds(train_imputed, fold_col=”fold”, save_dir=”folds/”)
Una variable sobrevive a la selección sólo si pasa los criterios en los cuatro pliegues. Un pliegue débil es suficiente para eliminarlo.
El conjunto de datos
Utilizamos el conjunto de datos de calificación crediticia de Kaggle. Contiene 32.581 préstamos otorgados a prestatarios individuales.
Los préstamos cubren necesidades médicas, personales, educativas y profesionales, así como la consolidación de deudas. Los montos de los préstamos oscilan entre $500 y $35,000.
El conjunto de datos tiene dos tipos de variables:
Características del contrato: monto del préstamo, tasa de interés, propósito del préstamo, calificación crediticia, tiempo desde su originación. Características del prestatario: edad, ingresos, años de experiencia, situación de la vivienda.
Identificamos 7 variables continuas:
persona_ingreso persona_edad persona_emp_longitud préstamo_amnt préstamo_int_tasa préstamo_porcentaje_ingreso cb_persona_cred_hist_longitud
Identificamos 4 variables categóricas:
person_home_ownership cb_person_default_on_file préstamo_intención calificación_préstamo
El objetivo es el incumplimiento: 1 si el prestatario incumplió, 0 en caso contrario.
Manejamos los valores faltantes y los valores atípicos en un artículo anterior. Aquí nos centramos en la selección de variables.
El método del filtro: cuatro reglas
El método de filtro utiliza medidas estadísticas de asociación. No necesita un modelo predictivo. Es rápido, auditable y fácil de explicar a partes interesadas no técnicas.
Aplicamos cuatro reglas en secuencia. Cada regla introduce su resultado en la siguiente.
Regla 1: eliminar variables continuas no vinculadas al valor predeterminado
Ejecutamos una prueba de Kruskal-Wallis entre cada variable continua y el objetivo predeterminado. Si el valor p excede el 5% en al menos un pliegue, descartamos la variable. No está vinculado de manera confiable al incumplimiento.
regla1_vars = filtro_no correlacionado_con_destino( pliegues = pliegues, variables = vars_continuas, destino = “def_year”, pvalue_threshold = 0,05,)
Resultado: Todas las variables continuas pasan la Regla 1. Cada variable continua muestra una asociación significativa con el incumplimiento en los cuatro pliegues.
Regla 2: Eliminar las variables categóricas débilmente vinculadas al incumplimiento
Calculamos la V de Cramér entre cada variable categórica y el objetivo predeterminado. La V de Cramér mide la asociación entre dos variables categóricas. Va de 0 (sin enlace) a 1 (enlace perfecto).
Eliminamos una variable si su V de Cramér cae por debajo del 10% en al menos un pliegue. Una asociación fuerte requiere una V superior al 50%.
rule2_vars = filter_categorical_variables( pliegues=pliegues, cat_variables=categorical_vars, target=”def_year”, umbral_bajo=0.10, umbral_alto=0.50,)
Resultado: Mantenemos 3 de 4 variables categóricas. La variable préstamo_int se elimina; su enlace predeterminado es demasiado débil en al menos un pliegue.
Regla 3: eliminar variables continuas redundantes
Dos variables continuas que contienen la misma información dañan el modelo. Crean multicolinealidad.
Calculamos la correlación de Spearman entre cada par de variables continuas. Si la correlación alcanza el 60% o más en al menos un pliegue, eliminamos una variable del par. Mantenemos el que tiene el vínculo más fuerte con el incumplimiento, medido por el valor p más bajo de Kruskal-Wallis.
seleccionado_continuo = filtro_variables_correlacionadas_kfold( pliegues=pliegues, variables=regla1_vars, target=”def_year”, umbral=0.60,)
Resultado: Mantenemos 5 variables continuas. Eliminamos lend_amnt y cb_person_cred_hist_length; ambos estaban fuertemente correlacionados con otras variables retenidas. Esto coincide con nuestros hallazgos en este artículo.
Regla 4: eliminar variables categóricas redundantes
Aplicamos la misma lógica a las variables categóricas. Calculamos la V de Cramér entre cada par de variables categóricas retenidas después de la Regla 2. Si la V alcanza el 50% o más en al menos un pliegue, eliminamos la variable menos vinculada al incumplimiento.
categorías_seleccionadas = filtro_variables_categóricas_correlacionadas( pliegues=pliegues, cat_variables=rule2_vars, target=”def_year”, umbral_alto=0.50,)
Resultado: Mantenemos 2 variables categóricas. Eliminamos el grado_préstamo, que está fuertemente correlacionado con otra variable retenida y tiene un vínculo más débil con el incumplimiento.
Selección Final: 7 Variables
El método de filtro selecciona 7 variables en total, 5 continuas y 2 categóricas. Cada uno de ellos está significativamente vinculado al incumplimiento. Ninguno de ellos es redundante. Y todos aguantan en cada pliegue.
Esta selección es auditable. Puede mostrar cada decisión a un regulador o a una parte interesada del negocio. Puede explicar por qué se mantuvo o eliminó cada variable. Eso es importante en la calificación crediticia.
Cada regla se ejecuta en el conjunto de entrenamiento de cada pliegue. Una variable se descarta si falla en cualquier pliegue. Esto es lo que hace que la selección sea sólida.
En el próximo artículo estudiaremos la monotonicidad y estabilidad temporal de estas 7 variables. Una variable puede ser significativa hoy e inestable en el tiempo. Ambas propiedades son importantes en los modelos de puntuación de producción.
Principales puntos clave del artículo:
La mayoría de los científicos de datos seleccionan variables en función de los datos de entrenamiento. Se rompen con nuevos datos. La regla 1 soluciona este problema: ejecutamos una prueba de Kruskal-Wallis en cada pliegue por separado. La correlación entre la variable continua y el incumplimiento debe ser significativa en los cuatro pliegues. Las variables categóricas son las asesinas silenciosas de los modelos de puntuación. Parecen correlacionados con el valor predeterminado en el conjunto de datos completo. Se desmoronan en un subconjunto. La regla 2 los atrapa: calculamos la V de Cramér en cada pliegue de forma independiente. Por debajo del 10% en cualquier pliegue, desaparece. Dos variables continuas que dicen lo mismo no duplican tu señal. Destruyen tu modelo. La regla 3 detecta cada par correlacionado (Spearman ≥ 60%) en todos los pliegues. Cuando dos variables pelean, la que tiene el vínculo más débil con el incumplimiento pierde. La redundancia categórica es invisible hasta que su modelo no pasa una auditoría. La regla 4 lo pone de manifiesto: calculamos la V de Cramér entre cada par de variables categóricas. Por encima del 50% en cualquier pliegue, se va. Mantenemos la que está más correlacionada con la variable predeterminada.
¿Encontró esto útil? Destaque el repositorio en GitHub y permanezca atento a la próxima publicación sobre monotonicidad y estabilidad temporal.
¿Cómo selecciona variables de manera sólida en sus propios modelos?
Créditos de imagen
Todas las imágenes y visualizaciones de este artículo fueron creadas por el autor utilizando Python (pandas, matplotlib, seaborn y plotly) y Excel, a menos que se indique lo contrario.
Referencias
[1] Lorenzo Beretta y Alessandro Santaniello.
Algoritmos de imputación del vecino más cercano: una evaluación crítica.
Biblioteca Nacional de Medicina, 2016.
[2] Consultoría Nexialog.
Traitement des données manquantes dans le milieu bancaire.
Documento de trabajo, 2022.
[3] John T. Hancock y Taghi M. Khoshgoftaar.
Encuesta sobre datos categóricos para redes neuronales.
Revista de Big Data, 7(28), 2020.
[4] Melissa J. Azur, Elizabeth A. Stuart, Constantine Frangakis y Philip J. Leaf.
Imputación múltiple por ecuaciones encadenadas: ¿qué es y cómo funciona?
Revista internacional de métodos de investigación psiquiátrica, 2011.
[5] Majid Sarmad.
Análisis sólido de datos para diseños experimentales factoriales: métodos y software mejorados.
Departamento de Ciencias Matemáticas, Universidad de Durham, Inglaterra, 2006.
[6] Daniel J. Stekhoven y Peter Bühlmann.
MissForest: imputación de valores perdidos no paramétricos para datos de tipo mixto. Bioinformática, 2011.
[7] Supriyanto Wibisono, Anwar y Amin.
Detección de anomalías meteorológicas multivariadas mediante el algoritmo de agrupamiento DBSCAN.
Revista de Física: Serie de conferencias, 2021.
[8] Laborda, J. y Ryoo, S. (2021). Selección de características en un modelo de calificación crediticia. Matemáticas, 9(7), 746.
Datos y licencias
El conjunto de datos utilizado en este artículo tiene la licencia Creative Commons Attribution 4.0 International (CC BY 4.0).
Esta licencia permite a cualquier persona compartir y adaptar el conjunto de datos para cualquier propósito, incluido el uso comercial, siempre que se proporcione la atribución adecuada a la fuente.
Para obtener más detalles, consulte el texto de la licencia oficial: CC0: Dominio público.
Descargo de responsabilidad
Cualquier error o inexactitud restante es responsabilidad del autor. Se aceptan comentarios y correcciones.