Curva AUC – ROC en Python
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:
Ejemplo
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
Ejemplo
import numpy as np
from sklearn.metrics import roc_curve, auc
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])
fpr, tpr, _ = roc_curve(y_true, y_scores)
print(auc(fpr, tpr))
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.
Ejemplo
plt.show()
Resultado:
Practica Curva AUC - ROC en Python en el editor
Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.
Ejercicio: Curva ROC y AUC
Calcula roc_curve y el área bajo la curva (AUC).
Ejemplo
import numpy as np
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
y_true = np.array([0, 1, 0, 1, 1, 0, 1])
y_scores = np.array([0.1, 0.9, 0.2, 0.8, 0.7, 0.3, 0.95])
fpr, tpr, _ = roc_curve(y_true, y_scores)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, label=f'AUC = {roc_auc:.2f}')
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.legend()
plt.show()
Ejercicio: Curva ROC y AUC (2)
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.
Ejemplo
import numpy as np
from sklearn.metrics import roc_curve, auc
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])
fpr, tpr, _ = roc_curve(y_true, y_scores)
print(auc(fpr, tpr))
Ejercicio: Añadir con append()
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étic.
Ejemplo
frutas = ["pera", "mango", "fresa"]
print(frutas)
frutas.append("fresa")
print(frutas)