Introducción

Los modelos estadísticos han sido utilizados como métodos prédictivos para la probabilidad de que un prestatario incumpla en el pago de sus obligaciones al prestamista [1]. La empresas dedicadas a las finanzas y, en particular, las prestamistas buscan métricas que les ayuden a evaluar si un cliente es un riesgo potencial para su negocio. Estas métricas se pueden resumir en un tarjeta de puntuación (scorecard), la cual presenta rangos de riesgo con base a los criterios críticos de cada empresa. En este proyecto se presenta el entrenamiento y la validación de un modelo de regresión logística para la probabilidad que una persona cumpla o incumpla los pagos. Después, este modelo se convierte en un scorecard el cual asigna unos puntos con base a las características que se seleccionaron de cada cliente.

Datos

Los datos que se utilizan provienen de la base de datos loan_data_2007_2014. Esta base de datos contiene más de 450000 observaciones. Los datos corresponden a características de los préstamos a clientes que la compañía Lending Club realizó entre los años 2007 y 2014. Cuenta con 74 variables (numéricas y categóricas) que describen cada préstamo realizado. Sin embargo, luego de analizar las características predictoras, se encontró que varias de estas eran redundantes o estaban contenidas en otras, por lo que se descartaron del modelo. Además, la variable objetivo del modelo contenía varias categorías que describían si el estado de un cliente había sido bueno o malo, así que se decidió llevar esta variable a binaria (bueno o malo) y se construyó teniendo en cuenta las categorías que esta tenía. Finalmente, se obtiene un conjunto de datos con 22 variables: 21 predictoras y 1 objetivo.

Lectura y procesamiento de los datos

El procesamiento de los datos se llevó a cabo en Python. En este link se puede analizar al detalle cada procedimiento realizado. A continuación se presentan las ideas generales de lo que se realizó:

Figura 1: Histograma variable Installments. Figura 2: Histograma variable Cantidad del préstamo

Figura 1: Histograma variable Installments. Figura 2: Histograma variable Cantidad del préstamo

Datos de entrenamiento y prueba

Con el propósito de validar el modelo predictivo se realiza una división de los datos en entrenamiento y validación. Se utilizó una distribución del 75% para los datos de entrenamiento y 25% para validación. Este procedimiento se llevó a cabo con la ayuda del método split_df del paquete scorecard.

Se presenta resumen de las variables númericas para los datos de entrenamiento:
Figura 3: Distribución de la partición de los datos

Figura 3: Distribución de la partición de los datos

Agrupación de las variables en bins

Uno de los pasos más importantes para la creación del scorecard es lograr agrupar las variables en categorías. Este proceso se conoce como Bining. El cálculo de los bins se hace con el objetivo de calcular el Weight of Evidence Method (WoE) de las variables. En particular, se obtienen por separado los bins y los WoEs asociados a los bins para luego transformar el conjunto de datos con estos nuevos valores. La fórmula que se utiliza para la transformación de los datos en categóricos tiene la siguiente estructura: \[\begin{align} \text{WoE:} \qquad &\ln \frac{\text{Distr Good}}{\text{Distr Bad}} \cdot 100 \\[10pt] \end{align}\]

Estos cálculos se llevan a cabo con la ayuda de la función woebin del paquete scorecard. Para transformar los datos se utiliza woebin_ply.

Selección de variables

Comunmente en Estadística la selección de variables se realiza con los métodos AIC o BIC [2]. Sin embargo en los modelos de scorecard se emplean otra técnicas. En particular:
1. Information Values
2. Population Stability Analyses
3. Correlation Analyses.

En el proyecto se hace uso principalmente de la primera, sin embargo con la tercera opción se refuerza la selección que se hizo.

Información de valores

El cálculo de estos valores para cada variable se obtienen con la siguiente fórmula:
\[\begin{align} \text{IV:} \qquad &\sum_{i=1}^n \left( \text{Distr Good}_i - \text{Distr Bad}_i \right) \cdot \ln \frac{\text{Distr Good}_i}{\text{Distr Bad}_i}\end{align}\] Según [3], si el IV para una variable es inferior a 0.02, entonces esta variable se puede descartar del modelo. Para calcular estos valores se utilizó la función feature_selector del paquete creditmodel. Estas fueron las variables seleccionadas:

## -- Feature filtering by IV
Variable IV
int_rate_woe 0.280
grade_woe 0.272
annual_inc_woe 0.044
purpose_woe 0.022
dti_woe 0.025
inq_last_6mths_woe 0.045

Análisis de correlaciones

Se presenta las correlaciones de las variables que se eligieron con el método de IV.

