Para calcular y graficar la curva AUC-ROC en Python, generalmente se utiliza la biblioteca scikit-learn, que proporciona herramientas para trabajar con aprendizaje automático y evaluación de modelos. Aquí tienes un ejemplo de cómo calcular y graficar la curva AUC-ROC para un clasificador en Python:
import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, auc # Datos de ejemplo para la curva ROC y_true = np.array([0, 1, 0, 1, 1, 0, 1]) y_scores = np.array([0.1, 0.9, 0.3, 0.7, 0.8, 0.2, 0.6]) # Calcular la curva ROC fpr, tpr, thresholds = roc_curve(y_true, y_scores) roc_auc = auc(fpr, tpr) # Graficar la curva ROC plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='Curva ROC (área = %0.2f)' % roc_auc) 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') plt.ylabel('Tasa de Verdaderos Positivos') plt.title('Curva ROC') plt.legend(loc="lower right") plt.show()
En este ejemplo, estamos utilizando datos sintéticos generados con make_classification, pero puedes reemplazarlos con tus propios datos. También utilizamos una Regresión Logística como clasificador, pero puedes usar otros clasificadores según tus necesidades.

La curva AUC-ROC representa la tasa de verdaderos positivos (True Positive Rate, TPR) frente a la tasa de falsos positivos (False Positive Rate, FPR) para diferentes umbrales de clasificación.
La línea punteada en la gráfica representa el rendimiento esperado al azar (un clasificador inútil), y el área bajo la curva (AUC) mide el rendimiento del clasificador. Un valor de AUC cercano a 1 indica un buen clasificador, mientras que un valor cercano a 0.5 indica un clasificador que es comparable a la clasificación aleatoria.
Ejemplo Curva AUC – ROC en Python
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import roc_curve, auc # Cargar el dataset de Iris data = load_iris() X = data.data y = data.target y_binary = np.where(y == 2, 1, 0) # Dividir el dataset en conjuntos de entrenamiento y prueba X_train, X_test, y_train, y_test = train_test_split(X, y_binary, test_size=0.3, random_state=42) # Entrenar el clasificador SVM classifier = SVC(probability=True, random_state=42) classifier.fit(X_train, y_train) y_scores = classifier.predict_proba(X_test)[:, 1] # Calcular la curva ROC fpr, tpr, thresholds = roc_curve(y_test, y_scores) roc_auc = auc(fpr, tpr) # Graficar la curva ROC plt.figure() plt.plot(fpr, tpr, color='blue', lw=2, label='Curva ROC (área = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='gray', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('Tasa de Falsos Positivos') plt.ylabel('Tasa de Verdaderos Positivos') plt.title('Curva ROC (Clasificador SVM)') plt.legend(loc="lower right") plt.show()
Este ejemplo muestra cómo cargar el conjunto de datos Iris, entrenar un clasificador SVM, calcular la curva ROC y representarla gráficamente.
Probabilidades
Consideremos dos conjuntos de probabilidades generadas por modelos hipotéticos. En el primer conjunto, las probabilidades no son tan ‘seguras’ al predecir las dos clases; estas probabilidades tienden a estar cerca de 0.5, lo que indica una mayor incertidumbre en las predicciones. En el segundo conjunto, las probabilidades son más ‘seguras’ al predecir las dos clases, ya que tienden a estar cerca de los extremos 0 o 1. Esto sugiere que el segundo modelo tiene más confianza en sus predicciones.
Al evaluar estos modelos, podemos calcular la precisión y el AUC para cada uno. El AUC proporciona una medida cuantitativa de la capacidad de discriminación del modelo, teniendo en cuenta la capacidad del modelo para distinguir entre las clases. Luego, podemos visualizar las curvas ROC de ambos modelos para una comparación visual de su rendimiento en la tarea de clasificación.»
Este texto se adapta al contexto de tu ejemplo y explica cómo el AUC se relaciona con la confianza en los modelos de clasificación, utilizando conjuntos de probabilidades hipotéticos como referencia.
import numpy as np from sklearn.metrics import accuracy_score, roc_auc_score, roc_curve import matplotlib.pyplot as plt # Generar datos hipotéticos n = 10000 y = np.array([0] * n + [1] * n) # Datos de probabilidad del modelo 1 y_prob_1 = np.array( np.random.uniform(0.1, 0.4, n//2).tolist() + np.random.uniform(0.3, 0.6, n).tolist() + np.random.uniform(0.5, 0.9, n//2).tolist() ) # Datos de probabilidad del modelo 2 y_prob_2 = np.array( np.random.uniform(0.2, 0.5, n//2).tolist() + np.random.uniform(0.4, 0.7, n).tolist() + np.random.uniform(0.6, 0.95, n//2).tolist() ) # Calcular la precisión y el AUC para ambos modelos accuracy_1 = accuracy_score(y, y_prob_1 > 0.5) accuracy_2 = accuracy_score(y, y_prob_2 > 0.5) auc_1 = roc_auc_score(y, y_prob_1) auc_2 = roc_auc_score(y, y_prob_2) print("Precisión del modelo 1:", accuracy_1) print("Precisión del modelo 2:", accuracy_2) print("AUC del modelo 1:", auc_1) print("AUC del modelo 2:", auc_2) # Graficar la curva ROC del modelo 1 fpr_1, tpr_1, _ = roc_curve(y, y_prob_1) plt.plot(fpr_1, tpr_1, 'Modelo 1') # Graficar la curva ROC del modelo 2 fpr_2, tpr_2, _ = roc_curve(y, y_prob_2) plt.plot(fpr_2, tpr_2, 'Modelo 2') # Configurar la gráfica plt.xlabel('Tasa de Falsos Positivos') plt.ylabel('Tasa de Verdaderos Positivos') plt.title('Curva ROC') plt.legend(['Modelo 1', 'Modelo 2']) # Mostrar la gráfica plt.show()
Resultado:
