Análisis dataset riesgo de crédito#

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
credit_risk_data = pd.read_csv("../credit_risk_data.csv")
credit_risk_data.head()
ID Edad Ingresos Monto del Préstamo Plazo del Préstamo Historial de Crédito Cantidad de Créditos Vigentes Cantidad de Moras Estado del Préstamo
0 1 56 8382 45814 25 492 4 3 1
1 2 69 3406 46379 47 700 7 3 1
2 3 46 4586 14076 19 577 5 2 1
3 4 32 15003 38650 46 653 4 1 0
4 5 60 9652 47881 30 555 8 0 1

Mostrar información básica y las primeras filas del dataframe:

print(credit_risk_data.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 9 columns):
 #   Column                         Non-Null Count  Dtype
---  ------                         --------------  -----
 0   ID                             1000 non-null   int64
 1   Edad                           1000 non-null   int64
 2   Ingresos                       1000 non-null   int64
 3   Monto del Préstamo             1000 non-null   int64
 4   Plazo del Préstamo             1000 non-null   int64
 5   Historial de Crédito           1000 non-null   int64
 6   Cantidad de Créditos Vigentes  1000 non-null   int64
 7   Cantidad de Moras              1000 non-null   int64
 8   Estado del Préstamo            1000 non-null   int64
dtypes: int64(9)
memory usage: 70.4 KB
None

Distribución del ´Estado del Préstamo´:

credit_risk_data["Estado del Préstamo"].value_counts()
1    778
0    222
Name: Estado del Préstamo, dtype: int64
# Remover columna 'ID'
credit_risk_data = credit_risk_data.drop(columns=["ID"])

credit_risk_data.head()
Edad Ingresos Monto del Préstamo Plazo del Préstamo Historial de Crédito Cantidad de Créditos Vigentes Cantidad de Moras Estado del Préstamo
0 56 8382 45814 25 492 4 3 1
1 69 3406 46379 47 700 7 3 1
2 46 4586 14076 19 577 5 2 1
3 32 15003 38650 46 653 4 1 0
4 60 9652 47881 30 555 8 0 1

Calcular estadísticas descriptivas:

credit_risk_data.describe()
Edad Ingresos Monto del Préstamo Plazo del Préstamo Historial de Crédito Cantidad de Créditos Vigentes Cantidad de Moras Estado del Préstamo
count 1000.00000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000
mean 43.81900 10697.264000 25332.751000 36.150000 576.485000 4.622000 1.971000 0.778000
std 14.99103 5393.517268 13868.799451 13.752477 155.959954 2.827209 1.427654 0.415799
min 18.00000 1509.000000 1097.000000 12.000000 300.000000 0.000000 0.000000 0.000000
25% 31.00000 5965.250000 12909.250000 24.000000 440.000000 2.000000 1.000000 1.000000
50% 44.00000 10610.500000 25791.000000 36.500000 575.000000 5.000000 2.000000 1.000000
75% 56.00000 15288.500000 36621.750000 48.000000 712.250000 7.000000 3.000000 1.000000
max 69.00000 19958.000000 49998.000000 59.000000 849.000000 9.000000 4.000000 1.000000

Histogramas:

credit_risk_data.hist(bins=20, figsize=(15, 10), layout=(3, 3), color="skyblue")
plt.tight_layout()
plt.show()
../../../_images/output_11_01.png

Coeficientes de correlación:

correlation_matrix = credit_risk_data.corr()

plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", linewidths=0.5)
plt.title("Matriz de Correlación de las Variables")
plt.show()
../../../_images/output_13_0.png

Box plot:

plt.figure(figsize=(15, 10))

for i, column in enumerate(credit_risk_data.columns, 1):
    plt.subplot(3, 3, i)
    sns.boxplot(data=credit_risk_data[column], color="skyblue")
    plt.title(f"Box Plot de {column}")

plt.tight_layout()
plt.show()
../../../_images/output_15_0.png

Pair plot:

sns.pairplot(credit_risk_data, palette="tab10")
plt.show()
../../../_images/output_17_0.png