El área bajo la curva ROC se denomina AUC (Area Under the Curve) y se utiliza como índice de evaluación de los modelos de clasificación; el mejor es cuando el AUC es 1, y 0,5 para los modelos aleatorios y totalmente inválidos.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve
def plot_roc_curve(test_y, pred_y):
"""Trazar la curva ROC a partir de las respuestas correctas y las predicciones
Args:
test_y (ndarray of shape (n_samples,)): y
pred_y (ndarray of shape (n_samples,)): Valor previsto para y
"""
# Tasa de falsos positivos, tasa de verdaderos positivos
fprs, tprs, thresholds = roc_curve(test_y, pred_y)
# gráfico ROC-AUC
plt.figure(figsize=(8, 8))
plt.plot([0, 1], [0, 1], linestyle="-", c="k", alpha=0.2, label="ROC-AUC=0.5")
plt.plot(fprs, tprs, color="orange", label="ROC Curve")
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
# Rellene el área correspondiente a la puntuación ROC-AUC
y_zeros = [0 for _ in tprs]
plt.fill_between(fprs, y_zeros, tprs, color="orange", alpha=0.3, label="ROC-AUC")
plt.legend()
plt.show()
X, y = make_classification(
n_samples=1000,
n_classes=2,
n_informative=4,
n_clusters_per_class=3,
random_state=RND,
)
train_X, test_X, train_y, test_y = train_test_split(
X, y, test_size=0.33, random_state=RND
)
model = RandomForestClassifier(max_depth=5)
model.fit(train_X, train_y)
pred_y = model.predict_proba(test_X)[:, 1]
plot_roc_curve(test_y, pred_y)
from sklearn.metrics import roc_auc_score
roc_auc_score(test_y, pred_y)
0.89069793083171