Spaces:
Sleeping
Sleeping
| 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}") |