Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 5 · Voir

Évaluer pour la clinique

Tu as plusieurs modèles de dépistage possibles (ton CNN, ResNet-18 en extraction, en fine-tuning). Sont-ils bons ? Rappel de J1 : répondre toujours « pneumonie » donne déjà 62,5 % de bonnes réponses sur le test (390 sur 624). Voici un deuxième défaut de l'accuracy : elle met toutes les erreurs dans le même sac.

Imagine l'usage : le modèle trie les radiographies, celles qu'il signale sont revues par un médecin, les autres non. Deux erreurs sont possibles. Manquer une pneumonie : l'enfant rentre chez lui, sans traitement. Donner une fausse alarme : un médecin regarde la radio et rassure la famille. Elles n'ont pas le même prix, mais chacune retire 1 / 624 à l'accuracy de test.

Pour calculer à la main, prenons huit radiographies de test avec la probabilité de pneumonie d'un modèle (exemple construit pour la séance, pas des sorties réelles). Le modèle donne une probabilité ; pour décider, on fixe un seuil : « pneumonie » si elle vaut au moins 0,5.

Radio12345678
Vraie réponsePPPPPNNN
Probabilité0,900,800,650,550,350,600,400,10
Seuil 0,5ouiouiouiouimanquéefausse alarmeouioui

P = pneumonie, N = normale. 5 pneumonies sur 8 (62,5 %, comme le test) ; 6 bonnes réponses sur 8 : 75 %.

Fais glisser le seuil sur les huit radios de la diapositive : la matrice de confusion et les trois taux se recalculent. Place-toi à 0,5 puis à 0,3 : même accuracy de 75 %, autres erreurs.

À toi de coder

La matrice de confusion à un seuil

Pourquoi : avant de parler de sensibilité, il faut ranger chaque réponse dans l'une des quatre cases. Positif = le modèle dit « pneumonie » (probabilité ≥ seuil) ; vrai ou faux = il a raison ou non. Complète matrice(probas, vraies, seuil) qui renvoie le quadruplet (vp, fn, fp, vn) pour les huit radios, puis calcule m05 (seuil 0,5) et m03 (seuil 0,3).

Ctrl/⌘+Entrée

Les trois cases à connaître, puis deux taux

Au seuil 0,5 : 4 vrais positifs (VP, pneumonies détectées), 1 faux négatif (FN, pneumonie manquée), 1 faux positif (FP, fausse alarme), 2 vrais négatifs (VN, enfants sains rassurés). Piège fréquent : « faux négatif » ne veut pas dire « enfant sain » ; c'est un enfant malade que le modèle a déclaré négatif, donc à tort. Accuracy : (4 + 2) / 8 = 75 %.

Deux taux, un par type d'erreur, que chacun se lit sur une seule ligne de la matrice :

  • Sensibilité = VP / (VP + FN) = 4 / 5 = 80 % : parmi les enfants malades, la part détectée (aussi appelée rappel, recall).
  • Spécificité = VN / (VN + FP) = 2 / 3 ≈ 67 % : parmi les enfants sains, la part rassurée à juste titre.

« Toujours pneumonie » sur ces 8 radios : sensibilité 5 / 5 = 100 %, spécificité 0 / 3 = 0 %. Son accuracy de 62,5 % cachait tout.

Le seuil 0,5 n'a rien d'obligatoire

À 0,3 : 5 détectées, 0 manquée, 2 fausses alarmes, 1 rassurée : sensibilité 5 / 5 = 100 %, spécificité 1 / 3 ≈ 33 %. L'accuracy reste 6 / 8 = 75 % : même accuracy, autres erreurs. Baisser le seuil, c'est moins de pneumonies manquées et plus de fausses alarmes ; le monter fait l'inverse. Le modèle n'a pas changé (mêmes huit probabilités) : on ne réentraîne rien, le seuil s'applique après coup.

À toi de coder

Sensibilité, spécificité, précision

Pourquoi : les trois taux répondent à trois questions différentes et ne se calculent pas sur la même ligne ou colonne de la matrice. Complète taux(vp, fn, fp, vn) qui renvoie (sensibilite, specificite, precision) : sensibilité = VP / (VP + FN), spécificité = VN / (VN + FP), précision = VP / (VP + FP) (la part de vraies pneumonies parmi les alarmes). Si le modèle ne donne aucune alarme (VP + FP = 0), renvoie 0.0 pour la précision plutôt que de diviser par zéro. Calcule t05 pour la matrice (4, 1, 1, 2) et t03 pour (5, 0, 2, 1).

Ctrl/⌘+Entrée

Choisir le seuil selon le prix des erreurs

Hypothèse posée clairement : une pneumonie manquée coûte 10 fois plus qu'une fausse alarme. Coût = 10 × pneumonies manquées + fausses alarmes ; on garde le seuil le moins coûteux.

SeuilManquéesFausses alarmesCoût
0,73010 × 3 + 0 = 30
0,51110 × 1 + 1 = 11
0,30210 × 0 + 2 = 2

On garde 0,3. Le rapport 10 pour 1 est une décision médicale, pas informatique : avec 1 pour 1, les coûts seraient 3, 2 et 2 (0,5 et 0,3 à égalité) ; si une fausse alarme coûtait plus cher qu'une pneumonie manquée, on monterait le seuil. Et le seuil est un réglage : on le choisit sur la validation (les 524 radiographies, tous les seuils de 0,01 en 0,01 dans le notebook), puis on mesure sensibilité et spécificité sur le test (624 radiographies), une seule fois. Choisi sur le test, il donnerait des taux trop optimistes, comme l'examen passé 30 fois.

Change le prix d'une pneumonie manquée : le seuil le moins coûteux se déplace. À 10 tu retrouves 30, 11 et 2 pour 0,7, 0,5 et 0,3 ; à 1 les seuils 0,5 et 0,3 sont à égalité. (Les seuils 0,9 et 0,1 sont ajoutés pour l'exploration.)

À toi de coder

Choisir le seuil le moins coûteux

Pourquoi : transformer « 10 fois plus grave » en une décision chiffrée, reproductible, et voir que le choix dépend du rapport posé par les médecins. La fonction manquees_fausses(seuil) est fournie : elle renvoie (fn, fp) pour les huit radios. Écris cout(fn, fp, rapport) = rapport × fn + fp, calcule couts pour les seuils 0,7 ; 0,5 ; 0,3 avec un rapport de 10, et garde dans meilleur le seuil de plus petit coût. Refais pour un rapport de 1 (couts_1, meilleur_1) ; en cas d'égalité, garde le premier seuil de la liste.

Ctrl/⌘+Entrée

Quand le modèle donne l'alarme, a-t-il raison ?

Troisième taux, vu du côté de la famille qui reçoit une alarme : la précision = VP / (VP + FP), la part de vraies pneumonies parmi les alarmes (en médecine : la valeur prédictive positive). Seuil 0,5 : 5 alarmes (radios 1, 2, 3, 4 et 6), 4 justes : 80 %. Seuil 0,3 : 7 alarmes, 5 justes : 5 / 7 ≈ 71 %. Baisser le seuil donne plus d'alarmes, et une plus grande part de fausses.

Ne la confonds pas avec la sensibilité : même numérateur (VP), mais la sensibilité part des malades (sur 5 malades, combien détectés ?), la précision part des alarmes. Et la précision dépend de la proportion de malades parmi les enfants testés. Même test, sensibilité et spécificité de 90 % : sur 1 000 enfants dont 10 malades, 9 détectés et 99 fausses alarmes, précision 9 / 108 ≈ 8 % ; sur les 624 radios de test, dont 390 pneumonies, 351 détectées et environ 23 fausses alarmes, précision 351 / 374 ≈ 94 %. Notre jeu de données compte beaucoup de malades : en dépistage dans la population générale, la précision serait bien plus basse.

Dernier réflexe : regarder les erreurs une par une. On affiche les pneumonies manquées et les fausses alarmes (images floues ? mal cadrées ? un appareil sur le thorax ?). Rappel de J1 : en 2018, un réseau reconnaissait l'hôpital d'origine d'une radiographie avec 99,95 % de réussite pour l'un d'eux, notamment grâce à un jeton métallique posé par les manipulateurs ; comme la proportion de pneumonies variait d'un hôpital à l'autre, reconnaître l'hôpital aidait à deviner la maladie (Zech et al., 2018). Un modèle peut avoir une bonne accuracy pour de mauvaises raisons ; les cartes de chaleur (Grad-CAM) colorent les zones qui pèsent dans la décision, une piste du projet de J5.

Garde 90 % et 90 % et passe de « 1 000 enfants, 10 malades » à « test : 624, dont 390 pneumonies » : la précision passe d'environ 8 % à 94 %. Le test à 90 % de sensibilité et de spécificité est un exemple de la diapositive, pas une mesure de nos modèles.

À toi de coder

La précision dépend de la part de malades

Pourquoi : un même test, bon sur le papier, peut donner presque autant de fausses alarmes que de vraies selon la population dépistée. Écris precision(sens, spec, n_malades, n_sains) : les vrais positifs sont sens × n_malades, les faux positifs (1 − spec) × n_sains, la précision est VP / (VP + FP). Calcule p_pop pour sens = spec = 0,9 sur 1 000 enfants dont 10 malades (donc 990 sains) et p_test sur les 624 radios de test (390 pneumonies, donc 234 normales).

Ctrl/⌘+Entrée