Comment tracer plusieurs courbes ROC en Python (avec exemple)



Une façon de visualiser les performances des modèles de classification dans l’apprentissage automatique consiste à créer une courbe ROC , qui signifie courbe « caractéristique de fonctionnement du récepteur ».

Souvent, vous souhaiterez peut-être adapter plusieurs modèles de classification à un seul ensemble de données et créer une courbe ROC pour chaque modèle afin de visualiser quel modèle fonctionne le mieux sur les données.

L’exemple étape par étape suivant montre comment tracer plusieurs courbes ROC en Python.

Étape 1 : Importer les packages nécessaires

Tout d’abord, nous allons importer plusieurs packages nécessaires en Python :

from sklearn import metrics
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier
import numpy as np
import matplotlib.pyplot as plt

Étape 2 : Créer de fausses données

Ensuite, nous utiliserons la fonction make_classification() de sklearn pour créer un faux ensemble de données avec 1 000 lignes, quatre variables prédictives et une variable de réponse binaire :

#create fake dataset
X, y = datasets.make_classification(n_samples=1000,
                                    n_features=4,
                                    n_informative=3,
                                    n_redundant=1,
                                    random_state=0)

#split dataset into training and testing set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3,random_state=0)

Étape 3 : Ajuster plusieurs modèles et tracer des courbes ROC

Ensuite, nous ajusterons un modèle de régression logistique, puis un modèle amélioré par gradient aux données et tracerons la courbe ROC pour chaque modèle sur le même tracé :

#set up plotting area
plt.figure(0).clf()

#fit logistic regression model and plot ROC curve
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred)
auc = round(metrics.roc_auc_score(y_test, y_pred), 4)
plt.plot(fpr,tpr,label="Logistic Regression, AUC="+str(auc))

#fit gradient boosted model and plot ROC curve
model = GradientBoostingClassifier()
model.fit(X_train, y_train)
y_pred = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred)
auc = round(metrics.roc_auc_score(y_test, y_pred), 4)
plt.plot(fpr,tpr,label="Gradient Boosting, AUC="+str(auc))

#add legend
plt.legend()

tracer plusieurs courbes ROC en Python

La ligne bleue montre la courbe ROC pour le modèle de régression logistique et la ligne orange montre la courbe ROC pour le modèle boosté par gradient.

Plus une courbe ROC épouse le coin supérieur gauche du tracé, plus le modèle parvient à classer les données en catégories.

Pour quantifier cela, nous pouvons calculer l’AUC – aire sous la courbe – qui nous indique quelle partie de la parcelle se trouve sous la courbe.

Plus l’AUC est proche de 1, meilleur est le modèle.

À partir de notre graphique, nous pouvons voir les métriques AUC suivantes pour chaque modèle :

  • AUC du modèle de régression logistique : 0,7902
  • AUC du modèle boosté par gradient : 0,9712

De toute évidence, le modèle amélioré par gradient réussit mieux à classer les données en catégories que le modèle de régression logistique.

Ressources additionnelles

Les didacticiels suivants fournissent des informations supplémentaires sur les modèles de classification et les courbes ROC :

Introduction à la régression logistique
Comment interpréter une courbe ROC (avec exemples)
Qu’est-ce qui est considéré comme un bon score d’ASC ?

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *