Menu
CoddyTech

Courbes ROC

Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 25 sur 58.

Chaque seuil donne son propre rappel et ses propres fausses alertes. La courbe ROC les montre toutes à la fois :

Une courbe bleue en escalier qui monte du coin inférieur gauche au coin supérieur droit, bien au-dessus d’une diagonale grise en pointillés correspondant à un pile ou face. Des points orange indiquent les seuils 0.8, 0.5 et 0.2, en se déplaçant vers le haut et la droite. L’aire en dessous est ombrée : AUC = 0.914

Horizontalement : le taux de faux positifs, la proportion de patients en bonne santé signalés. Verticalement : le rappel. Les seuils plus bas se rapprochent de (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 correspond au rappel
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")

Cela affiche 0.914, l’AUC : l’aire sous la courbe. 1 est parfait, 0.5 équivaut à un pile ou face. Une courbe plus élevée détecte davantage de positifs pour le même nombre de fausses alertes.

challenge icon

Défi

Moyen

Une exploitation de cerisiers allume des feux antigel les nuits où il risque de geler. Le code de départ entraîne deux modèles de gel, logistic et knn, et prépare le graphique.

  1. Écris draw_roc(model, name) : cette fonction trace la courbe ROC du modèle sur ax, avec name comme étiquette, et affiche son AUC comme ci-dessous.
  2. Appelle-la pour les deux modèles, ajoute une diagonale en pointillés étiquetée coin toss et une légende, puis affiche le graphique.

Pour les modèles de glissement de terrain :

logistic AUC: 0.869
k-NN AUC: 0.924

Ensuite, Coddy décrit ton graphique. Celui de Coddy ressemble à ceci :

Courbes ROC intitulées Alertes aux glissements de terrain : une courbe logistique bleue en escalier et une courbe k-NN orange avec peu de angles, toutes deux bien au-dessus d’une diagonale en pointillés verts représentant un tirage à pile ou face, avec une légende

Essayez vous-même

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

# Une ligne par nuit de printemps dans une exploitation de cerisiers : 1 dans frost signifie que du gel s’est formé avant l’aube
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)

# Deux modèles de prévision du gel
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")

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne