~/teaching · machine learning · séance 4, jeudi 15 octobre 2026
Métriques, calibration et seuil de décision sous coûts asymétriques, puis un dépôt qu'une autre équipe peut relancer
D'une probabilité de défaut à une décision défendue, et d'un notebook à un dépôt qui tourne ailleurs.
Résumé
Ce support clôt le premier bloc du cours de Machine Learning de Centrale Méditerranée (option DDEFI, 2026-2027). Il traite deux sujets que beaucoup de cours laissent de côté : la décision qui sort d'un classifieur, et l'ingénierie qui permet à une autre équipe de retrouver les mêmes chiffres. Le fil conducteur est le scoring de crédit, où les défauts sont rares et où les deux erreurs n'ont pas le même prix.
La première moitié relit les métriques classiques avec leurs limites : matrice de confusion, précision et rappel, courbe ROC et aire sous la courbe, courbe précision-rappel, puis calibration et score de Brier. Elle aboutit au seuil de décision, démontré en quatre lignes à partir de deux coûts métier et vérifié sur une courbe de coût. Chaque résultat est refait à la main sur dix dossiers de crédit, assez peu pour tout vérifier au crayon.
La seconde moitié est une discipline plutôt qu'un théorème : un résultat dépend des données, du code, de la graine aléatoire et de l'environnement, donc on fixe les quatre. À la fin, vous savez dire ce que chaque métrique cache, justifier un seuil devant un comité de crédit, et livrer un dépôt avec tests et intégration continue (continuous integration, CI) qui reproduit vos métriques en une commande.
Plan du deck
- Pourquoi l'exactitude trompe. Avec 2 % de défauts, un modèle qui ne prédit jamais de défaut paraît excellent et n'attrape rien.
- Matrice de confusion, précision, rappel. Quatre cases, quatre taux aux dénominateurs différents, et pourquoi la précision dépend du taux de base.
- Courbe ROC et AUC. Un point par seuil, l'aire lue comme une probabilité, et son histoire du radar à la radiologie.
- Précision-rappel et score F-bêta. La vue à privilégier quand la classe positive est rare.
- Calibration et score de Brier. Bien classer n'est pas donner de vraies probabilités, la décomposition de Murphy montre pourquoi.
- Pondération des classes et sa correction. Pondérer les positifs gonfle les probabilités, une formule sur les cotes les ramène.
- Le seuil sous coût. Démonstration, exemple chiffré à 600 et 4 500 €, et courbe de coût attendu.
- Ingénierie reproductible. Données hachées, découpage figé, une graine, fichier de verrouillage, cinq tests, une commande, CI, branches et journal des décisions.
Exactitude, précision et rappel quand la classe positive est rare
Quand deux emprunteurs sur cent font défaut, un modèle qui accepte tout le monde a raison 98 fois sur 100 et ne sert à rien, il faut donc des taux qui regardent les défauts.
Le support garde un portefeuille illustratif tout l'après-midi : 10 000 demandes de crédit, dont 2 % font défaut. Un modèle qui répond toujours « pas de défaut » affiche 98 % d'exactitude (accuracy) et un rappel nul. Un vrai modèle, à un seuil donné, refuse 150 des 200 défauts et en laisse passer 50, tout en refusant à tort 800 des 9 800 bons clients. Son exactitude vaut (150 + 9 000) / 10 000, soit 91,5 %, moins que le modèle inutile, alors qu'il attrape trois défauts sur quatre. L'exactitude additionne deux erreurs qui n'ont ni le même effectif ni le même prix.
Appelons positif un défaut prédit, donc un refus. La matrice de confusion (confusion matrix) a quatre cases, TP, FP, FN et TN, avec vrais défauts, bons clients et le taux de base . La précision (precision), le rappel (recall) et le taux de faux positifs (false positive rate) ne diffèrent que par leur dénominateur, qui dit de quoi l'on parle : la colonne des refus, la ligne des défauts ou la ligne des bons clients.
Deux réécritures courtes expliquent les pièges. En multipliant et divisant par puis par , l'exactitude devient une moyenne du rappel et de la spécificité pondérée par la taille des classes : avec , les défauts n'y pèsent que 2 %. En divisant la précision par , on retrouve la formule de Bayes dans le vocabulaire du crédit.
| Grandeur | Calcul | Valeur |
|---|---|---|
| Précision | 150 / 950 | 15,8 % |
| Rappel | 150 / 200 | 75 % |
| Taux de faux positifs | 800 / 9 800 | 8,2 % |
| Exactitude | 9 150 / 10 000 | 91,5 % |
Remarque (Même modèle, autre population.). Le rappel et le FPR décrivent le modèle, la précision décrit aussi la population. Gardez un rappel de 0,75 et un FPR de 0,0816, faites passer le taux de défaut de 2 à 22 % : la précision monte de 15,8 % à environ 72 % sans que le modèle ait changé.
Courbe ROC, AUC et vue précision-rappel
En faisant glisser le seuil, on trace les défauts attrapés contre les bons clients refusés à tort, et l'aire sous cette courbe est la chance qu'un défaut pris au hasard soit mieux noté qu'un bon client.
Chaque seuil donne une matrice de confusion, donc un point, avec le taux de faux positifs en abscisse et le rappel (taux de vrais positifs) en ordonnée. Faire descendre le seuil de 1 à 0 dessine la courbe ROC (ROC curve). Son aire se lit de trois façons équivalentes : une aire géométrique, une probabilité, et un comptage de paires bien ordonnées, qui n'est autre que la statistique de Mann-Whitney divisée par le nombre de paires. On passe de la première à la deuxième par un changement de variable puis la formule des probabilités totales.
| Issue | Dossier | Probabilité prédite |
|---|---|---|
| bon client | 1 | 0,05 |
| bon client | 2 | 0,08 |
| bon client | 3 | 0,10 |
| défaut | 4 | 0,15 |
| bon client | 5 | 0,20 |
| bon client | 6 | 0,30 |
| bon client | 7 | 0,40 |
| défaut | 8 | 0,55 |
| bon client | 9 | 0,70 |
| défaut | 10 | 0,90 |
Compter les paires sur les dix dossiers
- Les paires. Trois défauts et sept bons clients forment 21 paires (défaut, bon client).
- Dossier 4 (0,15). Il ne dépasse que les trois bons clients notés 0,05, 0,08 et 0,10, il gagne donc 3 paires.
- Dossier 8 (0,55). Il bat six bons clients et ne perd que contre le dossier 9 à 0,70 : 6 paires.
- Dossier 10 (0,90). Il bat les sept : 7 paires.
- Résultat. U = 16, donc l'AUC vaut 16/21, environ 0,762, et le Gini cité en crédit (2 AUC moins 1) environ 0,524.
Comme seul l'ordre des scores compte, toute transformation croissante du score laisse l'AUC inchangée. C'est sa force et sa limite : elle ne dit rien du seuil, des coûts, ni de la justesse des probabilités. La courbe vient de la détection radar (Peterson, Birdsall et Fox, 1954) ; Hanley et McNeil (1982) ont montré que son aire est la statistique de Mann-Whitney normalisée, et Bradley (1997) l'a introduite dans la comparaison des algorithmes d'apprentissage.
Quand la classe est rare, la courbe ROC flatte. Dans l'exemple des 10 000 demandes, 800 faux positifs font 8 % des bons clients, ce qui semble anodin, mais 84 % des refus. La courbe précision-rappel (precision-recall curve) montre ce second fait ; son repère aléatoire est le taux de défaut, pas une diagonale. Le score en résume un point par une moyenne harmonique pondérée, et donne plus de poids au rappel. Le support prévient que choisir revient à choisir des coûts sans le dire.
Calibration et score de Brier
Un modèle est calibré quand, parmi les dossiers qu'il note à 10 %, environ un sur dix fait réellement défaut, et un bon classement ne le garantit pas.
Deux modèles peuvent avoir la même AUC alors que l'un annonce 50 % là où le taux de défaut observé est de 10 %. La courbe de fiabilité (reliability curve) le montre : on regroupe les prédictions par classes de score et l'on compare la probabilité moyenne prédite à la fréquence observée ; un modèle calibré suit la diagonale. Le score de Brier (Brier score), né en prévision météorologique (Brier, 1950), mesure les valeurs elles-mêmes, comme l'écart quadratique moyen entre la probabilité et l'issue 0 ou 1.
Dans une classe de score où la fréquence de défaut vaut , on ajoute et retranche , on développe le carré, et le terme croisé s'annule : il reste l'erreur de calibration au carré plus la variance de Bernoulli . En moyennant sur les classes et en appliquant la formule de la variance totale, on obtient la décomposition de Murphy (1973).
Vérification sur les dix dossiers
- Écarts au carré. Les dix valeurs de (p moins y) au carré totalisent 1,734, le score de Brier vaut donc environ 0,173.
- Le défaut mal classé. Le dossier 4, un défaut noté 0,15, coûte 0,85 au carré, soit 0,7225, c'est-à-dire 0,072 des 0,173 à lui seul.
- Modèle constant. Dire 0,3 à tout le monde est calibré mais ne fait qu'une classe, son Brier est donc l'incertitude, 0,3 fois 0,7, soit 0,21.
- Lecture. Le modèle bat la constante, sa résolution rapporte plus que ne coûtent ses erreurs de calibration.
Le même raisonnement donne le repère du projet : sur le jeu UCI Default, à 22,1 % de défauts, le modèle constant a un Brier d'environ 0,172, et un modèle de référence doit faire mieux en validation. Pour recalibrer, on ajuste Platt (une logistique sur le score) ou une régression isotone (croissante par morceaux) sur l'ensemble de validation, jamais sur le test. En banque, ce n'est pas facultatif : les orientations de l'EBA sur l'estimation des PD (EBA/GL/2017/16, 2017) exigent des probabilités de défaut alignées sur le taux de défaut de long terme.
La pondération des classes gonfle les probabilités, corrigez avant de décider
Entraîner avec un poids supplémentaire sur les défauts fait croire au modèle que les défauts sont fréquents, il faut donc ramener ses sorties à l'échelle avant tout seuil.
Pondérer les positifs par , ou les dupliquer, revient à apprendre sur une population où la probabilité a priori du défaut est fois plus grande, sans changer les lois conditionnelles à chaque classe. Par la formule de Bayes, la cote a posteriori est multipliée par . En inversant, on retrouve la vraie probabilité. Pour une régression logistique, cela décale la constante de ; en pratique les pentes bougent un peu aussi, d'où une recalibration après la correction.
| Vraie probabilité | Cote | Cote × 49 | Probabilité affichée |
|---|---|---|---|
| 0,02 | 0,020 | 1,00 | 0,500 |
| 0,12 | 0,136 | 6,68 | 0,870 |
| 0,30 | 0,429 | 21,0 | 0,955 |
Un seuil de 12 % appliqué aux nombres affichés refuserait les trois dossiers, y compris celui à 2 % que la banque veut accepter. L'aller-retour vérifie la formule : 0,12 monte à 0,870, et 0,870 divisé par 49 moins 48 × 0,870 (soit 7,24) redonne 0,120. L'ordre est donc : corriger, recalibrer en validation, puis seulement appliquer le seuil. Le support présente l'oubli de cette correction comme le bogue le plus fréquent dans les notebooks de débutants.
Tirer le seuil de décision de coûts asymétriques
On refuse un dossier quand refuser coûte en moyenne moins qu'accepter, et le seuil qui en découle ne dépend que des deux coûts, pas du modèle.
Pour un dossier de probabilité de défaut calibrée , accepter fait perdre avec probabilité , refuser fait perdre avec probabilité . On refuse quand la seconde espérance est la plus petite. On développe, on regroupe les termes en , on divise par la somme des coûts, positive, et l'on obtient le seuil de décision (decision threshold). Le 0,5 par défaut de scikit-learn correspond au cas de coûts égaux, qu'on ne rencontre jamais en crédit.
L'exemple du support, hypothèses écrites
- Coûts. Un bon client refusé fait perdre 600 € de marge ; un défaut accepté sur un prêt de 10 000 € en fait perdre 4 500, soit une perte en cas de défaut de 45 % (la valeur de Bâle II en approche fondation pour une créance senior non garantie sur entreprise, prise comme simple repère).
- Seuil. 600 / 5 100 vaut environ 0,1176 : la banque refuse dès 12 % de risque environ, parce qu'un défaut coûte 7,5 fois un refus à tort.
- Indifférence. Au seuil, accepter coûte 0,1176 × 4 500 et refuser 0,8824 × 600, environ 529 € dans les deux cas.
- Trois dossiers. À 5 % de risque, accepter coûte 225 € contre 570 € pour refuser, on accepte ; à 30 %, 1 350 € contre 420 €, on refuse.
Si la calibration est douteuse, la version robuste minimise le coût attendu (expected cost) compté sur l'ensemble de validation, seuil par seuil. Quand les probabilités sont calibrées, remplacer chaque par montre que chaque terme de la somme est minimisé par la même règle : le minimum empirique doit donc tomber près de , et un grand écart signale à lui seul une mauvaise calibration.
| Seuil | FP | FN | Coût total |
|---|---|---|---|
| 1 (tout accepter) | 0 | 3 | 13 500 € |
| 0,50 | 1 | 1 | 5 100 € |
| 0,12 | 4 | 0 | 2 400 € |
| 0 (tout refuser) | 7 | 0 | 4 200 € |
Sur les 10 000 demandes, tout accepter coûte 200 × 4 500, soit 900 000 €, ce que paie la banque sans modèle, et tout refuser 9 800 × 600, soit 5,88 millions. Au seuil de coût, avec 800 faux positifs et 50 faux négatifs, la facture tombe à 705 000 € : le modèle économise environ 195 000 € pour 10 000 demandes. À 0,5, la courbe du support indique environ 870 000 €, presque « tout accepter », car avec une classe rare peu de dossiers dépassent un demi.
Remarque (Une décision, pas un réglage.). L'idée remonte à Neyman et Pearson (1933) et à la théorie de la décision de Wald ; Elkan (2001) a donné le seuil de coût pour l'apprentissage automatique, et scikit-learn 1.5 (mai 2024) a ajouté TunedThresholdClassifierCV. Deux banques avec le même modèle et des marges différentes ont deux seuils, et toutes deux ont raison. Les coûts vont dans la configuration, leur justification dans un journal écrit, révisable sans réentraîner. La séance 8 va plus loin avec la prédiction conforme.
Un dépôt de ML reproductible : graine, environnement, tests et CI
Un score publié dépend des données, du code, de la graine et des versions des logiciels, on fixe donc les quatre et une machine neutre relance tout à chaque envoi.
Une AUC de 0,78 ne veut rien dire seule. Si l'une des quatre entrées bouge sans qu'on le dise, le nombre bouge et personne ne sait pourquoi. La reproductibilité (reproducibility) consiste à fixer chacune : le CSV est haché en SHA-256 et l'empreinte conservée ; le découpage entraînement, validation et test est figé par une graine et contrôlé par sa propre empreinte ; le code vit dans des modules importables sous git, que les notebooks importent au lieu de les recopier ; une seule graine aléatoire (random seed) se trouve dans le fichier de configuration, à côté des coûts et du seuil ; l'environnement est un fichier de verrouillage (lockfile) plus une version de Python fixée dans un devcontainer.
- Fichier de verrouillage (lockfile). Une ligne « scikit-learn » sans version veut dire « la version du jour de l'installation » ; quelques mois plus tard, un défaut modifié peut déplacer l'AUC sans qu'une ligne de code ait changé. Le fichier fige les versions exactes et les empreintes des paquets, il est généré à partir d'un court fichier d'entrée, jamais édité à la main, et versionné.
- Cinq tests, en moins d'une minute. Un contrat de schéma sur les données entrantes (types, bornes, taux de valeurs manquantes), un découpage à l'empreinte attendue, une AUC égale à 1 sur des données séparables, des prédictions inchangées quand on permute les lignes, et un pipeline rechargé qui prédit comme celui entraîné à près. Un test est une propriété qui doit toujours tenir, pas « l'AUC a l'air bonne ».
- Une commande. La cible reproduce du Makefile contrôle l'empreinte des données, refait le découpage, entraîne le Pipeline sklearn (ajusté sur le pli d'entraînement seul, donc sans fuite par construction) et écrit le fichier de métriques. Deux exécutions doivent donner des fichiers identiques ; une différence trahit une graine oubliée.
- Intégration continue (continuous integration, CI). À chaque envoi et chaque pull request, une machine vierge installe le fichier de verrouillage, lance les tests et la reproduction, puis compare AUC et Brier à une référence versionnée, à 0,005 près. Un rouge est une information : soit le changement était voulu et la référence bouge avec une explication, soit on vient de trouver un bogue avant le comité.
- Branches et relecture. Personne ne pousse sur la branche principale. Une branche par tâche, une petite pull request, une liste de relecture (CI verte, un test pour le changement, rien du test dans le modèle, métriques et journal mis à jour quand un nombre bouge, lisible sans l'auteur) et une fusion par quelqu'un d'autre.
- Un journal des décisions. Chaque entrée donne la date, le choix, le contexte, l'alternative écartée avec le nombre qui l'a fait écarter, et la commande qui le reproduit. Par exemple : seuil 0,12 plutôt que 0,5, 705 k€ contre 870 k€ en validation. Un outil peut produire un modèle, il ne peut pas écrire l'histoire des hésitations de l'équipe.
La même logique traverse les séances précédentes du cours, des moindres carrés à la régression logistique et à sa régularisation : des modèles simples, faits proprement et expliqués. Les assistants d'IA sont bienvenus pour la plomberie, un workflow de CI ou un Makefile, à condition de le déclarer ; la démonstration du seuil et les choix de modélisation restent à l'équipe.
À retenir
- L'exactitude est une moyenne pondérée du rappel et de la spécificité, donc avec une classe rare elle mesure surtout la majorité.
- Le rappel et le taux de faux positifs décrivent le modèle, la précision dépend aussi de la rareté de la classe positive.
- L'AUC est la probabilité qu'un défaut soit mieux noté qu'un bon client, elle mesure un ordre, pas des probabilités, des seuils ni des coûts.
- La calibration est une qualité distincte, mesurée par la courbe de fiabilité et le score de Brier, et c'est elle que le superviseur bancaire lit d'abord.
- Avec des probabilités calibrées, on refuse quand la probabilité dépasse le coût d'un faux positif divisé par la somme des deux coûts : à 600 et 4 500 €, environ 0,12, pas 0,5.
- La pondération des classes multiplie les cotes, il faut corriger et recalibrer avant tout seuil.
- Fixer données, code, graine et environnement, tester des propriétés, tout relancer en une commande et laisser la CI comparer les métriques à chaque envoi.
Glossaire
- matrice de confusion (confusion matrix)
- Le tableau 2 × 2 des vrais positifs, faux positifs, faux négatifs et vrais négatifs à un seuil donné.
- précision (precision)
- Part des vrais défauts parmi les refus.
- rappel (recall)
- Part des vrais défauts effectivement attrapés.
- taux de faux positifs (false positive rate)
- Part des bons clients refusés à tort, abscisse de la courbe ROC.
- courbe ROC (ROC curve)
- Le rappel en fonction du taux de faux positifs sur tous les seuils, son aire est l'AUC.
- courbe précision-rappel (precision-recall curve)
- La précision en fonction du rappel sur tous les seuils, plus parlante que la ROC quand la classe positive est rare.
- courbe de fiabilité (reliability curve)
- Probabilité moyenne prédite contre fréquence observée, classe de score par classe de score, à comparer à la diagonale.
- score de Brier (Brier score)
- Écart quadratique moyen entre la probabilité prédite et l'issue 0 ou 1, égal à fiabilité moins résolution plus incertitude.
- seuil de décision (decision threshold)
- La probabilité au-dessus de laquelle on refuse, un rapport de coûts quand les probabilités sont calibrées.
- coût attendu (expected cost)
- Somme des pertes possibles pondérées par leur probabilité, la quantité que le seuil minimise.
- graine aléatoire (random seed)
- Le nombre qui fixe tous les tirages aléatoires (découpage, mélanges, initialisation) pour qu'une exécution se répète.
- fichier de verrouillage (lockfile)
- Fichier généré qui fige les versions exactes des paquets et leurs empreintes, pour reconstruire l'environnement à l'identique.
- intégration continue (continuous integration, CI)
- Relance automatique des tests et de la reproduction sur une machine vierge à chaque envoi ou pull request.
- reproductibilité (reproducibility)
- Une autre personne, avec les mêmes données, code, graine et environnement, obtient les mêmes chiffres.
Les autres fiches du cours
Un résumé public par deck, dans l'ordre du cours.
Précédent : Descente de gradient, ridge et lassoSuivant : Un modèle de référence défendable
- IntroductionHivers de l'IA, emploi et méthode
- OutilsKaggle, GitHub, Python : les outils
- Séance 1Cadrage de projet et moindres carrés
- Séance 2Vraisemblance et régression logistique
- Séance 3Descente de gradient, ridge et lasso
- Séance 4Seuil de décision et ML reproductible
- DevoirUn modèle de référence défendable
- Séance 5Noyaux, SVM et arbres de décision
- Séance 6Forêts, boosting, comparaison honnête
- Séance 7SHAP, équité, ACP et partitionnement
- DevoirUn modèle champion documenté
- Séance 8Réseaux de neurones, dérive, prédiction conforme
- DevoirUn projet de machine learning livré
- Séance 9Soutenir un projet de machine learning
- RéférenceProjet de score de défaut de crédit
- RéférenceRendements boursiers : XGBoost et sentiment
- RéférenceLe code Python de chaque modèle
- RéférenceDeep learning, l'essentiel
- RéférenceDonnées ouvertes et projets par secteur
- RéférenceManuel de l'expert data et IA
- RéférenceData engineering, SRE et cloud
- RéférencePanorama des modèles de machine learning
À propos de ces fiches
Écrites par l'enseignant à partir des slides du deck, comme un résumé public : les idées clés, les formules et un exemple calculé. Les exercices, leurs corrigés, les contrôles et la notation restent dans le deck, pour les élèves du cours.
Révision : .