ML : Précision, F1-Score, Courbe ROC, que choisir ?

90 % de réussite…, c’est nul

English version here :

Articles liés : Nettoyage complet d’un corpus, Extraction des caractéristiques et Détection de spams ?

C’est l’histoire d’un stagiaire data scientist, tout content d’appliquer ses premiers algorithmes de machine learning sur des données d’entreprises après un an à mesurer la taille des ailes de mouches pour en deviner l’espèce (merci les cours de ML !).

Ce stagiaire devait prédire, à partir de données de navigation, si un visiteur reviendrait dans la journée, afin de lui proposer un formulaire.

Clic, clic, clic, shift+Entrée et voilà la cellule du Notebook qui s’exécute et l’algorithme qui se lance.

Quelques interminables secondes d’attente et le résultat tombe :

Banco !

Ce jeune data scientist va alors voir son mentor, les mains dans les poches : “T’as quelque chose d’intéressant à me donner sinon ?”

En réalité…, 90 % c’était nul…

Car parmi toutes les visites du site Internet, seuls 9 % d’entre elles menaient à une deuxième visite dans la journée. Prédire que les visiteurs ne reviendraient jamais aurait eu de meilleures performances qu’un algorithme. D’où la question :

0. Réponse rapide

Quels sont les objectifs du modèle ?

Répondre à cette question, c’est faire les 3/4 du travail.

  • Une banque qui veut détecter des fraudes voudra un modèle qui n’en laisse passer aucune, zéro, zip, nada. Quitte à avoir des suspicions, contacter le client et se tromper.
  • Une messagerie en revanche pourra laisser passer quelques spams mais devra éviter au maximum de classer en tant que spam un mail qui n’en n’est pas un.
  • Un algorithme de reconnaissance de cancer à partir de grains de beauté préférera se tromper et détecter un cancer. Le patient aura donc un examen supplémentaire ou un retrait du grain de beauté. C’est préférable au fait de laisser passer de véritables cancers.

Quelles erreurs le modèle peut-il faire ? Et lesquelles sont interdites ?

La réponse est peut-être à chercher dans les objectifs business de l’entreprise. Dans mon exemple de stagiaire du début, cela revient à répondre à la question : Préfère-t-on envoyer une notification à quelqu’un de pas du tout intéressé ou bien laisser partir quelqu’un de très motivé ?

Il faut donc savoir ce que l’on cherche à minimiser, et pour cela, nous pouvons utiliser plusieurs formules.

1. Métriques et outils

Nous allons voir les métriques et outils suivants :

  • Matrice de confusion
  • Accuracy
  • Précision
  • Rappel
  • F1-Score
  • Sensibilité, Spécificité, Courbe ROC

Prenons les résultats suivants :

Résultat d’une détection de Bradley Cooper

L’algorithme devait reconnaître Bradley Cooper, il a manifestement reconnu une personne de trop.

Nous avons donc y = [0,0,0,0,0,0,0,0,0,0,1] et y pred = [0,0,0,0,0,0,0,0,0,1,1]

I. Matrice de confusion (confusion matrix)

Matrice de confusion pour la détection de Bradley Cooper

Cette matrice est la base de tout. Les calculs suivants et la courbe ROC se basent sur les tn, fn, fp et tp que l’on voit sur l’image ci-dessus.

Tout data scientist qui se respecte a déjà hésité sur true negative/false positive/ false negative/true positive… J’ai trouvé une méthode ; la première partie (true/false) indique si la prédiction est correcte (?pred class=true class?), la deuxième partie (positive/negative) indique le résultat de la prédiction.

Ainsi, les false positive sont tous les éléments prédits positifs alors qu’ils ne l’étaient pas réellement. Dans notre cas, une personne qui n’était pas Bradley Cooper a été reconnue comme étant Bradley Cooper.

Si l’on reprend mes trois exemples précédents, une banque voudra fn=0 lors de la détection de fraude, une messagerie voudra fp=0 lors de la détection de spam et un médecin voudra fn=0 lors de la détection d’un cancer.

II. Accuracy

L’accuracy permet de connaître la proportion de bonnes prédictions par rapport à toutes les prédictions. L’opération est simplement : Nombre de bonnes prédictions / Nombre total de prédictions

Comme je l’expliquais plus haut, le problème de cette métrique est qu’elle n’indique pas les forces et faiblesses de notre modèle.

III. Précision (precision)

La précision correspond au nombre de documents correctement attribués à la classe i par rapport au nombre total de documents prédits comme appartenant à la classe i (total predicted positive).

Dans notre exemple, il s’agit du nombre de fois où Bradley Cooper a été reconnu (c’était vraiment lui) par rapport au nombre de fois où il a été prédit (même si ce n’était pas vraiment lui).

Et tout de suite, on est moins fier de notre algorithme.

La précision permet de mesurer le coût des faux positifs, c’est-à-dire ceux détectés par erreur. Si l’on cherche à limiter les faux positifs, c’est cet indicateur que l’on va chercher à minimiser. Dans l’exemple de détection de spams visible ici, nous avons atteint une precision = 1. Soit l’idéal à atteindre pour ce type de problème.

Note : Le lecteur averti aura bien compris que l’exemple de Bradley Cooper est là pour illustrer simplement les métriques. Evidemment que l’on ne peut pas évaluer notre algorithme avec une unique image.

Mais comment savoir si l’on a détecté toutes les classes positives ?

Pour ce faire, nous utiliserons le…

IV. Rappel (recall)

Le rappel correspond au nombre de documents correctement attribués à la classe i par rapport au nombre total de documents appartenant à la classe i (total true positive).