Figura 4: Gráfico de correlaciones de las variables elegidas por IV

Figura 4: Gráfico de correlaciones de las variables elegidas por IV

Análisis de los agrupamientos

A las variables numéricas se les asignan unos intervalos para categorizarlas. A continuación se muestra un ejemplo con la variable annual_inc

bin count_distr neg pos posprob woe
[-Inf,45000) 0.2352 70717 11512 0.1400 0.2824
[45000,75000) 0.3904 120868 15652 0.1146 0.0536
[75000,105000) 0.2187 69533 6938 0.0907 -0.2071
[105000, Inf) 0.1557 50315 4124 0.0758 -0.4038
## $annual_inc
Figura 5: Distribución de los bins de anuual_inc con su respectiva etiqueta

Figura 5: Distribución de los bins de anuual_inc con su respectiva etiqueta

La gráfica muestra los porcentajes de valores positivos y negativos para cada categoría creada. En este ámbito los positivos son la cantidad de personas que incumplen el pago, y los negativos son quienes los cumplen.

Modelo de regresión logística

Los modelos de regresión logística son lo más usados para realizar predicciones de scorecard [4]. Por esta razón se utilizó este modelo, el cual se implementa con la función glm.

## 
## Call:
## glm(formula = good_bad ~ ., family = binomial(), data = train_woes)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -0.912  -0.537  -0.426  -0.308   2.888  
## 
## Coefficients:
##                    Estimate Std. Error z value            Pr(>|z|)    
## (Intercept)         -2.1000     0.0057  -368.4 <0.0000000000000002 ***
## int_rate_woe         0.6703     0.0245    27.3 <0.0000000000000002 ***
## grade_woe            0.2626     0.0255    10.3 <0.0000000000000002 ***
## annual_inc_woe       0.8761     0.0251    34.9 <0.0000000000000002 ***
## purpose_woe          0.4732     0.0310    15.2 <0.0000000000000002 ***
## dti_woe              0.3991     0.0355    11.3 <0.0000000000000002 ***
## inq_last_6mths_woe   0.6103     0.0250    24.4 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 241334  on 349658  degrees of freedom
## Residual deviance: 228803  on 349652  degrees of freedom
## AIC: 228817
## 
## Number of Fisher Scoring iterations: 5

Métricas de rendimiento del modelo

El desempeño de los modelos de regresión logístico se puede medir de varias formas, cada una de ellas brinda información relevante para diferentes escenarios. Sin embargo, las cuatro métricas más usadas para este análisis son: accuracy, precision, recall y F1-score. Adicionalmente, se tiene confusion matrix, es una técnica sencilla para visualizar el rendimiento de la clasificación de los modelos. A continuación se presentan estas métricas y la gráfica del ROC para determinar cómo se comportan las predicciones entre buenas y malas.

Figura 6: Gráfico ROC. Figura 7: Gráfico de rendimiento F1-score

Figura 6: Gráfico ROC. Figura 7: Gráfico de rendimiento F1-score

Con base a esta tabla se puede determinar un AUC de 0.6682. Para tener valores númericos se presentan las siguientes métricas:

MSE RMSE LogLoss R2 KS AUC Gini
0.094 0.3067 0.3276 0.0337 0.25 0.6682 0.3365

También se presenta la distribución de las probabilidades predichas, agrupas con las etiquetas reales:

Figura 8: Distribución de las probabilidades predichas con su respectiva etiqueta

Figura 8: Distribución de las probabilidades predichas con su respectiva etiqueta

Se puede observar que los valores positivos están solapados con los negativos y muy a la izquierda, lo cual no debería suceder. Un indicio de este comportamiento es que el porcentaje inicial de registros con la variable objetivo positiva es aproximadamente 8%.

Para analizar más al detalle las predicciones del modelo se realiza una matriz de confusión.

## [INFO] The threshold of confusion matrix is 0.1287.
Etiqueta Predicción = 0 Predicción = 1 Error
0 72130 31754 0.3057
1 5886 6856 0.4619
total 78016 38610 0.3227

Como análisis final se calculan las métricas de precision, recall y F1 score con base en la matrix de confusión:

Precision F1 Score Recall
0.1776 0.267 0.5381

Modelo logístico a scorecard

El último paso para completar el modelo de riesgo es pasar del modelo logístico al scorecard. Esto se obtiene asignándoles unos puntos a cada bin calculado y el puntaje total es la suma sobre todas las característica que cumpla el registro en cuestión. Para implementar esta transformación se utiliza la función scorecard, a la cual se le pasa los bins calculados junto con el modelo previamente entrenado. Para predecir el puntaje se utiliza el método scorecard_ply al cual se le pasan las características del registro a predecir y el modelo de scorecard obtenido con la función scorecard.

