Précision ou rappel : lequel privilégier ?

Questions d’entrevue Apprentissage supervisé

Intermédiairemetriquesclassification

La réponse attendue n’est pas une métrique, c’est une question en retour : quelle erreur coûte le plus cher ? Les deux métriques mesurent les deux façons de se tromper, et le métier tranche, pas le modèle.

  • Précision = VP / (VP + FP) : parmi ce que j’ai signalé, quelle part était juste ? Elle punit les fausses alertes.
  • Rappel = VP / (VP + FN) : parmi ce qu’il fallait trouver, quelle part ai-je trouvée ? Il punit les cas manqués.

Les cas d’usage qui tranchent

Le rappel d’abord, quand manquer un cas positif est grave et qu’une vérification supplémentaire est peu coûteuse :

  • dépistage médical — un cancer manqué ne se rattrape pas, un examen de contrôle en trop se rattrape ;
  • détection de fraude — laisser passer une fraude coûte le montant, vérifier une transaction légitime coûte une minute d’analyste ;
  • maintenance prédictive — une panne non anticipée arrête la ligne de production.

La précision d’abord, quand la fausse alerte a un coût direct et que le volume de positifs à trouver est grand :

  • filtrage du courrier indésirable — un message légitime classé indésirable est bien pire qu’un indésirable qui passe ;
  • recommandation — les cinq articles proposés doivent être bons, il y en a mille autres si on en manque ;
  • toute action automatique irréversible — bloquer un compte, refuser un paiement.

Le compromis, et comment on le pilote

Les deux métriques s’opposent parce qu’elles dépendent du même seuil. Baisser le seuil signale davantage de cas : le rappel monte, la précision descend. Le modèle n’a pas changé.

D’où la façon correcte de présenter ce travail : on n’optimise pas « la précision » ou « le rappel », on choisit un point sur la courbe précision-rappel, en fonction d’une contrainte énoncée par le métier.

python
from sklearn.metrics import precision_recall_curve

precisions, rappels, seuils = precision_recall_curve(y_val, probabilites)

# La contrainte vient du metier : « au moins 90 % de rappel »,
# et on prend alors le seuil qui maximise la precision sous cette contrainte.
admissibles = rappels[:-1] >= 0.90
seuil = seuils[admissibles][precisions[:-1][admissibles].argmax()]

Les deux résumés à connaître, avec leur limite :

  • Le F1, moyenne harmonique des deux. Utile pour comparer des modèles, mais il suppose que les deux erreurs coûtent autant — ce qui est presque toujours faux. Le F-bêta permet de pondérer, avec bêta supérieur à 1 pour favoriser le rappel.
  • L’aire sous la courbe précision-rappel, qui résume tous les seuils. C’est la bonne métrique de comparaison sur des classes déséquilibrées, là où l’AUC ROC reste flatteuse.

Et le point qui vaut d’être posé en fin de réponse, parce qu’il sort du cadre technique : quand un intervieweur demande « précision ou rappel », il vérifie souvent si le candidat pense en coûts. Chiffrer les deux erreurs en euros, en heures ou en risque, puis choisir le seuil qui minimise le coût total, est une meilleure réponse que n’importe quelle métrique citée seule.

Toutes les questions Apprentissage supervisé