import pandas as pd import joblib import os import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.metrics import roc_auc_score, roc_curve print("Calculando el ROC-AUC del campeón...") # 1. Cargar los datos y reproducir la partición exacta (random_state=42 garantiza el mismo grupo de examen) ruta_datos = 'datos_procesados/dataset_preparado_ml.csv' df_ml = pd.read_csv(ruta_datos) X = df_ml.drop(columns=['churn'], errors='ignore') y = df_ml['churn'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42, stratify=y) # 2. Cargar el modelo final optimizado ruta_modelo = 'modelos/modelo_rf_optimizado.pkl' modelo = joblib.load(ruta_modelo) # 3. Predecir las PROBABILIDADES (necesario para el cálculo ROC) y_prob = modelo.predict_proba(X_test)[:, 1] # 4. Calcular el número exacto del ROC-AUC roc_auc = roc_auc_score(y_test, y_prob) print(f"\n🌟 VALOR ROC-AUC PARA HUGGING FACE: {roc_auc:.4f}") # 5. Generar y guardar la imagen de la curva ROC fpr, tpr, _ = roc_curve(y_test, y_prob) plt.figure(figsize=(6, 5)) plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'Curva ROC (AUC = {roc_auc:.4f})') plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('Tasa de Falsos Positivos (FPR)') plt.ylabel('Tasa de Verdaderos Positivos (TPR)') plt.title('Curva ROC - Modelo Campeón Optimizado') plt.legend(loc="lower right") os.makedirs('outputs/charts', exist_ok=True) ruta_grafica = 'outputs/charts/curva_roc_final.png' plt.savefig(ruta_grafica, dpi=300) print(f"📊 Imagen de la Curva ROC guardada en: {ruta_grafica}")