La Cooperativa Financiera XYZ, otorga a sus asociados créditos de libre inversión, sobre los cuales estima que el 20% presentan incumplimiento con su obligación. Estos impagos afectan la cartera morosa y conllevan a un incremento de las provisiones de segidad, reduciendo la liquidez de la organización. Motivado por lo anterior, la cooperativa requiere construir un modelo de clasificación que identifique a priori, desde el proceso de estudio de crédito, aquellos clientes con mayor riesgo de incurrir en impago.
En el archivo adjunto (Data Clientes Cooperativa.txt) se encuentra la información histórica de los clientes de la Cooperativa Financiera XYZ con algunas características sociodemográficas, además de la etiqueta de Impago (V: Impago, F: Cumplimiento).
Ustedes han sido contratados como consultores analistas. El producto que deben desarrollar es un modelo validado con las mejores características de pronóstico de clientes morosos. Para ello debe utilizar toda su creatividad y atender los siguientes pasos sugeridos.
¿Qué es un crédito de libre inversión?
Es un préstamo de dinero con el que puedes financiar cualquier proyecto. Como su nombre lo indica, al ser de libre inversión eliges el propósito, puede ser para un viaje, remodelar tu vivienda, estudiar o en general para lo que quieras.
Requisitos
Se trabaja con la base de datos “Data Clientes Cooperativa.txt”, esta consta de 4117 observaciones y 11 variables, las cuales son las siguientes:
#estructura
Datos = Datos %>% mutate_if(is.character,as.factor) ##Convertir cadenas de texto a caracteres
Datos = Datos %>% mutate_all(na_if," ") ##Datos vacíos a NA
## Nombres de las variables
level_GENERO=c("m"="M","M"="M","f"="F", "F"="F")
level_MODALIDAD=c("monthly"="Monthly","weekly"="Weekly")
level_CIVIL=c("divsepwid"="Divsepwid","married"="Married","single"="Single")
level_HIPOTECA=c("n"="No","y"="Yes")
level_RIESGO=c("V"="Impago","F"="Cumplimiento")
De acuerdo a la revisión de datos faltantes se halló un dato faltante en la variable GENERO y según nuestro criterio, esta variable es necesaria para lograr clasificar a los individuos morosos, por tal razón se procede a eliminar este individuo y generando una base de datos limpia con 4116 filas (individuos) y una estructura correcta.
En la base de datos, el riesgo está distribuido el 20 % en impago y el 80 % en cumplimiento, se observa el riesgo con cada una de las variables cuantitativas pudiendose plantear hipótesis apriori como la mediana de la edad de los clientes morosos o que presentan impago, es mayor a los clientes cumplidos. Además, puede resultar impactante para el estudio, sin embargo es un hallazgo, donde los clientes morosos tienden a ser aquellos que presentan mayores ingresos. Un dato curioso se halla en los prestamos, donde el 25 % de los clientes con impago no presentan prestamos.
## [[1]]
## NULL
##
## [[2]]
## NULL
##
## [[3]]
## NULL
##
## [[4]]
## NULL
##
## [[5]]
## NULL
El análisis de las variables cualitativas con relación al riesgo de impago (clientes morosos) no presentan diferencias significativas a excepción de las variables hipoteca y modalidad de pago, donde la mayor cantidad de clientes morosos tienen hipoteca y pago mensual.
## [[1]]
## [[1]]$rect
## [[1]]$rect$w
## [1] 0.5741744
##
## [[1]]$rect$h
## [1] 433.2826
##
## [[1]]$rect$left
## [1] 5.625826
##
## [[1]]$rect$top
## [1] 1676
##
##
## [[1]]$text
## [[1]]$text$x
## [1] 6.006763 6.006763
##
## [[1]]$text$y
## [1] 1531.572 1387.145
##
##
##
## [[2]]
## [[2]]$rect
## [[2]]$rect$w
## [1] 0.9725778
##
## [[2]]$rect$h
## [1] 481.8848
##
## [[2]]$rect$left
## [1] 5.227422
##
## [[2]]$rect$top
## [1] 1864
##
##
## [[2]]$text
## [[2]]$text$x
## [1] 5.60836 5.60836
##
## [[2]]$text$y
## [1] 1703.372 1542.743
##
##
##
## [[3]]
## [[3]]$rect
## [[3]]$rect$w
## [1] 0.7107699
##
## [[3]]$rect$h
## [1] 646.3047
##
## [[3]]$rect$left
## [1] 5.48923
##
## [[3]]$rect$top
## [1] 2500
##
##
## [[3]]$text
## [[3]]$text$x
## [1] 5.870168 5.870168
##
## [[3]]$text$y
## [1] 2284.565 2069.130
Para entrenar y comparar múltiples modelos de clasificación, primero se realiza el proceso de balanceo de datos, debido a que los datos están desbalanceados desfavoreciendo a los que incumplen en razón de 1 (imcumple):4 (cumple), se genera una base de datos balanceada (aumentando la cantidad de impagos).
Posteriormente se empieza considerando modelos estadísticos, primero una regresión logística y luego un análisis discriminante.
El modelo seleccionado para la regresión logística es el modelo saturado, presentando la mayoría de las variables significativas a excepción del Género. Sin embargo, teniendo en cuenta que deseamos clasificar a los individuos, el género parece ser una variable necesaria, por lo tanto se dejará en el estudio.
\[Riesgo_i=\beta_0+\beta_1EDAD+\beta_2INGRESOS+\beta_3GENERO+\beta_4ESTADO\_CIVIL+\beta_5NUM\_HIJOS+\beta_6NUM\_TARJETAS+\beta_7MODALIDAD\_PAGO+\beta_8HIPOTECA+\beta_9PRESTAMO+\epsilon\]
## Start: AIC=4873.79
## RIESGO ~ EDAD + INGRESOS + GENERO + ESTADO_CIVIL + NUM_HIJOS +
## NUM_TARJETAS + MODALIDAD_PAGO + HIPOTECA + PRESTAMOS
##
## Df Deviance AIC
## <none> 4851.8 4873.8
## - GENERO 1 4854.8 4874.8
## - HIPOTECA 1 4860.2 4880.2
## - MODALIDAD_PAGO 1 4860.6 4880.6
## - NUM_HIJOS 1 4889.3 4909.3
## - NUM_TARJETAS 1 4891.2 4911.2
## - EDAD 1 4895.8 4915.8
## - PRESTAMOS 1 5009.3 5029.3
## - INGRESOS 1 5115.8 5135.8
## - ESTADO_CIVIL 2 5305.3 5323.3
Del resumen del modelo, se puede observar que las variables que disminuyen el riesgo son estar casado, soltero, la cantidad de hijos, el número de tarjetas y los prestamos, teniendo en cuenta que esta variable es el número de prestamos que presenta el cliente. Por otro lado, la edad, los ingresos, ser de género masculino, contar con hipoteca y modalidad de pago, aumentan el riesgo de ser un cliente moroso. Adicionalmente, hubo cuatro iteraciones antes de que el proceso se detuviera y generara los resultados, puesto que no encontró diferencias al seguir iterando.
##
## Call:
## glm(formula = RIESGO ~ EDAD + INGRESOS + GENERO + ESTADO_CIVIL +
## NUM_HIJOS + NUM_TARJETAS + MODALIDAD_PAGO + HIPOTECA + PRESTAMOS,
## family = "binomial", data = Datos_Balan_Entr)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.9783 -0.6651 -0.2548 0.6603 2.6481
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.187e+00 4.138e-01 2.869 0.00412 **
## EDAD 3.656e-02 5.513e-03 6.633 3.29e-11 ***
## INGRESOS 9.108e-05 5.934e-06 15.349 < 2e-16 ***
## GENEROM 1.250e-01 7.211e-02 1.734 0.08299 .
## ESTADO_CIVILMarried -4.012e+00 2.126e-01 -18.873 < 2e-16 ***
## ESTADO_CIVILSingle -3.992e+00 2.607e-01 -15.314 < 2e-16 ***
## NUM_HIJOS -3.337e-01 5.486e-02 -6.083 1.18e-09 ***
## NUM_TARJETAS -2.771e-01 4.441e-02 -6.239 4.40e-10 ***
## MODALIDAD_PAGO.L 2.403e-01 8.147e-02 2.949 0.00318 **
## HIPOTECAYes 2.901e-01 1.002e-01 2.896 0.00378 **
## PRESTAMOS -9.711e-01 7.902e-02 -12.289 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 7345.6 on 5298 degrees of freedom
## Residual deviance: 4851.8 on 5288 degrees of freedom
## AIC: 4873.8
##
## Number of Fisher Scoring iterations: 4
Se puede mejorar el performance de la regresión sintonizando (Tuning) el punto de corte pc, donde se establece un pc de 0.25 para intentar mejorar los indicadores de correcta clasificación de sensibilidad y accuracy para dicho modelo.
Por medio de los indicadores de correcta clasificación, se observa que el modelo logístico presenta un Accuracy del 75.61 % y una sensibilidad de aproximadamente 90.67 %, la cual es bastante alta porque nuestro objetivo es clasificar clientes morosos.
## $RLG
## Sensitivity Specificity Pos Pred Value
## 0.9067055 0.6056338 0.7116705
## Neg Pred Value Precision Recall
## 0.8580931 0.7116705 0.9067055
## F1 Prevalence Detection Rate
## 0.7974359 0.5177358 0.4694340
## Detection Prevalence Balanced Accuracy
## 0.6596226 0.7561697
Realizando un análisis discriminante, se obtiene un accuracy de aproximadamente 81.1 % y una sensibilidad mucho más alta que en la regresión logística, presentando un valor de 78.86 %.
##Segundo modelo estadístico: Analisis Discriminante
Modelo_LDA <- MASS::lda(formula= RIESGO~., data=Datos_Balan_Entr,CV=FALSE)
Mediante la Curva ROC se explora un punto de corte alternativo - LDA-Fisher, donde se obtuvo un valor de -0.188 con una sensibilidad y un accuracy más altos de 82.65 % y 81.78 % respectivamente, lo cual indica que el análisis discriminante está clasificando mejor a los clientes morosos cuando en realidad lo son.
Performance - Indicadores de correcta clasificación - LDA- Bayes con pc=-0.188
## Sensitivity Specificity Pos Pred Value
## 0.8265306 0.8090767 0.8229318
## Neg Pred Value Precision Recall
## 0.8128931 0.8229318 0.8265306
## F1 Prevalence Detection Rate
## 0.8247273 0.5177358 0.4279245
## Detection Prevalence Balanced Accuracy
## 0.5200000 0.8178036
Aplicando un algoritmo de aprendizaje automático, se decidió generar un árbol de clasificación, donde se empieza desde el árbol más complejo y se va “podando”
Modelo_Arbol<- rpart::rpart(formula = RIESGO ~ ., data=Datos_Balan_Entr,control = rpart.control(cp = 0.0001))
rpart.plot::rpart.plot(Modelo_Arbol,type=1)
Se determina realizar el árbol de clasificación con un cp de 0.00418888, el cual nos parece bueno, debido a que buscar un error esperado más bajo se puede lograr, sin embargo el árbol será demasiado complejo.
Se puede observar que clasifica a los clientes morosos cuando
##
## Classification tree:
## rpart::rpart(formula = RIESGO ~ ., data = Datos_Balan_Entr, control = rpart.control(cp = 1e-04))
##
## Variables actually used in tree construction:
## [1] EDAD ESTADO_CIVIL GENERO HIPOTECA INGRESOS
## [6] MODALIDAD_PAGO NUM_HIJOS NUM_TARJETAS PRESTAMOS
##
## Root node error: 2626/5299 = 0.49557
##
## n= 5299
##
## CP nsplit rel error xerror xstd
## 1 0.57425743 0 1.00000 1.00000 0.0138597
## 2 0.01865956 1 0.42574 0.42574 0.0113102
## 3 0.00990099 2 0.40708 0.40708 0.0111242
## 4 0.00837776 3 0.39718 0.40594 0.0111125
## 5 0.00637852 4 0.38880 0.39947 0.0110456
## 6 0.00533130 8 0.36329 0.38271 0.0108673
## 7 0.00418888 10 0.35263 0.37471 0.0107794
## 8 0.00342727 12 0.34425 0.37471 0.0107794
## 9 0.00285605 13 0.34082 0.37167 0.0107455
## 10 0.00228484 17 0.32940 0.36976 0.0107241
## 11 0.00190404 21 0.32026 0.35567 0.0105627
## 12 0.00171363 29 0.30427 0.34539 0.0104410
## 13 0.00152323 33 0.29627 0.33359 0.0102972
## 14 0.00139629 39 0.28675 0.32407 0.0101778
## 15 0.00133283 52 0.26085 0.32102 0.0101390
## 16 0.00114242 59 0.24943 0.31493 0.0100603
## 17 0.00106626 68 0.23915 0.31188 0.0100205
## 18 0.00104722 73 0.23382 0.30998 0.0099954
## 19 0.00095202 77 0.22963 0.30998 0.0099954
## 20 0.00088855 79 0.22772 0.30541 0.0099348
## 21 0.00076161 82 0.22506 0.30236 0.0098939
## 22 0.00066641 89 0.21973 0.30236 0.0098939
## 23 0.00057121 96 0.21439 0.29970 0.0098578
## 24 0.00038081 98 0.21325 0.29855 0.0098423
## 25 0.00022848 113 0.20602 0.30160 0.0098836
## 26 0.00019040 123 0.20373 0.30427 0.0099195
## 27 0.00012694 136 0.20107 0.30731 0.0099601
## 28 0.00010000 139 0.20069 0.30960 0.0099904
Generando los indicadores para evaluar la clasificación del modelo, con el árbol seleccionado se obtiene un accuracy aproximado de 82.0 % y una sensibilidad de 78.1 % aproximadamente, será necesario comparar cada uno de estos indicadores con el análisis discriminante y con los siguientes modelos para tomar una decisión óptima y acertada.
## Sensitivity Specificity Pos Pred Value
## 0.7730829 0.8513120 0.8288591
## Neg Pred Value Precision Recall
## 0.8010974 0.8288591 0.7730829
## F1 Prevalence Detection Rate
## 0.8000000 0.4822642 0.3728302
## Detection Prevalence Balanced Accuracy
## 0.4498113 0.8121974
Se realiza una máquina de soporte vectorial (SVM), donde por medio de esta se optiene la sensibilidad más alta hallada hasta el momento de 82.94 % y un accuracy del 80.76 % aproximadamente. Este caso es un punto a discutir con la Cooperativa contratante, porque se necesita que solamente clasifique a los clientes morosos o necesita saber el por qué o cómo clasificó a cada cliente?, de ser así se toma una decisión.
Modelo_svm= e1071::svm(formula = RIESGO ~ ., data=Datos_Balan_Entr, type = 'C-classification', kernel = 'linear')
## Sensitivity Specificity Pos Pred Value
## 0.8294210 0.7857143 0.7828656
## Neg Pred Value Precision Recall
## 0.8317901 0.7828656 0.8294210
## F1 Prevalence Detection Rate
## 0.8054711 0.4822642 0.4000000
## Detection Prevalence Balanced Accuracy
## 0.5109434 0.8075676
Realizando por último el modelo de ensamble Random Forest, empleando un 10-fold repetido 10 veces haciendo una sintonización del cp entre valores de 0.001 y 0.07, donde gráficamente podemos determinar que 0.022 con el objetivo de presentar un accuracy alto sin tanta complejidad.
Los indicadores de correcta clasificación para los datos entrenamiento presentan una sensibilidad y un accuracy mayor al 84 %.
## Sensitivity Specificity Pos Pred Value
## 0.8563412 0.9166032 0.9126794
## Neg Pred Value Precision Recall
## 0.8624149 0.9126794 0.8563412
## F1 Prevalence Detection Rate
## 0.8836132 0.5044348 0.4319683
## Detection Prevalence Balanced Accuracy
## 0.4732968 0.8864722
Los indicadores de correcta clasificación de los datos de Test siguen presentando unos valores altos en la sensibilidad y en el accuracy, del 82.78 % y 85.85 % respectivamente.
## Sensitivity Specificity Pos Pred Value
## 0.8278560 0.8892128 0.8743802
## Neg Pred Value Precision Recall
## 0.8472222 0.8743802 0.8278560
## F1 Prevalence Detection Rate
## 0.8504823 0.4822642 0.3992453
## Detection Prevalence Balanced Accuracy
## 0.4566038 0.8585344
Al realizar el bosque aleatorio para mejorar el modelo planteado, la medida de Gini de impureza, proporciona más información acerca de la distribución de los datos por nodo, es decir la precisión de clasificación utilizada y por tanto, las variables con esta medida más alta son ingresos, edad y prestamos, seguidas del número de tarjetas y número de hijos.
Los indicadores de correcta clasificación para nuevos datos demuestran que el random forest sintonizado presenta un accuracy del 85.63 % y una sensibilidad del 88.65 %.
## Sensitivity Specificity Pos Pred Value
## 0.8841941 0.9897959 0.9877622
## Neg Pred Value Precision Recall
## 0.9017264 0.9877622 0.8841941
## F1 Prevalence Detection Rate
## 0.9331131 0.4822642 0.4264151
## Detection Prevalence Balanced Accuracy
## 0.4316981 0.9369950
Al generar una matriz con todos los indicadores de clasificación correcta para cada uno de los modelos empleados, se pueden observar los siguientes resultados, los cuales serán analizados en conjunto en el Punto 4 y de forma individual, fueron analizados en los puntos anteriores.
## RLG LDA Tree SVM Tree.tr
## Sensitivity 0.9067055 0.8265306 0.7730829 0.8294210 0.8563412
## Specificity 0.6056338 0.8090767 0.8513120 0.7857143 0.9166032
## Pos Pred Value 0.7116705 0.8229318 0.8288591 0.7828656 0.9126794
## Neg Pred Value 0.8580931 0.8128931 0.8010974 0.8317901 0.8624149
## Precision 0.7116705 0.8229318 0.8288591 0.7828656 0.9126794
## Recall 0.9067055 0.8265306 0.7730829 0.8294210 0.8563412
## F1 0.7974359 0.8247273 0.8000000 0.8054711 0.8836132
## Prevalence 0.5177358 0.5177358 0.4822642 0.4822642 0.5044348
## Detection Rate 0.4694340 0.4279245 0.3728302 0.4000000 0.4319683
## Detection Prevalence 0.6596226 0.5200000 0.4498113 0.5109434 0.4732968
## Balanced Accuracy 0.7561697 0.8178036 0.8121974 0.8075676 0.8864722
## Tree.te RF_tune
## Sensitivity 0.8278560 0.8841941
## Specificity 0.8892128 0.9897959
## Pos Pred Value 0.8743802 0.9877622
## Neg Pred Value 0.8472222 0.9017264
## Precision 0.8743802 0.9877622
## Recall 0.8278560 0.8841941
## F1 0.8504823 0.9331131
## Prevalence 0.4822642 0.4822642
## Detection Rate 0.3992453 0.4264151
## Detection Prevalence 0.4566038 0.4316981
## Balanced Accuracy 0.8585344 0.9369950
Para generar una recomendación a la cooperativa respecto al modelo que debe emplear para el otorgamiento del crédito nos apoyaremos del Punto 3.1 y se explicará las ventajas y desventajas de los modelos probados.
Debido a que para la cooperativa lo más importante es lograr clasificar los clientes morosos, nos fijaremos con prioridad en la sensibilidad más que en la especificidad debido a que la sensibilidad nos representa los clientes clasificados como morosos cuando en realidad son morosos, en segunda instancia estaremos teniendo en cuenta el accuracy, el cual mide el porcentaje de casos que el modelo ha acertado en su clasificación.
Teniendo en cuenta lo anteriormente mencionado, los modelos con los valores del accuracy más altos son la Regresión logística, Random Forest y Máquina de soporte vectorial. Por lo tanto, la sugerencia para lograr la clasificación de los clientes morosos es con la realización de un modelo logístico tuneado como se realizó anteriormente y la gran ventaje de este modelo es que se podrán analizar los coeficientes de las variables predictoras.