intervalles de prédiction, nous avions abordé une technique de mesure d’incertitude en régression. Qu’en est-il de cette mesure pour l’autre pan de l’apprentissage supervisé : la classification ?
En classification aussi, il convient de pouvoir maîtriser le niveau de confiance dans la sortie des modèles. Prenons l’exemple canonique de la classification binaire des tumeurs (maligne / bénigne) en fonction de leur taille. On aimerait pouvoir affirmer que si la probabilité en sortie est 0.3, on a effectivement un risque de 30% que la tumeur soit maligne. Cela est loin d’être le cas dans la pratique pour de nombreux algorithmes.
Citons deux exemples où avoir une probabilité calibrée est nécessaire :
Les modèles non calibrés sont une plaie lorsqu’il s’agit de vouloir interpréter le résultat de predict_proba. L’abstraction de cette méthode - que l’on a tendance à utiliser sans comprendre ce qu’il y a derrière - est très dangereuse quand on voit les soucis de calibration que nous allons illustrer dans la première partie.
Néanmoins, des méthodes existent pour pallier les écueils de calibration comme la régression isotonique que nous détaillerons en seconde partie.
Le code utilisé est disponible ici et là.
Contrairement à la régression qui permet d’estimer une variable continue, la classification retourne une probabilité d’appartenir à une classe C. On dit de la variable cible Y qu’elle est discrète. En notant les variables explicatives X, on cherche la probabilité conditionnelle pour Y d’appartenir à la classe C sachant X : P(Y=C|X).
Comment interprète-t-on cette probabilité ? Sans s’attarder sur l'épistémologie de ce terme, notons qu’il peut signifier à la fois la chance qu’un événement a de se réaliser d’un point de vue fréquentiste, mais aussi le degré de croyance en la réalisation de l’événement en présence d’incertitude. Par souci de simplicité, nous confondrons ces deux notions dans la suite de cet article.
En suivant notre raisonnement, pour accéder au degré d’incertitude de notre modèle de classification, il est nécessaire que les probabilités en sortie soient bien calibrées. Cela signifie que la proportion d’individus ayant une même probabilité d’appartenir à une classe est égale à cette probabilité. Comme vu en introduction, si l’on prend tous les individus ayant une probabilité P=0.3 d’appartenir à la classe C = « tumeur maligne », environ 30% d’entre eux doivent effectivement avoir une tumeur maligne.
Néanmoins, les classifieurs ne sont que rarement calibrés. Il existe un moyen de mesurer la qualité d’un estimateur sur cet aspect : la courbe de calibration [1]. Elle est implémentée dans la bibliothèque scikit-learn. L’algorithme est le suivant :
Ce code permet de générer les figures 1 et 2.
Figure 1 : Courbes de calibration pour 4 classifieurs
Cette figure illustre les écueils des résultats des méthodes appelées predict_proba dans les algorithmes de classification classiques. Les données sont simulées à l’aide de la méthode make_classification et les classifieurs ont été réglés pour avoir un score d’auc comparable.
Figure 2 : Courbes de calibration
Cette seconde figure est similaire à la première avec d’autres algorithmes, la séparation ayant été effectuée par souci de clarté.
N.B: Les techniques de sous ou sur-échantillonnage, pour répondre aux problèmes de classes déséquilibrées, modifient la distribution de probabilité a priori et engendrent des probabilités très mal calibrées.
Comment faire pour éviter ce problème récurrent de calibration ?
Détaillons une des techniques existantes, proposées initialement dans [4] : la calibration par régression isotonique. Le principe est le suivant :
p=isotonic regression ( model (X) )
Voici un exemple de code python qui permet de calibrer les probabilités d’un classifieur naïf bayésien :
Figure 3 : Résultat de la régression isotonique
La régression isotonique entraînée épouse bien la forme de calibration du classifieur naïf bayésien. Ainsi, si le classifieur renvoie une probabilité de 0.2, notre modèle calibré retournera environ une probabilité de 0.4.
Figure 4 : Comparaison des probabilités avant et après calibration
La classe CalibratedClassifierCV permet de faire cela de façon concise, mais il semblait intéressant de le détailler dans le code par souci de compréhension. Sur la figure 3, outre la différence de calibration entre le modèle simple et celui calibré par régression isotonique, on voit que le score logloss est nettement meilleur lorsque les probabilités sont calibrées (cela est vrai seulement pour les modèles qui n’optimisent pas directement cette fonction de coût). En revanche, le score en auc n’est quasiment pas modifié car cette métrique ne dépend que de l’ordre des probabilités et la régression isotonique possède une contrainte de monotonie.
La régression isotonique est une fonction f, non paramétrique, croissante, qui, une fois entraînée, envoie un vecteur de probabilités vers un vecteur de probabilités calibrées tel que .
Trouver f revient à minimiser les moindres carrés tout en imposant une contrainte de monotonie, ou plus formellement, à résoudre le problème suivant :
L’algorithme utilisé - que nous nous contenterons d’illustrer [5] - s’appelle PAVA (Pool Adjacent Violators Algorithm) et a une complexité linéaire. Il prend en entrée le vecteur des cibles réelles yiordonné par probabilité croissante (sortie du classifieur).
Ce snippet de code permet de générer la figure suivante :
Figure 5 : Animation de la calibration avec l’algorithme PAVA
Pour une meilleure visualisation, environ 50 individus ont été sélectionnés uniformément dans la distribution de probabilité parmi les 21000 de l’ensemble de validation croisée.
Cette méthode a comme avantage par rapport à d’autres de bien calibrer les probabilités quel que soit le défaut de calibration du classifieur (sur ou sous-confiance en lui). En revanche, la condition pour bien fonctionner est que l’on doit disposer de suffisamment de données puisqu’il y a deux étapes d’apprentissage, une première pour le classifieur et une seconde pour la régression isotonique.
A retenir :
Quelques pistes de réflexion pour le futur :
[1] https://jmetzen.github.io/2015-04-14/calibration.html
[2] Dying ReLU and Initialization: Theory and Numerical Examples. Lu Lu, Yeonjong Shin, Yanhui Su, George Em Karniadakis. 2019
[3] On Calibration of Modern Neural Networks. Chuan Guo, Geoff Pleiss, Yu Sun, Kilian Q. Weinberger. 2018
[4] Transforming Classifier Scores into Accurate Multiclass Probability Estimates. Bianca Zadrozny and Charles Elkan. 2002
[5] http://fa.bianp.net/blog/2013/isotonic-regression/
[6] Spline-Based Probability Calibration. Brian Lucena. 2018
[7] Obtaining Well Calibrated Probabilities Using Bayesian Binning. Mahdi Pakdaman, Gregory F. Cooper, and Milos Hauskrecht. 2015