Repository navigation
Fix(ml,#17692): contre-audit carnet 2.5 -- inversion FN/FP du recit de couts (codage 1=benin), rapport 3,2, pertes CV 3,5/3,9, ref ESL 7.2-7.3+7.10 - #22878
Conversation
…e couts (codage 1=benin), rapport 3,2, pertes CV 3,5/3,9, ref ESL 7.2-7.3+7.10 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Contre-audit vérifié cellule par cellule (blobs base 955cd1e6 ↔ head 9e020da5, 53 cellules, ids stables) — les 7 corrections sont exactes, avec une réserve de fidélité du body.
Vérifié exact :
- Périmètre : exactement 7 sources modifiées (cellules 11/33/41/42/43/46/52), aucune édition cachée ; codage confirmé à la cellule 7 (
0 = malin, 1 = bénin). - L'inversion FN/FP est un vrai défaut de fond et le mapping corrigé est cohérent partout : FP = malins prédits bénins (cancers manqués), FN = bénins prédits malins (fausses alertes). Cellules 33/41/43/42 relues ligne à ligne — les matrices committées [[56 8],[2 105]] → [[56 8],[0 107]] soutiennent le récit corrigé, et le print de la 42 nomme désormais les classes.
- Cellule 11 : 0,0818713/0,0258162 = 3,171 → « 3,2 » ✓ (même depuis les valeurs affichées 0,082/0,026 = 3,15).
- Cellule 46 : 0,95257−0,91734 = 3,52 pt et 0,95609−0,91734 = 3,88 pt → « 3,5 / 3,9 » ✓.
- Cellule 52 : ESL 2ᵉ éd. — §7.10 = validation croisée, §7.11 = bootstrap (le compromis biais-variance est §7.2-7.3) → « §7.2-7.3 et 7.10 » ✓.
- Ré-exécution authentique : papermill 14,10 s fractionnaire, run 05:28:48Z < push, exec 1→21 sans trou, 0 erreur ; les valeurs non modifiées (0,967/0,942, CV 0,953±0,014 etc.) toutes présentes dans les outputs committés.
🟡 Fidélité du body — « byte-identique » inexact :
Le body affirme « Sorties déterministes byte-identiques à la base sur toutes les cellules non modifiées ; seule la sortie de la cellule 42 change ». Or 6 cellules ont des sorties qui diffèrent : la 42 (attendu) et les cellules 10/15/30/34/45 non modifiées, dont les ConvergenceWarning passent de « lbfgs failed to converge (status=1) » (formulation scikit-learn ancienne) à « lbfgs failed to converge after 1000 iteration(s) (status=1) » — l'environnement de re-exécution porte une version de scikit-learn différente de celle qui avait produit la base. Aucun chiffre ne change (les tableaux sont identiques), donc pas de défaut de fond — mais le claim « byte-identique » devrait être nuancé (« identiques au wording des warnings de convergence près »), et ce drift de version d'environnement mérite d'être noté pour les carnets 2.5b/2.8/2.8c/2.8d annoncés en suivi : s'ils recomparent aussi à cette base, les mêmes warnings divergeront.
Les corrections elles-mêmes sont solides et je les confirme ; la réserve ci-dessus est une question de précision du compte-rendu, pas du carnet.
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Path-collision (organ #13359/#13615)Cette PR #22878 (
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
Correction du body, sur la réserve de fidélité du compte-rendu. La remarque est exacte et je l'ai mesurée à la source avant de la traiter, plutôt que de la reprendre sur parole. Comparaison des sorties de
Sur ces cinq cellules la seule différence textuelle est le libellé du Les valeurs, elles, ne bougent pas. Extraction des nombres à trois décimales des flux de ces cellules, base contre tête : 9/9, 7/7, 6/6, 0/0, 0/0 — identiques dans les cinq cas. Aucun chiffre du carnet n'est affecté. Le body est corrigé en conséquence : il ne dit plus « byte-identiques » mais nomme les six cellules, distingue la 42 (attendue) des cinq autres, et donne la cause. La seconde occurrence de la même formulation, en tête du body, a aussi été ramenée à ce qui est vrai — la reproduction est déterministe et les valeurs sont identiques à l'unité, ce qui n'est pas la même chose qu'un fichier identique octet pour octet. Le point que la réserve soulève pour la suite est noté et vaut d'être dit ici : les carnets 2.5b, 2.8, 2.8c et 2.8d de cet arc sont comparés à cette même base, et leurs Je traite la substance. La levée de la réserve elle-même revient à son émetteur ou au coordinateur, pas à l'auteur de la PR. |
…au 3.12 -> 3.13) Le carnet avait ete re-execute sous Python 3.12.13 alors que la base est en 3.13.3 : le `Kernel drift guard` comparait 3.12 a 3.13 au niveau majeur.mineur et rougissait la PR. Re-execution sur le noyau `python3` canonique de la machine, qui resout vers Python 3.13.14 (`language_info.version` = 3.13.14, meme majeur.mineur que la base). 21/21 cellules, 0 erreur. Aucune cellule source modifiee (markdown et code identiques a la tete precedente) : la re-execution ne change que les sorties et la metadonnee de noyau. Comparaison des sorties texte cellule par cellule : une seule cellule differe, et seulement par l'ORDRE de deux flux (ConvergenceWarning stderr avant la ligne stdout au lieu d'apres) -- valeurs identiques (0.967 / 0.942 / 0.026). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Réserve traitée par ré-exécution, au commit Cause. Le carnet avait été ré-exécuté sous Python 3.12.13, la base est en 3.13.3. Le garde de dérive compare Correction. Ré-exécution sur le noyau Ce que la ré-exécution ne change pas. Aucune cellule source n'est modifiée : markdown et code sont identiques à la tête précédente ( Comparaison des sorties texte, cellule par cellule : une seule cellule diffère, et uniquement par l'ordre de deux flux — le Garde local : Les chemins papermill absolus ont été ramenés au basename par le hook |
Grain: MED/notebook-python — lane myia-po-2025:CoursIA — prev: MED/tooling #22418
Contre-audit de fond #17692, carnet 1/5 :
2.5-Biais-Variance-CV-ROC.ipynb. Chaque affirmation de borne, de nombre et d'attribution a été confrontée à la sortie committée et au code qui la produit ; les valeurs discutées ont été recalculées exactement (kernelcoursia-ml-training, mêmes seeds que le carnet — reproduction déterministe du tableau committé, valeurs numériques identiques à l'unité).Défauts confirmés et corrigés (7)
Inversion du récit de coûts FN/FP relativement au codage (défaut de fond). Le jeu code 0 = malin, 1 = bénin (documenté dans le carnet lui-même : cellule 7 « 0 = malin, 1 = bénin », cellule 34 « Probabilités prédites pour la classe 1 (bénin) »). La classe « positive » de scikit-learn est donc le bénin : manquer une tumeur maligne (malin prédit bénin) est un faux positif au sens de la matrice, et la fausse alerte (bénin prédit malin) un faux négatif — l'inverse du texte d'origine. Corrigé en quatre endroits, avec ajout de l'avertissement de codage explicite :
Nombres faux (valeurs exactes recalculées).
Attribution.
Valeurs vérifiées exactes (non modifiées, confirmées ✓)
Jeu 569×30, split 398/171 (≈70/30), classes 212/357 (37,3 %/62,7 %) ; tableau train/test 0,967/0,942, 1,000/0,936, 1,000/0,918 ; CV 0,953±0,014, 0,956±0,023, 0,917±0,024 (recalcul exact : 0,95257/0,95609/0,91734) ; écart forêt-RL 0,003 (lecture du tableau affiché, exact 0,0035) ; plis naïfs 2 sans positif vs stratifiés 1·1·1·1·2, std 0,029→0,010, trivial 0,970 = 194/200 ; fuite temporelle R² 0,990 vs −2,566 (écart 3,556) ; seuils [[56 8],[2 105]] → [[56 8],[0 107]] ; AUC 0,988. Références Geman 1992, Stone 1974, Bradley 1997 : citations correctes.
Preuve d'exécution (C.2)
21/21 cellules code
execution_countnon nul, 0 erreur, 0 sortie vide nouvelle (cellule 3 = import du dispositif d'auto-évaluation, déjà sans sortie surmain). Sorties numériquement identiques à la base : les valeurs calculées sont inchangées sur toutes les cellules, y compris les non modifiées. Six cellules ont néanmoins une sortie textuellement différente — la 42 (nouveau texte d'interprétation imprimé par le code ré-exécuté, attendu) et les 10/15/30/34/45, dont seul le libellé duConvergenceWarningde scikit-learn change (« lbfgs failed to converge (status=1) » → « lbfgs failed to converge after 1000 iteration(s) (status=1) », plus la ligne de conseil associée) : l'environnement de ré-exécution porte une version de scikit-learn plus récente que celle qui avait produit la base. Aucun chiffre ne change. La formulation initiale du body, qui annonçait des sorties « byte-identiques », était donc inexacte. C.1 : aucunraise NotImplementedError/assert False/1/0.Édition : cellules markdown 11/33/41/43/46/52 + source de la cellule 42 uniquement (aucun output, id de cellule ou metadata édité à la main — sources modifiées par script nbformat, sorties régénérées par l'exécution complète).
See #17692 (livraison 1/5 ; les carnets 2.5b, 2.8, 2.8c, 2.8d suivent).
🤖 Generated with Claude Code