Bon, l’exemple Bradley Cooper ne se prête pas à cet indicateur. Mais imaginons que l’on ait plusieurs Bradley Cooper sur la photo ; le rappel correspond au nombre de fois où Bradley Cooper a été reconnu par rapport au nombre de fois où il aurait dû être reconnu.

Ce calcul permet d’estimer combien de documents réellement positifs nous avons réussi à capturer et combien sont passés au travers des mailles du filet.

Vous l’avez senti, dans le cas de fraudes bancaires ou de détection de cancer, on souhaite… on doit avoir un Recall = 1.

Le recall est aussi appelé sensibilité.

Ok, on a des indicateurs pour estimer l’impact des faux négatifs et faux positifs, mais comment peut-on évaluer globalement notre modèle ?

Et bien il existe une magique combinaison des deux, appelée…

V. F1-Score

Le F1-Score combine subtilement la précision et le rappel. Il est intéressant et plus intéressant que l’accuracy car le nombre de vrais négatifs (tn) n’est pas pris en compte. Et dans les situations d’imbalanced class comme c’est le cas avec Bradley Cooper, nous avons une majorité de vrais négatifs qui faussent complètement notre perception de la performance de l’algorithme. Un grand nombre de vrais négatifs (tn) laissera le F1-Score de marbre.

Le F1-Score est donc à privilégier sur l’accuracy dans le cas d’une situation d’imbalanced classes.

VI. Sensibilité, Spécificité, Courbe ROC

Une courbe ROC (receiver operating characteristic) est un graphique représentant les performances d’un modèle de classification pour tous les seuils de classification (Google le dit).

Qu’est-ce que ce seuil (threshold en anglais) ?

Seuil

Imaginons un test pour détecter la grippe. Ce test se base uniquement sur la prise de température. Pour savoir si un individu est malade, on définit un seuil de température au-delà duquel l’individu est considéré malade.

Si seuil=40°C, il y a de fortes chances pour que le test fasse peu, voir aucune erreur en désignant des malades (fp=0). En revanche, il oubliera beaucoup de malades qui peuvent avoir une température de 39,5°C (fn=très élevé).

Un algorithme de machine learning prenant beaucoup de paramètres en compte, ce seuil n’est pas estimé en °C mais entre 0 et 1. Le seuil représente la probabilité à partir de laquelle on considère que l’individu appartient à la class X.

En python, si l’on utilise la library Sklearn, on fera appel à la fonction predict_proba et on fera varier le seuil de cette façon :

y_pred = (clf.predict_proba(X_test)[:,1] >= SEUIL).astype(bool)

Ensuite, il nous reste à compter les tp, tn, fp, fn et nous pouvons calculer la sensibilité, spécificité et courbe ROC.

Sensibilité (sensitivity)

La sensibilité mesure la proportion des prédictions positives correctement identifiées (qui étaient réellement positives). C’est en effet la même formule que le rappel.

Tout ce qui a été vu sur le rappel reste valable, la sensibilité permet de mesurer le nombre d’individus/documents positifs qui nous ont échappé.

Spécificité (specificity)

La spécificité mesure, à l’inverse, la proportion d’éléments négatifs correctement identifiés.

Les formules de la spécificité et de la sensibilité parlent d’elles-mêmes : les deux sont complémentaires. Regarder l’une sans l’autre n’apporte rien. Par exemple, si l’on classifie malade/non malade avec un seuil=40°C, la spécificité vaudra 1 mais la sensibilité sera très faible. Un bon test doit être sensible et spécifique.

Récapitulons… Nous allons faire varier le seuil, ce qui fera varier les valeurs des tn, tp, fn, fp, qui feront varier la sensibilité et la spécificité. On représentera ces dernières sur une courbe appelée… courbe ROC.

Courbe ROC

Si cette précédente partie est comprise, il n’y a plus grand-chose à dire…, à part l’interprétation.

Pour représenter les points, nous représenterons la sensibilité sur l’axe des ordonnées et (1-spécificité) sur l’axe des abscisses.

Courbe dénichée ici

La courbe ci-dessus est issue de l’identification d’insuffisance cardiaque en fonction du niveau de BNP (B-type natriuretic peptide pour les curieux), le seuil. On constate que plus ce niveau de BNP augmente, plus la sensibilité diminue.

Cette courbe sert à deux choses :

  • Comparer des modèles
  • Choisir un seuil optimal

Comment comparer des modèles ?

On peut comparer des modèles en affichant leurs courbes ROC. Ensuite, on peut choisir quel modèle performe le mieux. Pour le choisir, il faut se baser sur l’aire sous la courbe (Area Under the Curve). Plus l’aire sous la courbe est grande, meilleur est notre modèle.

Source : Sensibilité, spécificité, CNAM

Dans l’exemple précédent, nous choisirons le modèle dont la courbe D résulte.

Comment choisir le seuil idéal ?

Le seuil idéal est le meilleur compromis entre sensibilité et spécificité.

Comme cela est expliqué ici, le seuil idéal correspond au point à la fois le plus proche de l’idéal (1,1) et à la fois le plus loin de la diagonale.

On choisira comme seuil le point B ! Source : Sensibilité, spécificité, CNAM

La construction d’une courbe ROC est présentée pas à pas ici.

Conclusion

Après toutes ces formules, vous avez toutes les clés pour évaluer les performances de vos algorithmes vis-à-vis des objectifs de votre entreprise/projet. Vous avez aussi les clés pour choisir le meilleur modèle et définir le seuil de classification idéal de celui-ci.

Approfondir la question ? Les formules de cet article sont issues des articles Wikipedia là et très complets !

Data scientist jr & Javascript + Python full-stack developer… ok I like tech and do all kind of stuff