Este informe presenta el desarrollo de un modelo de credit scoring (Sistema automatizado de calificación de crédito), que le permitirá a la entidad identificar la probabilidad de incumplimiento de un cliente en la etapa de otorgación del crédito por libranza y se desarrollará con la información de los clientes que han solicitado algún crédito entre los años 2020 y 2024. La metodología a implementar pretende identificar las principales variables a tener en cuenta al momento de medir la probabilidad de ocurrencia en pago de estos clientes y así poderlos clasificar en diferentes perfiles de riesgo.
Un modelo de regresión logística es una técnica estadística utilizada para predecir la probabilidad de que ocurra un evento, basándose en uno o más predictores. Este modelo es especialmente útil cuando la variable dependiente es binaria (es decir, toma dos posibles valores, como “Buen cliente” o “Mal cliente”, “0” o “1”, “Al dia” o “En mora”).
En un principio se tienen en cuenta un total de 14.239 registros, de los cuales 13.571 fueron clasificados como clientes al día y 668 como clientes morosos. Si nuestra base de datos está desbalanceada (por ejemplo, si hay muchos más clientes buenos que morosos), el modelo puede aprender a predecir siempre la clase mayoritaria (clientes buenos) y fallar en identificar correctamente a los clientes morosos. Esto se debe a que el modelo intenta minimizar el error general y, en un conjunto de datos desbalanceado, puede lograrlo fácilmente ignorando la clase minoritaria.
¿Cómo balancear las clases?
Se realiza un submuestreo, donde reducimos el número de ejemplos de la clase mayoritaria para igualar el número de ejemplos de la clase minoritaria.
A partir del submestreo tenemos una base de 2.090 registros donde 1.427 son clientes al día y 663 de clientes morosos.
En el estudio fueron seleccionados 2092 clientes de manera aleatoria, quienes fueron categorizados como buenos y malos clientes, dependiendo su comportamiendo de pago histórico con la entidad. Para categorizar un cliente como malo, se tomó como principal criterio aquellos que llegaron a un atraso mayor a 60 días (>60 días), los demás clientes que no cumplen este criterio, fueron clasificados como buenos clientes. Así mismo del presente análisis se excluyen los clientes que fueron identificados como fallecidos.
A continuación se mencionan las variables a tener en cuenta para la elaboración del modelo de regresión logistica.
Variables Sociodemograficas y de crédito
Todas las variables de hábito de pago corresponden al comportamiento de pago que tenía el cliente al momento de la aprobación del crédito con la empresa. Se aclara que toda la información fue extraida de la central de riesgo Datacredito ya que hoy en día el estudio y análisis de crédito se realiza sobre esta central de información.
| Nombre | Tipo variable | Desc. Variable |
|---|---|---|
| Genero | Cualitativa | Genero del cliente |
| Escolaridad | Cualitativa | Nivel de educación |
| Estado_civil | Cualitativa | Estado civil del cliente |
| Vivienda | Cualitativa | Tipo de vivienda en la que reside el cliente |
| Zona_Nacimiento | Cualitativa | Zona geográfica donde nació el cliente |
| Zona_residencia | Cualitativa | Zona geográfica donde vive el cliente |
| Edad | Numerica | Edad del cliente al momento del crédito |
| Tipo_Pagaduria | Cualitativa | Tipo de fondo de pensión |
| Destino | Cualitativa | Destino que se le dará al crédito |
| Canal | Cualitativa | Destino que se le dará al crédito |
| Agencia | Cualitativa | Oficina donde se tramitó el crédito |
| Perfil | Cualitativa | Perfil dado por la empresa según su riesgo |
| Monto | Cualitativa | Monto solicitado por el cliente |
| Plazo | Cualitativa | Plazo solicitado por el cliente |
| Default | Cualitativa | 0 = Al dia ; 1 = En mora |
Variables de hábito de pago
| Nombre | Tipo variable | Desc. Variable |
|---|---|---|
| Score | Numerica | Puntaje crediticio en Datacredito |
| Cuentas_ahorro | Numerica | Numero cuentas ahorro o corrientes |
| Cuent_embargadas | Numerica | Numero de cuentas embargadas |
| Creditos_vigentes | Numerica | Numero de créditos vigentes en centrales |
| SaldoMora | Numerica | Saldo de las obligaciones vigentes en mora |
| Creditos_mora | Numerica | Numero de créditos en mora |
| SaldoTotal | Numerica | Saldo total adeudado a la fecha de consulta |
| CuotaMensual | Numerica | Valor del pago mensual a realizar |
| HuellasConsulta | Numerica | Numero de huellas de consulta |
| MoraSF | Numerica | Valor de la mora en el sector financiero |
| MoraSR | Numerica | Valor de la mora en el sector real |
| MoraST | Numerica | Valor de la mora en el sector telcos |
Obtenida la muestra de los 2.090 registros a continuación se realiza el cargue de la base de datos utilizada para la elaboracion del modelo predictivo.
Exploramos los datos para entender mejor las relaciones entre las variables y detectar cualquier inconsistencia o valores atípicos que puedan existir. Esta etapa incluye la visualización de datos y el cálculo de estadísticas descriptivas.
Distribucion variables cualitativas
# Estado
(t_Estado =table(df_lb$Estado))
##
## AL DIA MORA
## 1427 663
round(prop.table(t_Estado),3)*100 #el 24.9% son clientes en Default
##
## AL DIA MORA
## 68.3 31.7
Distribucion variables cuantitativas
Conocer la distribución de las variables numéricas es esencial para un análisis de datos efectivo y la construcción de modelos predictivos robustos. Nos ayuda a entender la naturaleza de los datos, detectar valores atípicos, seleccionar métodos estadísticos adecuados, visualizar datos de manera efectiva e identificar relaciones y patrones importantes. En resumen, proporciona una base sólida para tomar decisiones informadas en el análisis y modelado de datos.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## corrplot 0.92 loaded
Dividimos los datos en dos conjuntos: uno para entrenamiento (entrenar el modelo) y otro para prueba (evaluar el modelo). Una división común es 70% para entrenamiento y 30% para prueba.
¿Por qué se realiza la división de datos?
Dividir el conjunto de datos en conjuntos de entrenamiento y prueba es crucial para construir modelos predictivos robustos y fiables. Nos permite evitar el sobreajuste, evaluar el desempeño del modelo de manera justa y tener una mejor estimación del error de generalización cuando se enfrenta a nuevos datos. Esta práctica asegura que el modelo no solo aprende bien de los datos que ya tiene, sino que también se desempeña bien con datos nuevos y desconocidos.
tasa_de_malos = mean(train$Default)
tasa_de_malos
## [1] 0.317623
Explicación del Gráfico y Cálculo del Porcentaje
Los gráficos que se muestran a continuación permite conocer la tasa de clientes “malos” (o en mora) por categoria. En otras palabras, está visualizando el porcentaje de clientes que han incurrido en un “default” (morosidad) dentro de cada grupo que se analice. La barra de cada categoria indica el porcentaje de clientes morosos en comparación con el total de clientes de ese mismo grupo.
Razón de cálculo: Proporciona una visión clara de cómo varía la morosidad entre diferentes grupos, lo que puede ser útil para análisis de riesgo y toma de decisiones en la gestión de clientes.
## `summarise()` has grouped output by 'Genero'. You can override using the
## `.groups` argument.
## `summarise()` has grouped output by 'Escolaridad'. You can override using the
## `.groups` argument.
## `summarise()` has grouped output by 'Estado_civil'. You can override using the
## `.groups` argument.
## `summarise()` has grouped output by 'Zona_nacimiento'. You can override using
## the `.groups` argument.
## `summarise()` has grouped output by 'Zona_residencia'. You can override using
## the `.groups` argument.
## `summarise()` has grouped output by 'Tipo_pagaduria'. You can override using
## the `.groups` argument.
## `summarise()` has grouped output by 'Destino'. You can override using the
## `.groups` argument.
## `summarise()` has grouped output by 'Perfil'. You can override using the
## `.groups` argument.
Una de sus funciones es utilizada para validar los puntos de Corte Óptimos con el fin de dividir Variables Cuantitativas en Variables categóricas.
¿Qué es y para qué sirve?
El proceso de encontrar puntos de corte óptimos para convertir variables cuantitativas en categóricas se conoce como binarización o discretización. Este método se utiliza para simplificar los datos, hacerlos más interpretables y, en algunos casos, mejorar el rendimiento de los modelos predictivos. Aquí te explico cómo se realiza este proceso y su propósito.
Para el caso en estudio se utilizara el método de optimización de modelos, que utiliza modelos predictivos (como árboles de decisión) para determinar los puntos de corte que mejor separan las clases objetivo.
plot(ctree( as.factor(Default) ~ Plazo, train))
plot(ctree( as.factor(Default) ~ Creditos_vigentes, train))
plot(ctree( as.factor(Default) ~ SaldoTotal, train))
plot(ctree( as.factor(Default) ~ HuellasConsulta, train))
plot(ctree( as.factor(Default) ~ MoraSF, train))
plot(ctree( as.factor(Default) ~ Cuent_embagadas, train))
plot(ctree( as.factor(Default) ~ MoraSR, train))
plot(ctree( as.factor(Default) ~ Creditos_mora, train))
Identificados los puntos de corte óptimos, se realiza la creación de las difrentes categorias teniendo en cuenta los cortes que estableció el modelo de arboles de decisión para cada una de las variablas numéricas.
datatable(test, options = list(pageLength = 5, autoWidth = TRUE))
Weight of Evidence (WOE) y su Uso en Modelos de Score de Crédito
El Weight of Evidence (WOE) es una técnica estadística utilizada para transformar variables categóricas y continuas en variables más útiles y predictivas para modelos de clasificación, especialmente en el contexto de modelos de scoring de crédito. El WOE mide la fuerza de una característica para separar las clases objetivo (por ejemplo, buenos y malos pagadores) y es calculado utilizando la proporción de buenos y malos en cada grupo de la variable.
La formula para calcular el WOE para un grupo específico es:
\[ \text{WOE}_i = \ln\left(\frac{\text{Distribución de Buenos en el Grupo } i}{\text{Distribución de Malos en el Grupo } i}\right) \]
Donde:
\(\text{Distribución de Buenos en el Grupo } i = \frac{\text{Número de Buenos en el Grupo } i}{\text{Número Total de Buenos}}\)
\(\text{Distribución de Malos en el Grupo } i = \frac{\text{Número de Malos en el Grupo } i}{\text{Número Total de Malos}}\)
Interpretabilidad del WOE:
Las transformaciones WOE son intuitivas y fáciles de interpretar. Un WOE positivo indica que la proporción de buenos es mayor que la de malos en ese grupo, mientras que un WOE negativo indica lo contrario.
Además el WOE, mejora la transparencia del modelo y permite una mejor comunicación de los resultados a partes interesadas no técnicas.
A continuación se muestra la interpretabilidad del information value (IV) para mirar el nivel predictivo de cada variable.
| Information Value (IV) | Poder prediccion |
|---|---|
| < 0.02 | Poder predicitivo insignificante |
| 0.02 - 0.1 | Bajo poder predictivo |
| 0.1 - 0.3 | Medio poder predictivo |
| 0.3 - 0.5 | Fuerte poder predictivo |
| >5 | Nivel predictivo sospechoso, revisar la variable |
#WOE e IV de las categorias SCORE
print(WOE7_lb)
## malos buenos buenos_prop malos_prop WOE IV IV_total
## <=150 31 51 0.05105105 0.06666667 -0.2668789 0.004167479 0.3811987
## <=298 109 107 0.10710711 0.23440860 -0.7832364 0.099707167 0.3811987
## <=649 255 483 0.48348348 0.54838710 -0.1259643 0.008175536 0.3811987
## <=778 52 165 0.16516517 0.11182796 0.3899844 0.020800678 0.3811987
## >778 18 193 0.19319319 0.03870968 1.6076011 0.248347863 0.3811987
#WOE e IV de las categorias SALDO TOTAL
print(WOE14_lb)
## malos buenos buenos_prop malos_prop WOE IV IV_total
## <=16424 102 450 0.4504505 0.2193548 0.719557396 1.662866e-01 0.3178774
## <=41285 139 299 0.2992993 0.2989247 0.001252267 4.690594e-07 0.3178774
## >41285 224 250 0.2502503 0.4817204 -0.654902507 1.515904e-01 0.3178774
#WOE e IV de las categorias CREDITOS EN MORA
print(WOE13_lb)
## malos buenos buenos_prop malos_prop WOE IV IV_total
## <=0 83 393 0.3933934 0.1784946 0.7902516 0.16982410 0.2349939
## >0 382 606 0.6066066 0.8215054 -0.3032580 0.06516977 0.2349939
#WOE e IV de las categorias VALOR MORA SECTOR FINANCIERO
print(WOE16_lb)
## malos buenos buenos_prop malos_prop WOE IV IV_total
## <=11783 389 939 0.93993994 0.8365591 0.1165188 0.0120458 0.115541
## >11783 76 60 0.06006006 0.1634409 -1.0011062 0.1034952 0.115541
¿Para qué se utiliza? Clasificación Binaria: Se utiliza principalmente para problemas donde el resultado es binario (sí/no, verdadero/falso, 1/0). Ejemplos comunes incluyen la predicción de si un cliente incumplirá con un préstamo (default/no default), si un correo es spam (spam/no spam), o si un paciente tiene una enfermedad (enfermo/no enfermo).
¿Cómo funciona? La regresión logística modela la relación entre una o más variables independientes 𝑋 X (que pueden ser continuas o categóricas) y una variable dependiente binaria 𝑌 Y. La fórmula básica es:
\[ \text{logit}(p) = \ln\left(\frac{p}{1 - p}\right) \]
Donde: - \(p\) es la probabilidad de que el evento ocurra.
La función logit se utiliza para transformar la probabilidad \(p\) en una escala logarítmica que permite modelar una relación lineal con las variables independientes.
summary(modelo_niveles)
##
## Call:
## glm(formula = Default ~ Genero + rango_score + rango_plazo +
## Estado_civil + Tipo_pagaduria + Perfil + rango_cred_vig +
## rango_moraSR + rango_creditos_mora + rango_Saldo_total +
## rango_huellas + Zona_residencia + rango_monto + rango_moraSF,
## family = binomial(link = "logit"), data = train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.22773 0.77521 -2.874 0.004057 **
## GeneroMasculino 0.34186 0.16231 2.106 0.035179 *
## rango_score<=298 -0.15637 0.35928 -0.435 0.663388
## rango_score<=649 -0.44198 0.32357 -1.366 0.171952
## rango_score<=778 -0.77693 0.46009 -1.689 0.091289 .
## rango_score>778 -1.76468 0.50306 -3.508 0.000452 ***
## rango_plazo<=132 0.86764 0.22710 3.821 0.000133 ***
## rango_plazo<=144 0.65511 0.19166 3.418 0.000631 ***
## rango_plazo>144 -2.05052 0.35392 -5.794 6.88e-09 ***
## Estado_civilSeparado 0.29754 0.30282 0.983 0.325812
## Estado_civilSoltero -0.24215 0.19728 -1.227 0.219667
## Estado_civilUnion Libre 0.57901 0.25059 2.311 0.020853 *
## Estado_civilViudo -0.08886 0.24339 -0.365 0.715038
## Tipo_pagaduriaDEPARTAMENTALES 0.62989 0.45059 1.398 0.162133
## Tipo_pagaduriaFONDO PRIVADO -1.29735 0.18259 -7.105 1.20e-12 ***
## Tipo_pagaduriaFUERZAS MILITARES -0.82373 0.25881 -3.183 0.001459 **
## Tipo_pagaduriaNACIONALES -0.36760 0.22623 -1.625 0.104184
## PerfilTIPO B 1.40403 0.27291 5.145 2.68e-07 ***
## PerfilTIPO C -0.20848 0.18211 -1.145 0.252308
## PerfilTIPO D 0.68930 0.24994 2.758 0.005817 **
## rango_cred_vig>2 -0.13666 0.22689 -0.602 0.546960
## rango_moraSR<=57395 0.23446 0.18378 1.276 0.202049
## rango_moraSR>57395 1.00599 0.51014 1.972 0.048611 *
## rango_creditos_mora>0 0.13999 0.36146 0.387 0.698532
## rango_Saldo_total<=41285 0.55762 0.19142 2.913 0.003578 **
## rango_Saldo_total>41285 0.76268 0.21645 3.524 0.000426 ***
## rango_huellas<=4 0.55465 0.18211 3.046 0.002321 **
## rango_huellas>4 0.92136 0.17248 5.342 9.20e-08 ***
## Zona_residenciaCENTRO 0.58347 0.59295 0.984 0.325109
## Zona_residenciaCOSTA 1.04371 0.59130 1.765 0.077547 .
## Zona_residenciaEJE CAFETERO Y VALLE 0.26508 0.59759 0.444 0.657340
## Zona_residenciaESTE 0.22343 0.61307 0.364 0.715525
## Zona_residenciaOESTE 0.61521 0.61866 0.994 0.320018
## rango_monto<=22951000 1.18748 0.18611 6.381 1.76e-10 ***
## rango_monto>22951000 1.34570 0.32608 4.127 3.68e-05 ***
## rango_moraSF>11783 0.10023 0.25357 0.395 0.692635
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1830.2 on 1463 degrees of freedom
## Residual deviance: 1267.3 on 1428 degrees of freedom
## AIC: 1339.3
##
## Number of Fisher Scoring iterations: 5
Análisis del Modelo de Regresión Logística
Resumen del Modelo Este modelo de regresión logística predice la probabilidad de default (incumplimiento de pago) basado en diversas características del cliente. Las variables predictoras incluyen género, edad, rango de score, plazo, estado civil, tipo de pagaduría, perfil, número de créditos vigentes, mora, saldo total, número de huellas de consulta, zona de residencia.
Coeficientes del Modelo
Genero Coeficiente: 0.372657 Significativo a nivel 5% (*). Los hombres tienen una mayor probabilidad de default en comparación con las mujeres.
Edad Coeficiente: -0.018763 Muy significativo (p < 0.01) (**). A medida que aumenta la edad, la probabilidad de default disminuye. rango_score:
Los diferentes rangos de score tienen diversos efectos sobre la probabilidad de default. Los coeficientes negativos indican que a mayor score, menor es la probabilidad de default, con rangos altos (rango_score>778) siendo muy significativos (p < 0.01) (**). rango_plazo:
Plazos más cortos (<=132 y <=144) están asociados con una mayor probabilidad de default, siendo altamente significativos (p < 0.001) (***). Estado_civil:
Las categorías de estado civil tienen diferentes efectos, con “Union Libre” siendo significativa al nivel 5% (*), sugiriendo una mayor probabilidad de default en comparación con los casados. Tipo_pagaduria:
Diferentes tipos de pagaduría tienen efectos variados. Por ejemplo, “FONDO PRIVADO” tiene un coeficiente negativo muy significativo, indicando una menor probabilidad de default.
Perfil:
Los perfiles tienen efectos significativos. “TIPO B” y “TIPO D” muestran una mayor probabilidad de default, con coeficientes muy significativos (p < 0.001) (***).
rango_Saldo_total:
Los saldos totales menores y mayores tienen coeficientes positivos y significativos, indicando una mayor probabilidad de default.
rango_huellas:
Un mayor número de huellas está asociado con una mayor probabilidad de default, siendo muy significativo (p < 0.001) (***). Zona_residencia:
Algunas zonas, como la COSTA, muestran una tendencia a una mayor probabilidad de default, con significancia marginal (p < 0.1) (.).
## Type 'citation("pROC")' for a citation.
##
## Adjuntando el paquete: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
¿Qué es la Curva de ROC?
La curva de ROC (Receiver Operating Characteristic) es una representación gráfica utilizada para evaluar la capacidad de un modelo de clasificación binaria para distinguir entre las dos clases. Esta curva traza la tasa de verdaderos positivos (True Positive Rate, TPR) contra la tasa de falsos positivos (False Positive Rate, FPR) a diferentes umbrales de decisión.
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Area under the curve: 0.8072
## [1] 0.4890966
Sensibilidad y Especificidad
Sensibilidad (Sensitivity) Definición:
La sensibilidad, también conocida como recall o verdaderos positivos (TPR), es la proporción de verdaderos positivos que son correctamente identificados por el modelo. Es una medida de la capacidad del modelo para detectar correctamente los casos positivos (eventos de interés).
Especificidad (Specificity)
Definición: La especificidad, también conocida como verdaderos negativos (TNR), es la proporción de verdaderos negativos que son correctamente identificados por el modelo. Es una medida de la capacidad del modelo para identificar correctamente los casos negativos (no eventos de interés).
# Punto de Corte (sens = Espe)
data_roc %>%
mutate(diff_risk = abs(sensibilidad - especificidad) ) %>%
filter(!(is.infinite(punto_corte))) %>%
arrange(diff_risk) %>%
head(1)
## sensibilidad especificidad punto_corte diff_risk
## 1 0.7424242 0.7429907 0.2824237 0.0005664118
Matriz de Confusión
¿Qué es? Una matriz de confusión es una herramienta utilizada para evaluar el desempeño de un modelo de clasificación. Presenta una tabla que permite visualizar y comparar las predicciones del modelo frente a los valores reales de las etiquetas. Esta matriz ayuda a identificar los tipos de errores que comete el modelo.
##
## 0 1
## 428 198
## Confusion Matrix and Statistics
##
## Reference
## Prediction 1 0
## 1 147 110
## 0 51 318
##
## Accuracy : 0.7428
## 95% CI : (0.7067, 0.7766)
## No Information Rate : 0.6837
## P-Value [Acc > NIR] : 0.0007115
##
## Kappa : 0.4494
##
## Mcnemar's Test P-Value : 4.853e-06
##
## Sensitivity : 0.7424
## Specificity : 0.7430
## Pos Pred Value : 0.5720
## Neg Pred Value : 0.8618
## Prevalence : 0.3163
## Detection Rate : 0.2348
## Detection Prevalence : 0.4105
## Balanced Accuracy : 0.7427
##
## 'Positive' Class : 1
##
## Conc Estado Originador Genero Escolaridad Estado_civil Vivienda
## 1 89039186819 AL DIA LAGOBO Masculino Bachillerato Soltero Familiar
## 2 42548396214 MORA LAGOBO Masculino Otras Viudo Familiar
## 3 87902462908 AL DIA LAGOBO Masculino Bachillerato Casado Familiar
## 4 69532474632 AL DIA SOCOMIR Masculino Bachillerato Casado Propia
## 5 88645914099 AL DIA LAGOBO Masculino Universitaria Casado Propia
## 6 318801098299 MORA LAGOBO Masculino Bachillerato Union Libre Familiar
## Ciudad_nacimiento Dept_nacimiento Zona_nacimiento Ciudad_residencia
## 1 ANOLAIMA CUNDINAMARCA CENTRO BOGOTA, D.C.
## 2 BOGOTA, D.C. BOGOTA CENTRO VILLAVICENCIO
## 3 CHAPARRAL TOLIMA CENTRO VIOTA
## 4 CUMARAL META CENTRO VILLAVICENCIO
## 5 SAN JUAN DE BETULIA SUCRE COSTA SINCELEJO
## 6 TIBASOSA BOYACA CENTRO DUITAMA
## Depto_residencia Zona_residencia Edad
## 1 BOGOTA CENTRO 69
## 2 META CENTRO 67
## 3 CUNDINAMARCA CENTRO 76
## 4 META CENTRO 67
## 5 SUCRE COSTA 71
## 6 BOYACA CENTRO 63
## Pagaduria Tipo_pagaduria
## 1 CONSORCIO FOPEP NACIONALES
## 2 COLPENSIONES - ADMINISTRADORA COLOMBIANA DE PENSIONES COLPENSIONES
## 3 CAJA DE RETIRO FUERZAS MILITARES CREMIL FUERZAS MILITARES
## 4 CASUR FUERZAS MILITARES
## 5 COLPENSIONES - ADMINISTRADORA COLOMBIANA DE PENSIONES COLPENSIONES
## 6 COLPENSIONES - ADMINISTRADORA COLOMBIANA DE PENSIONES COLPENSIONES
## Canal Destino Agencia Perfil Monto Plazo Score
## 1 INTERNO RETANQUEO BOGOTÁ CENTRO TIPO B 13279400 156 596
## 2 EXTERNO RETANQUEO VILLAVICENCIO TIPO A 12000000 144 420
## 3 EXTERNO LIBRE INVERSION BOGOTÁ CENTRO TIPO D 5448000 144 386
## 4 INTERNO LIBRE INVERSION VILLAVICENCIO TIPO A 5073200 120 877
## 5 EXTERNO LIBRE INVERSION SINCELEJO TIPO A 2300000 36 790
## 6 EXTERNO LIBRE INVERSION TUNJA TIPO A 7000000 144 584
## Cuentas_ahorro Cuent_embagadas Creditos_vigentes Creditos_mora SaldoTotal
## 1 9 0 18 2 223908
## 2 5 0 4 1 4746
## 3 3 0 7 3 154416
## 4 2 0 3 0 52258
## 5 6 0 6 0 13255
## 6 8 0 7 0 51825
## HuellasConsulta MoraSF MoraSR MoraST Default rango_score rango_monto
## 1 6 1923 0 0 0 <=649 <=22951000
## 2 5 0 2684 0 1 <=649 <=12789800
## 3 2 76958 5339 110 0 <=649 <=12789800
## 4 0 0 0 0 0 >778 <=12789800
## 5 6 0 0 0 0 >778 <=12789800
## 6 11 0 0 0 1 <=649 <=12789800
## rango_plazo rango_cuentas_ahorro rango_cuentas_emb rango_cred_vig
## 1 >144 >8 <=0 >2
## 2 <=144 <=8 <=0 >2
## 3 <=144 <=8 <=0 >2
## 4 <=132 <=8 <=0 >2
## 5 <=108 <=8 <=0 >2
## 6 <=144 <=8 <=0 >2
## rango_creditos_mora rango_Saldo_total rango_huellas rango_moraSF rango_moraSR
## 1 >0 >41285 >4 <=11783 <=74
## 2 >0 <=16424 >4 <=11783 <=57395
## 3 >0 >41285 <=2 >11783 <=57395
## 4 <=0 >41285 <=2 <=11783 <=74
## 5 <=0 <=16424 >4 <=11783 <=74
## 6 <=0 >41285 >4 <=11783 <=74
## rango_moraST puntajes
## 1 <=170 524.6972
## 2 <=170 497.6177
## 3 <=170 523.9966
## 4 <=170 916.0660
## 5 <=170 859.3873
## 6 <=170 250.6908
## Dataframe guardado en el archivo mi_dataframe.xlsx
df_lb$estado_cliente <- factor(df_lb$Default, levels = c(0, 1), labels = c("al día", "en mora"))
# Crear el gráfico de histograma con una capa de densidad coloreado por el estado del cliente
ggplot(df_lb, aes(x = puntajes, fill = estado_cliente)) +
geom_histogram(aes(y = ..density..), alpha = 0.5, position = "identity", bins = 30) +
geom_density(aes(color = estado_cliente), alpha = 0.7, size = 1) +
scale_fill_manual(values = c("al día" = "blue", "en mora" = "red")) +
scale_color_manual(values = c("al día" = "blue", "en mora" = "red")) +
labs(
title = "Distribución de Puntajes por Estado de Clientes",
x = "Puntaje",
y = "Densidad",
fill = "Estado del Cliente",
color = "Estado del Cliente"
) +
theme_minimal()