Predicción del puntaje con el modelo de scorecard

En esta sección se le pasalos datos y el modelo de scorecard. Este modelo devuelve un puntaje total y los puntajes que le asignó en cada característica.

Un ejemplo de predicción con los datos de entrenamiento:

int_rate_points grade_points annual_inc_points purpose_points dti_points inq_last_6mths_points score
-5 -1 -3 -14 -5 -3 598
47 21 -18 -1 4 -20 662
-5 -1 -3 -1 -5 -3 611
-32 -15 -3 9 7 -11 584
-32 -15 -18 -14 7 -11 546
19 7 -18 -14 -1 9 631

Y con los datos de validación:

int_rate_points grade_points annual_inc_points purpose_points dti_points inq_last_6mths_points score
19 7 -18 9 -5 -3 638
-5 -1 -18 9 7 -20 601
-5 -1 -18 -14 7 -11 587
19 7 13 -14 -1 9 662
-5 -1 -18 -1 4 -3 605
76 21 26 4 4 9 769

Variables que más afectan el perfil de riesgo

Veamos los puntos asignados por el scorecard a cada bin de cada variable.

Variable BIN Points
int_rate From -Inf to 7.5 76
int_rate From 7.5 to 9.5 47
int_rate From 9.5 to 13 19
int_rate From 13 to 17 -5
int_rate From 17 to Inf -32
grade A 21
grade B 7
grade C -1
grade D -8
grade E | F | G -15
annual_inc From -Inf to 45000 -18
annual_inc From 45000 to 75000 -3
annual_inc From 75000 to 105000 13
annual_inc From 105000 to Inf 26
purpose credit_card | car 9
purpose major_purchase | home_improvement 4
purpose debt_consolidation | vacation | wedding | medical -1
purpose house | other | moving | renewable_energy | educational | small_business -14
dti From -Inf to 9 7
dti From 9 to 16 4
dti From 16 to 20 -1
dti From 20 to Inf -5
inq_last_6mths From -Inf to 1 9
inq_last_6mths From 1 to 2 -3
inq_last_6mths From 2 to 3 -11
inq_last_6mths From 3 to Inf -20

Analizando los puntos que fueron asignados a cada bin de cada variable, llegamos a lo siguiente:

  • Para la variable int_rate representa un riesgo bastante considerable un valor mayor o igual a 17, pero sus demás posibles valores no tienen el mismo comportamiento, siendo en la mayoría de los casos un valor positivo. Aunque esta variable ciertamente representa un riesgo, definitivamente no es la variable más riesgosa para el modelo.
  • Para la variable grade 5 de sus 7 posibles categorías representan un riesgo para el modelo, por lo que esta podría representar una de las variables más riesgosas.
  • Para las variable porpuse y dti se tienen puntajes (en valor absoluto) relativamente bajos por lo que, parece ser, no son las variables más riesgosas para el modelo.
  • Para la variable inq_last_6mths se tienen valores negativos en su mayoría, por lo que, parece ser, en el modelo se considera como una variable de alto riesgo para el puntaje crediticio.

Resumen del modelo de scorecard

Finalmente, se presenta el resumen de los puntajes que utilizó el modelo:

bin cum_count neg cum_neg pos cum_pos posprob approval_rate
[704, Inf) 14745 14320 14320 425 425 0.0288 0.1264
[671,704) 29657 14074 28394 838 1263 0.0562 0.2543
[652,671) 44626 13924 42318 1045 2308 0.0698 0.3826
[637,652) 58414 12506 54824 1282 3590 0.0930 0.5009
[621,637) 72948 12893 67717 1641 5231 0.1129 0.6255
[605,621) 88073 13013 80730 2112 7343 0.1396 0.7552
[585,605) 102096 11693 92423 2330 9673 0.1662 0.8754
[-Inf,585) 116626 11461 103884 3069 12742 0.2112 1.0000

Se ilustra por medio de un Gráfico de barras de la cantidad de personas (las no Default) agrupadas por el puntaje obtenido:

Figura 9: Gráfico de barras personas No Default por grupo

Figura 9: Gráfico de barras personas No Default por grupo

Similarmente, se ilustran las personas con estado Default agrupadas por el puntaje obtenido:

Figura 10: Gráfico de barras personas Default por grupo

Figura 10: Gráfico de barras personas Default por grupo

Conclusiones

Bibliografía