Carga y prepara los datos (exactamente como en la clase anterior).
Entrena un modelo RandomForestClassifier.
Evalúa su rendimiento con la exactitud y la matriz de confusión.
Presenta una comparación final con el modelo de Árbol de Decisión.
Python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
--- 1. Carga y Preparación de Datos (Pasos ya conocidos) ---
datos = pd.read_csv('prestacar.csv')
X = datos.drop(columns='moroso', axis=1)
y = datos['moroso']
Mantenemos la misma división de datos para una comparación justa
X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.15, random_state=5, stratify=y)
X_train, X_val, y_train, y_val = train_test_split(X_train_val, y_train_val, random_state=5, stratify=y_train_val)
--- 2. Entrenar el Modelo RandomForestClassifier ---
Usamos parámetros para controlar el sobreajuste, como n_estimators y max_depth
n_estimators: número de árboles en el bosque.
rf_modelo = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
rf_modelo.fit(X_train, y_train)
--- 3. Evaluar el Modelo Random Forest ---
y_pred_rf = rf_modelo.predict(X_val)
a. Calcular la exactitud
accuracy_rf = accuracy_score(y_val, y_pred_rf)
b. Generar la matriz de confusión
matriz_rf = confusion_matrix(y_val, y_pred_rf)
visualizacion_rf = ConfusionMatrixDisplay(confusion_matrix=matriz_rf, display_labels=['Cumplido', 'Deudor'])
print("--- Evaluación del Modelo Random Forest ---")
print(f"Exactitud en Validación: {accuracy_rf:.2%}")
print("\nMatriz de Confusión (Random Forest):")
visualizacion_rf.plot()
plt.title('Matriz de Confusión - Random Forest')
plt.show()
--- 4. Recalcular el Modelo de Árbol de Decisión para Comparar ---
dt_modelo = DecisionTreeClassifier(max_depth=10, random_state=42)
dt_modelo.fit(X_train, y_train)
y_pred_dt = dt_modelo.predict(X_val)
accuracy_dt = accuracy_score(y_val, y_pred_dt)
matriz_dt = confusion_matrix(y_val, y_pred_dt)
Comparación de Resultados: Árbol de Decisión vs. Random Forest
Aquí comparamos directamente el rendimiento de ambos modelos sobre el mismo conjunto de validación.
Exactitud (Accuracy)
Árbol de Decisión: 90.30%
Random Forest: 91.56%
El Random Forest muestra una ligera mejora en la exactitud general.
Matriz de Confusión
Árbol de Decisión (max_depth=10)
Verdaderos Positivos (Deudores detectados): 45
Falsos Negativos (Deudores no detectados): 957
Random Forest (n_estimators=100, max_depth=10)
Verdaderos Positivos (Deudores detectados): 38
Falsos Negativos (Deudores no detectados): 964
Conclusión del Desafío
Exactitud General: El Random Forest es ligeramente superior en términos de exactitud general, lo que significa que comete menos errores en total.
Detección de Deudores: En este caso particular, el Árbol de Decisión logró identificar correctamente a un poco más de deudores (45 vs. 38). Sin embargo, ambos modelos son muy malos en esta tarea crucial, dejando pasar a más de 950 deudores como si fueran buenos clientes (Falsos Negativos).
Este desafío demuestra que, aunque un modelo puede tener una alta exactitud, puede fallar en el objetivo de negocio más importante. El siguiente paso en un proyecto real sería utilizar técnicas para mejorar la detección de la clase minoritaria (los deudores), como el ajuste de hiperparámetros, el balanceo de clases o el uso de métricas más apropiadas como el Recall.