Menu
CoddyTech

Curve ROC

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 25 di 58.

Ogni soglia determina il proprio richiamo e i propri falsi allarmi. La curva ROC li mostra tutti in una volta:

Una curva blu a gradini sale dall'angolo in basso a sinistra a quello in alto a destra, molto al di sopra di una diagonale tratteggiata grigia che rappresenta il lancio di una moneta. I punti arancioni indicano le soglie 0.8, 0.5 e 0.2, spostandosi verso l'alto e a destra. L'area sottostante è ombreggiata: AUC = 0.914

In orizzontale: il tasso di falsi positivi, la quota di pazienti sani segnalati. In verticale: il richiamo. Le soglie più basse salgono verso (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 è la sensibilità
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")

Questo stampa 0.914, l'AUC: l'area sotto la curva. 1 è perfetto, 0.5 è come lanciare una moneta. Una curva più alta rileva più casi a parità di falsi allarmi.

challenge icon

Sfida

Medio

Un'azienda agricola di ciliegi accende fuochi antigelo nelle notti in cui potrebbe gelare. Il codice iniziale addestra due modelli per il gelo, logistic e knn, e prepara il grafico.

  1. Scrivi draw_roc(model, name): traccia la curva ROC del modello su ax, con l'etichetta name, e stampa il suo AUC come sotto.
  2. Chiamala per entrambi i modelli, aggiungi una diagonale tratteggiata con l'etichetta coin toss e una legenda, poi visualizza il grafico.

Per i modelli sulle frane:

logistic AUC: 0.869
k-NN AUC: 0.924

Poi Coddy descrive il tuo grafico. Il suo è così:

Curve ROC intitolate Avvisi di frana: una curva logistica blu a gradini e una curva k-NN arancione con pochi angoli, entrambe ben al di sopra di una diagonale tratteggiata verde del lancio della moneta, con una legenda

Provalo tu

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 riga per ogni notte primaverile in un ceraseto: 1 in frost significa che si è formata brina prima dell'alba
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)

# Due modelli per prevedere la brina
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")

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online