Cómo construir una cuadrícula de calificación crediticia a partir de un modelo de regresión logística

Todo el código utilizado en este artículo está disponible en GitHub. Las funciones de lógica de negocios y modelado se encuentran en el directorio src/selection, específicamente en el siguiente archivo:

src/modelado/score_computation.py

Los análisis y resultados correspondientes están documentados en:

09_score_computation.qmd

Las imágenes, tablas y gráficos se generaron con la ayuda del asistente de codificación Codex.

su puntaje crediticio lo sigue a todas partes. Decide si obtienes un préstamo, una tarjeta de crédito o incluso un apartamento. El modelo detrás de la mayoría de estas decisiones es FICO. Su lógica es simple una vez que la desglosas.

FICO pesa cinco cosas:

Historial de pagos (35%): paga tus facturas a tiempo. Montos adeudados (30%): mantenga su uso de crédito por debajo del 20%. Duración de la historia (15%): cuanto más larga, mejor. Mix de crédito (10%): utilizar diferentes tipos de crédito. Nuevo crédito (10%): límite de nuevas solicitudes.

Si paga las facturas de su tarjeta de crédito a tiempo, su puntaje aumenta. El historial de pagos tiene el mayor peso.

Estos pesos producen una puntuación, dividida en rangos:

300–579: pobre. 580–669: justo. 670–739: Bien. 740–799: Muy bien. 800–850: Excelente.

Este artículo sigue la misma lógica, pero la aplica a nuestro propio modelo.

Utilizamos el conjunto de datos de esta serie para crear un modelo de puntuación. El objetivo es simple: asignar un peso a cada variable retenida, calcular la puntuación de cada cliente en nuestros datos y mostrar cómo se calcula la puntuación de un nuevo cliente.

Como antes, Codex ayudó a escribir el código y crear tablas y gráficos. Sigo diciendo esto porque es importante: puedes utilizar agentes de IA para acelerar tu trabajo. Pero verifique su producción. La confianza crece sólo cuando la verificas. Utilice estas herramientas, pero manténgase alerta.

Recordemos lo que encontramos la última vez. Mantuvimos cuatro variables:

lend_int_rate: la tasa de interés del préstamo. préstamo_percent_ingreso: la proporción de los ingresos gastados en pagos de préstamos. cb_person_default_on_file: si el prestatario incumplió antes. home_ownership_3: el estado de la vivienda del prestatario.

Al igual que FICO, le damos un peso a cada variable y creamos una puntuación de 0 a 1000. Una puntuación alta significa riesgo bajo. Una puntuación baja significa un alto riesgo de incumplimiento.

De los coeficientes del modelo a una puntuación

Convertimos cada coeficiente en una puntuación.

Puntuación para cada categoría de una variable.

Tomemos como ejemplo lend_int_rate. La puntuación para la categoría ii es:

𝑺𝑪(𝒋,𝒊)=1000×|𝒄(𝒋,𝒊)−𝜶𝒋|∑𝒋=1𝒑𝜶𝒋\bm{ SC(j,i) = 1000 \times \frac{ \left|c(j,i)-\alpha_j\right| }{ \sum_{j=1}^{p}\alpha_j } }

Aquí, c(j,i)c(j,i) es el coeficiente para la categoría ii de la variable jj. Y αj\alpha_j es el coeficiente más alto para la variable jj. Por ejemplo, para la variable lend_int_rate, el coeficiente más alto es αj=1.357044926979\alpha_j = 1.357044926979.

Esta fórmula proporciona la tabla de puntuación a continuación.

La puntuación de un cliente, paso a paso

Toma un nuevo cliente. Comprobamos en qué categoría entran para cada variable:

lend_int_rate es del 10%. Puntuación: 181,72. préstamo_percent_ingreso es 25%. Puntuación: 0. No hay incumplimiento anterior (cb_person_default_on_file = N). Puntuación: 59,52. Es propietario de su casa (home_ownership_3 = OWN). Puntuación: 373,94.

Sumamos estas puntuaciones para obtener la puntuación final del cliente: 181,72+59,52+0+373,94=615,18\bm{181,72 + 59,52 + 0 + 373,94 = 615,18}

Repetimos esto para cada cliente en nuestros datos.

¿Cuánto importa cada variable?

Una vez que tenemos la puntuación, nos preguntamos: ¿qué variable la impulsa más?

Medimos esto en los datos de entrenamiento:

Aquí:

pk: proporción de clientes en la categoría k de la variable j;p_k : \text{ proporción de clientes en la categoría } k \text{ de la variable } j; La barra sobre SCj\mathrm{SC}_j representa la puntuación promedio de la variable j, ponderada por la población; mj: número de categorías en la variable j;m_j : \text{ número de categorías en la variable } j; n: número de variables en el modelo.n : \text{ número de variables en el modelo.}

