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()
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()
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()
Pair plot:
sns.pairplot(credit_risk_data, palette="tab10")
plt.show()