Menu
CoddyTech

Curvas ROC

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 25 de 58.

Cada umbral tiene su propia exhaustividad y sus propias falsas alarmas. La curva ROC las muestra todas a la vez:

Una curva escalonada azul que asciende desde la esquina inferior izquierda hasta la esquina superior derecha, muy por encima de una diagonal discontinua gris que representa el lanzamiento de una moneda. Los puntos naranjas marcan los umbrales 0.8, 0.5 y 0.2, y se desplazan hacia arriba y a la derecha. El área bajo la curva está sombreada: AUC = 0.914

En horizontal: la tasa de falsos positivos, la proporción de pacientes sanos señalados. En vertical: la recuperación. Los umbrales más bajos se acercan a (1, 1).

from sklearn.metrics import roc_curve, roc_auc_score

proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, proba)  # tpr es la sensibilidad
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")

Esto imprime 0.914, el AUC: el área bajo la curva. 1 es perfecto; 0.5, como lanzar una moneda. Una curva más alta detecta más casos con la misma cantidad de falsas alarmas.

challenge icon

Desafío

Intermedio

Una granja de cerezos enciende hogueras contra las heladas en las noches en que puede helar. El código inicial entrena dos modelos de heladas, logistic y knn, y prepara el gráfico.

  1. Escribe draw_roc(model, name): dibuja la curva ROC del modelo en ax, etiquetada con name, e imprime su AUC como se muestra abajo.
  2. Llámala para ambos modelos, añade una diagonal discontinua etiquetada coin toss y una leyenda, y luego muestra el gráfico.

Para los modelos de deslizamientos de tierra:

logistic AUC: 0.869
k-NN AUC: 0.924

Después Coddy describe tu gráfico. El suyo se ve así:

Curvas ROC tituladas Advertencias de deslizamientos de tierra: una curva escalonada azul de logistic y una curva naranja de k-NN con pocas esquinas, ambas muy por encima de una diagonal verde discontinua de lanzamiento de moneda, con una leyenda

Pruébalo tú mismo

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score

# Una fila por cada noche de primavera en una finca de cerezos: 1 en frost significa que se formó escarcha antes del amanecer
nights = pd.read_csv("frost.csv")
features = ["temp_6pm_c", "humidity_pct", "wind_kmh", "cloud_pct"]
X_train, X_test, y_train, y_test = train_test_split(
    nights[features], nights["frost"], test_size=0.25, random_state=0, stratify=nights["frost"])
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Dos modelos para predecir heladas
logistic = LogisticRegression(max_iter=1000)
logistic.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

fig, ax = plt.subplots()
ax.set_title("Frost Warnings")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online