En palabras sencillas, qjq_j​ muestra cuánto la variable jj mueve la puntuación. Cuanto mayor sea la variación entre sus distintas categorías, mayor será su peso.

La siguiente tabla muestra el peso de cada variable.

préstamo_percent_ingreso es el que más pesa, con un 35%. Luego, home_ownership_3 al 31%, lend_int_rate al 28% y cb_person_default_on_file por último.

Esto tiene sentido. Un cliente que gasta más del 20% de sus ingresos en pagos de préstamos es riesgoso. El hecho de que esta variable sea la que más impulse la puntuación es una buena noticia: el modelo capta la señal correcta.

¿La puntuación separa bien el riesgo?

Antes de construir la cuadrícula de riesgos, comprobamos si la puntuación hace su trabajo: separar a los morosos de los no morosos.

Trazamos la densidad de la puntuación para cada grupo, dividida de forma predeterminada, entre datos de tren, pruebas y fuera de tiempo.

Cuanto más separadas estén las dos curvas, mejor funcionará la puntuación.

Lo que vemos: los impagos se agrupan en puntuaciones bajas. Los incumplimientos se agrupan en puntuaciones altas. Esto es lo que queremos: puntuación alta, riesgo bajo.

Construyendo la red de riesgos

Ahora construimos la cuadrícula.

Paso 1: Tasa de incumplimiento por grupo de puntuación

Dividimos la puntuación en 20 grupos iguales y trazamos la tasa de incumplimiento para cada uno. Comenzamos trazando la tasa de incumplimiento frente a los vingtiles (20 segmentos del mismo tamaño) de la puntuación final.

Este gráfico es la base de la cuadrícula: proporciona un punto de partida natural para agrupar los 20 segmentos en seis clases de riesgo.

Paso 2: Seis clases de riesgo

Según el gráfico, agrupamos los 20 segmentos de esta manera:

Grupos 1, 2, 3, con puntuaciones entre 0 y 241: puntuaciones más bajas, mayor riesgo. Grupos 4, 5, 6, con puntuaciones entre 241 y 331. Grupos 7, 8, con puntuaciones entre 332 y 498. Grupos 9, 10, 11, 12, con puntuaciones entre 498 y 589. Grupos 13, 14, 15, 16, 17, con puntuaciones entre 589 y 780. Grupos 18, 19, 20, con puntuaciones entre 781 y 1000: puntuaciones más altas, menor riesgo.

Estas clases deben cumplir tres reglas:

✓ Cada clase debe ser uniforme en riesgo;
✓ Cada clase debe diferir de la siguiente en al menos un 30%;
✓ Cada clase debe tener al menos el 1% de todos los clientes.

La tabla anterior muestra que se están siguiendo estas reglas.

Paso 3: comprobar la estabilidad

Una red de riesgo sólo funciona si se mantiene en el tiempo. Comprobamos dos cosas:

Las clases más riesgosas siempre deben mostrar tasas de incumplimiento más altas, a lo largo de todo el historial. El número de clientes en cada clase debe mantenerse constante en el tiempo.

Ambas cosas son ciertas: el riesgo se mantiene en el orden correcto y el tamaño de las clases se mantiene estable.

Conclusión

Este artículo cierra nuestra serie sobre la construcción de un modelo de puntuación. Empezamos con los datos y terminamos con una cuadrícula de riesgos.

Construimos una puntuación de 0 a 1000 puntuando cada categoría de cada variable. La puntuación de un cliente es la suma de las puntuaciones de estas categorías. La puntuación divide bien el riesgo: los morosos y los no morosos se sitúan en rangos claramente diferentes.

El peso de cada variable: préstamo_percent_ingreso lidera al 35%, luego home_ownership_3 al 31%, préstamo_int_rate al 28% y cb_person_default_on_file al final.

👉 Es bueno saberlo: cuanto mayores sean sus ingresos en comparación con su préstamo, mayor será su puntuación.

La tabla de riesgos final:

0–241: riesgo muy alto. 241–331: alto riesgo. 332–498: Riesgo medio-alto. 499–589: Riesgo medio. 590–789: riesgo bajo. 790–1000: riesgo muy bajo.

Mantuve este artículo breve a propósito. Construimos la cuadrícula aquí usando vingtiles y agrupación visual, pero existen otros métodos estadísticos para dividir las puntuaciones en clases homogéneas. Las medias K, la agrupación jerárquica y el peso de la evidencia (WoE) ofrecen un camino más riguroso hacia el mismo objetivo. Ese será el tema de mi próximo artículo.

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.