Cet article est le sixième de notre série consacrée aux métriques de classification, dans le cadre de notre formation : Evaluer la performance des modèles de Machine Learning et de Deep Learning.
Nous avons présenté dans l’article précédent les deux indicateurs essentiels qui constituent la courbe ROC : la sensitivity et la specificity.
Qu’est-ce que l’AUC ROC ?
Pour prendre en compte le compromis entre la sensitivity et la Specificity, on calcule une métrique qui résume la performance globale du modèle : l’AUC ROC, aussi noté AUROC.
Le terme AUC signifie Area Under the Curve, aire sous la courbe en français. La métrique AUC ROC consiste donc à calculer l’aire sous la courbe ROC.
En reprenant l’exemple du diagnostic de grossesse détaillé dans l’article précédent, on peut calculer la valeur de l’AUC ROC.
Figure 1. AUC ROC
Trait rouge : courbe ROC. Aire rouge : aire sous la courbe ROC, qui vaut 75%.
L’AUC ROC peut être calculée grâce à la fonction de scikit-learn : sklearn.metrics.roc_auc_score [1].
Pourquoi calculer l’AUC ROC ?
Pourquoi l’AUC ROC est-elle une valeur intéressante et à quoi peut-on la comparer ?
Pour répondre à ces questions, calculons-la sur deux modèles particuliers. Nous utilisons le jeu de données Telco Customer Churn [2]. Ces données permettent de prédire les résiliations des clients d’une agence de télécommunication en fonction de leurs offres, de leurs tarifs et des autres informations associées aux contrats.
AUC ROC d’un modèle parfait
Lors de la construction de la courbe ROC, nous avons vu que pour améliorer la sensitivity il faut dégrader la specificity, et vice-versa. Un bon modèle serait alors celui qui permet d’améliorer la sensitivity sans dégrader la specificity. En passant par le cas particulier du modèle parfait, nous allons comprendre pourquoi la métrique AUC ROC traduit ce compromis entre sensitivity et specificity.
Un modèle parfait sépare complètement les individus positifs des individus négatifs dans ses probabilités prédites (aucun individu négatif n’a une probabilité supérieure à un individu positif). La figure ci-dessous illustre ce cas :
Figure 2. Probabilités prédites par un modèle parfait.
1 point = 1 client, coloré en orange s’il a effectivement résilié (churn), en bleu s’il n’a pas résilié (no churn). Tous les individus négatifs sont à gauche et tous les individus positifs sont à droite. Si l’on place le seuil entre les négatifs et les positifs (vers 50% ici) alors toutes les prédictions sont correctes.
A partir des probabilités prédites, construisons la courbe ROC de ce modèle :
Figure 3. Construction de la courbe ROC d’un modèle parfait.
Graphe supérieur gauche : distribution des probabilités de résiliation prédites. 1 point = 1 client, coloré en orange s’il a réellement résilié (churn), en bleu s’il n’a pas résilié (no churn). Graphe inférieur gauche : matrice de confusion. Graphe droite : évolution de la sensitivity et de (1-specificity).
Avec un modèle parfait, on peut maximiser à la fois la sensitivity et la specificity lorsque le seuil est fixé entre les individus négatifs et positifs. Notre modèle prédit alors parfaitement chaque point.
Le modèle parfait a donc une sensitivity maximale pour n’importe quelle valeur de specificity et une specificity maximale pour n’importe quelle valeur de sensitivity.
L’aire sous la courbe est ici l’aire sous une constante égale à 1 entre 0 et 1. L’AUC ROC vaut donc 100% pour un modèle parfait :
AUC ROC d’un modèle parfait = 100%
Figure 4. Aire sous la Courbe ROC d’un modèle parfait.
AUC ROC d’un modèle non-informatif
Un modèle non-informatif (no-skill model/classifier), également appelé modèle aléatoire (random model/classifier) ou modèle de performance minimale (baseline model/classifier), est un modèle qui donne la même distribution de probabilités aux individus positifs et négatifs.
Calcul théorique de l’AUC ROC :
Nous avons vu dans l’article précédent que la sensitivity d’un modèle non-informatif était linéairement liée à la specificity selon l’équation $\text{sensitivity} = 1-\text{specificity}$.
L’AUC ROC est donc égale à la moitié d’un carré de 1×1 :
AUC PR d’un modèle ROC = 50%
Calcul empirique de l’AUC ROC :
Vérifions notre raisonnement sur des données empiriques. Nous reprenons les données Telco et attribuons à chaque client une probabilité aléatoire (loi uniforme) entre 0 et 1. Traçons la courbe ROC de ce modèle :
Figure 5. Courbe ROC d’un modèle non-informatif.
Pour ce modèle aléatoire, on vérifie bien que la courbe ROC suit la diagonale entre les points (0%, 0%) (sensitivity à 0% et specificity à 100%) et (100%, 100%) (sensitivity à 100% et specificity à 0%).
Lorsque l’on calcule l’aire sous cette courbe, on obtient bien un AUC très proche du résultat attendu :
Figure 6. Aire sous la Courbe ROC d’un modèle non-informatif.
La courbe ROC d’un modèle non-informatif suit une diagonale.
Les variations de la courbe ROC mesurée (en rouge) avec la courbe théorique (en bleu) s’expliquent par le fait que nous utilisons un jeu de données de taille limitée. La loi des grands nombres ne s’applique donc pas et l’aléa génère des “oscillations” de la courbe.
AUC ROC d’un modèle de Machine Learning
L’aire sous la courbe ROC est donc un indicateur de la performance globale du modèle, et est compris entre deux bornes :
50% $\leq$ AUC ROC d’un modèle de Machine Learning $\leq$ 100%
Calculons la valeur de l’AUC ROC du modèle entraîné sur les données Telco.
Modèle de prédiction de la résiliation (churn) des clients
Nous avons entraîné avec les données Telco un modèle de prédiction de la résiliation (churn). On l’utilise ensuite pour prédire la probabilité de résiliation de chaque client. Pour chaque seuil de classification, la matrice de confusion et les valeurs de la sensitivity et de la specificity évoluent :
Figure 7. Courbe ROC d’un modèle de Machine Learning.
Calculons à présent sous Python l’AUC ROC du modèle sur nos données, à partir du modèle xgboost entraîné (code dans le premier article) :
from sklearn.metrics import roc_auc_score
auc_roc = roc_auc_score(y_true=y_test, y_score=probas_pred)
print(auc_roc)
Sous R, les fonctions permettant de calculer la courbe ROC calculent aussi l’AUC (qu’il faut récupérer parmi les valeurs de l’objet retourné). On peut utiliser la fonction performance() de ROCR, la fonction roc() de pROC, ou encore roc.curve() de PRROC.
L’AUC ROC de notre modèle de prédiction de la résiliation vaut 84% :
Figure 8. Aire sous la Courbe ROC d’un modèle de Machine Learning.
En bleu pointillé : courbe ROC d’un modèle non-informatif (baseline)
L’AUC ROC de notre modèle se situe bien au-dessus de celui d’un modèle non-informatif et en-dessous de celui d’un modèle parfait. Avec 84% d’AUC ROC, il s’agit d’un modèle assez performant.
Conclusion
L’AUC ROC permet d’évaluer la performance globale d’un modèle. Il est égal à 100% pour un modèle parfait et à 50% pour un modèle non-informatif. La performance d’un modèle de Machine Learning se situe donc entre ces valeurs. Attention, une valeur significativement inférieure à 50% provient en général d’une erreur de code : il est probable que ses prédictions soient utilisées à l’envers.
Comme il est global – calculé sur l’ensemble des seuils – l’AUC ROC peut être une bonne métrique pour l’optimisation des hyperparamètres d’un modèle, à condition que les données utilisées soient assez équilibrées. En présence de données déséquilibrées, l’AUC ROC présente des limites.
De même que l’AUC Precision-Recall, l’AUC ROC ne doit pas être utilisé comme une fonction de coût (loss function) optimisée directement pour l’apprentissage d’un algorithme de Machine Learning, car il n’a pas les propriétés de régularité et de convexité nécessaires.
Pour explorer d’autres métriques de classification, consultez les autres articles de cette série.
- 2 jours
- 950€
- 2 jours
- 1 200€
Références :
- « sklearn.metrics.roc_auc_score », scikit-learn. https://scikit-learn/stable/modules/generated/sklearn.metrics.roc_auc_score.html
- « Telco Customer Churn ». https://kaggle.com/blastchar/telco-customer-churn
Crédit image : xiaokeng – Dribbble