Published using Google Docs
Credit Scoring Predict
Updated automatically every 5 minutes

PROYECTO DE CIENCIA DE DATOS

CLASIFICACIÓN BINARIA

predicción de aceptación crediticia

Por: Julio A. Lazarte - Tucumán, Arg. - Dic/2023

Análisis de datos de un conjunto de datos crediticios alemanes, a partir de una DDBB cuya fuente es:

Profesor Dr. Hans Hofmann

Instituto de Estadística y Econometría

Universidad de Hamburgo

Departamento de Economía

Parque Von Melle 5, 2000 Hamburgo 13

El objetivo del proyecto es determinar mediante clasificación binaria el DEFAULT, es decir si es confiable o no para otorgar un crédito, utilizando los modelos:

from sklearn.linear_model import LogisticRegression

from sklearn.tree import DecisionTreeClassifier

from sklearn.ensemble import RandomForestClassifier

from sklearn.naive_bayes import GaussianNB

from sklearn.svm import SVC

Tareas que se realizaron

1. Preprocesamiento de Datos: limpieza de datos, manejar valores faltantes, codificación de variables categóricas y normalización/escalado de datos.

2. Exploración de Datos: Analizar y comprender el conjunto de datos proporcionado, identificar variables claves y realizar visualizaciones para entender las relaciones entre las variables y seleccionar las características relevantes.

3. Construcción de Modelos: Experimentar con algunos algoritmos de machine learning como Regresión Logística, Árboles de Decisión, Random Forest, Naive Bayes, entre otros.

4. Evaluación y Selección del Modelo: Evaluar los modelos utilizando métricas como precisión, recall, área bajo la curva ROC, y F1-score. Seleccionar el modelo con el mejor rendimiento para la predicción de la solvencia crediticia.

Exploración de Datos

 

Se observa que la distribución de  buenos y malos clientes tiene una proporción prácticamente de ¼ respecto de los DEFAULT

Observamos que los clientes corresponden alrededor del 70% a varones. Además que entre los varones, tiene default un 30% aprox, y entre las mujeres, tiene default 50% aprox.

En esta gráfica se observa que alrededor de 55% son solteros. Destacar que la proporción de default entre casados es del 33%y entre los solteros es del 27%.

Observamos que al crecer el rango etario disminuye la cantidad de clientes. Además que en el rango de 18 a 30 años los default representan el 36%, en los otros rangos el resto de rangos se ubica por debajo del 30%. Cabe destacar que entre los 18 a 40 años representan el 72,6%.

Observamos los plazos de crédito, en donde los de 12 y 12 a 24 meses representan el 77% de los créditos, y tiene un default del 25 %. Destacar que entre los pazos de 12 a 24, representadas por las dos primeras columnas, representan el 77%.

Es interesante observar que los créditos para aparatos domésticos son los más solicitados y representan un 28% del total y los default corresponden a un 22%. Luego siguen los créditos a coches que representan el 23% del total y con un default de 38%.

Análisis de correlaciones:

La gráfica muestra el % de correlatividad entre las variables respecto de default. La escala de % está en escala logarítmica. Como regla general se consideran apropiadas las variables que presentan una correlatividad en valores absolutos tal que sean mayor al 7% y menor al 50%.

Gráfica de correlaciones

Construcción de Modelos

    # Métricas y Modelos:

    metrics = ['Accuracy','Precision','Recall','F1_score','ROC AUC']

    models = ['Logistic Regression', 'Decision Tree', 'Random Forest',

'Naive Bayes','SVC']

    # Definir las variables predictoras (X) y la variable objetivo (y)

    X_new = df_bank.drop('Incumplimiento', axis=1)

    y_new = df_bank['Incumplimiento']

    X_train, X_test, y_train, y_test =

    train_test_split(X_new, y_new, test_size=0.2, random_state=random_state)

    # Inicializa los modelos con los mejores hiperparametros:

    logistic_model = LogisticRegression(random_state=42,C= 10, penalty='l2')

    tree_model = DecisionTreeClassifier(random_state=42,max_depth= 10)

    forest_model = RandomForestClassifier(random_state=42,max_features='sqrt',

    n_estimators=250)

    nb_model = GaussianNB()

    svc_model = SVC(kernel='linear', C=3.0, random_state=42)

    # Entrenamiento de los modelos

    logistic_model.fit(X_train, y_train)

    tree_model.fit(X_train, y_train)

    forest_model.fit(X_train, y_train)

    nb_model.fit(X_train, y_train)

    svc_model.fit(X_train, y_train)

    # Predicciones

    y_logistic_pred = logistic_model.predict(X_test)

    y_tree_pred = tree_model.predict(X_test)

    y_forest_pred = forest_model.predict(X_test)

    y_nb_pred = nb_model.predict(X_test)

    y_svc_pred = svc_model.predict(X_test)

Elección de las variables significativas con

DecisionTreeRegressor y graficación:

Tablas comparativas de los modelos vs métricas según las variables consideradas:

Para todas las variables:

Para las variables según la importancia de variables con modelo DecisionTreeClassifier

 con profundidad=5:

profundidad=10

profundidad=15

Conclusión del análisis anterior de la importancia de las variables en relación a default utilizando el modelo de árbol de decisiones con distintas profundidades:

