Demo_churn / scripts /extraer_roc.py
Larxmind's picture
Despliegue inicial limpio sin binarios
1ec1a50
Raw
History Blame Contribute Delete
1.67 kB
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}")