Las variables identificadas por el método del árbol de decisión con diferentes profundidades (5, 10, 15) no mejoran las métricas. Esto se debe a que al considerar todas las variables del conjunto de datos original, se obtiene un resultado mejor.

Evaluación y Selección del Modelo

Evaluación de matrices de confusión de los modelos anteriores:

Para analizar las matrices de confusión y determinar el mejor método para predecir el default en préstamos de crédito, se pueden observar las métricas clave como la precisión, la sensibilidad y la especificidad. Aquí hay un análisis basado en estas métricas:

  1. Logistic Regression:
  1. Decision Tree:
  1. Random Forest:
  1. Naive Bayes:
  1. SVC:

Conclusiones:

En general, la elección del "mejor" método dependerá de la importancia relativa de la precisión, la sensibilidad y la especificidad en el contexto específico del problema. Si la prioridad es minimizar los falsos positivos (predecir incorrectamente que un cliente no incumplirá), entonces Random Forest podría ser preferido. Si es más crítico minimizar los falsos negativos (predecir incorrectamente que un cliente incumplirá), entonces Naive Bayes podría ser una opción.

En el contexto de la evaluación de modelos de crédito, generalmente se desea minimizar los falsos positivos, ya que predecir incorrectamente que un solicitante será un incumplidor cuando en realidad no lo es puede llevar a decisiones injustas y a la pérdida de oportunidades de préstamo. Por lo tanto, se considera importante maximizar la precisión y reducir los falsos positivos.

Se analizaron los modelos anteriores considerando las métricas como se observan en la tabla y  en las siguientes gráficas:

Para analizar cuál de los modelos de predicción es mejor para determinar el incumplimiento (default) en préstamos de crédito, podemos considerar varias métricas clave que se proporcionan en las tablas. Aquí hay una interpretación general basada en las métricas comunes:

  1. Accuracy (Exactitud):
  1. Precisión (Precisión):
  1. Recall (Recuperación o Sensibilidad):
  1. F1 Score:
  1. ROC AUC:

Random Forest tiene el ROC AUC de (0.72), seguido por Logistic Regression (0.74). Esto significa que, según esta métrica, Logistic Regression tiene un rendimiento superior a Random Forest en términos de distinguir entre las clases. Sin embargo, es importante tener en cuenta que la elección del modelo óptimo no debe basarse únicamente en una métrica.

ROC-AUC proporciona una medida de la capacidad de un modelo para discriminar entre clases, especialmente en configuraciones de clasificación binaria. Un valor más alto indica un mejor rendimiento en términos de equilibrio entre la tasa de verdaderos positivos y la tasa de falsos positivos.

En general, la elección del "mejor" modelo: Si se prioriza la precisión general, el modelo de Random Forest parece ser el mejor. Sin embargo, si se valora más el recall (identificar correctamente aquellos que realmente incumplen), entonces Logistic Regression podría ser preferible.

Es importante considerar el contexto del problema y la importancia relativa de los falsos positivos y falsos negativos, ya que diferentes modelos pueden tener desempeños óptimos en diferentes situaciones.

Primeras conclusiones:

Basándonos en la información proporcionada y las métricas evaluadas para diferentes modelos (Logistic Regression, Decision Tree, Random Forest y Naive Bayes), podemos hacer las siguientes conclusiones:

En términos generales, el modelo de Regresión Logística y Random Forest son los más destacados en esta evaluación. La elección entre ellos dependerá de los objetivos específicos del negocio. Si se valora más la capacidad de distinguir entre clases, Random Forest puede ser la elección preferida. Sin embargo, es fundamental considerar el contexto y las preferencias comerciales al seleccionar el modelo más adecuado para el credit scoring.

Para mejorar el proyecto: próximamente consideraré la posibilidad de ajustar los umbrales de decisión para obtener un equilibrio óptimo entre precisión y recall, según las necesidades específicas del negocio. Además de probar con otros métodos de predicción y separación de variables en otras columnas.

Ingeniería de Características:

He creado nuevas características que puedan ser más informativas o que combinen las características existentes de manera efectiva.

Los resultados son los siguientes:

Presentación gráfica

Evaluación de un nuevo cliente

Mediante la ejecución de un script, mediante un input se ingresan los valores correspondientes a las variables características del modelo elegido: Random Forest, el cuál realiza la predicción de DEFAULT y su correspondiente probabilidad %, luego mediante gráfica pie de matplotlib se logra lo siguiente:

Gráfica tipo pie de matplotlib indicando DEFAULT  y su aceptación %.

Conclusión final

Considerando todas las métricas, el modelo Random Forest tiene el mejor rendimiento general, con la mayor accuracy (82%) y precision (85%) y AUC-ROC (73%), y un equilibrio razonable entre precision y recall. Por lo tanto, se recomendaría utilizar el modelo de Random Forest para predecir la variable 'default'.

  1. Random Forest:
  1. Como podemos apreciar, este modelo mejoró en su precisión y en su especificidad, manteniendo el valor anterior de recall

Por lo tanto, si nuestro objetivo de empresa es captar la mayor cantidad de nuevos clientes, el Modelo Random Forest resulta el mejor

Con gusto espero tus sugerencias y correcciones.

Muchas gracias.

Julio A. Lazarte

Data Scientist