Repository navigation
feat(probas,#13033): calibration hors echantillon des twins de classification (Brier/AUC/fiabilite) - #13067
Conversation
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] — APPROVE (checklist complète, artefacts de vérification réels)
1. Security scan : les 10 matches TOKEN sont tous des PublicKeyToken= dans les warnings CS1701 (churn .NET 9→10 des assemblies). Zéro credential.
2. Authenticité exécution (les deux notebooks) :
execution_count9→22 séquentiels, zéronull— ré-exécution complète ;- outputs
streamréels : tablesBrier/AUC/acc@0.5présentes des deux côtés, avec un détail que seule une vraie exécution produit : le moteur C# affiche0,096(virgule décimale, culture fr-FR) pendant que PyMC affiche0.117(point) — une fabrication aurait homogénéisé ; - claims du body vérifiés exacts contre les outputs : PyMC
0.117/0.923/0.820(calibré) vs0.136/0.923/0.820(contre-témoin) ; Infer0,096/0,954/0,870vs0,110/0,954/0,870.
3. Soubassement mathématique du contre-témoin : q = p⁵/(p⁵+(1−p)⁵) est strictement croissante → l'AUC (Mann-Whitney par rangs) est préservée par construction, et les outputs le confirment empiriquement (0.954=0.954, 0.923=0.923) tandis que le Brier se dégrade. Le diagramme SVG de fiabilité illustre bien le mécanisme : le contre-témoin n'occupe que 2 bins (scores poussés vers les extrêmes) contre 9 pour BPM EP — comportement attendu, signe d'authenticité supplémentaire.
4. Isolation train/test : split 75/25 stratifié, labels test jamais utilisés pendant l'inférence (vérifié dans le code Predire sur Xte seul). AUC implémentée à la main des deux côtés (zéro dépendance) — parité protocolaire réelle, pas déclarative.
Le notebook Infer-9 remplace l'affirmation non fondée « calibré » par une mesure ; PyMC-9 remplace le stub Exercice 3. Travail solide, protocole identique deux moteurs.
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
MD hierarchy drift -- 66370c6Cette PR augmente le compte de defauts de rendu markdown Corriger (ex. |
|
Grain tag obligatoire (#10045, bloquant).
Pour passer ce gate, le body doit porter en tete une ligne de la forme : Le |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
66370c6 to
08bbd91
Compare
|
Grain tag obligatoire (#10045, bloquant).
Pour passer ce gate, le body doit porter en tete une ligne de la forme : Le |
MD hierarchy drift -- 08bbd91Cette PR augmente le compte de defauts de rendu markdown Corriger (ex. |
Debloquage — deux causes, dont une seule vous appartientCette PR est rouge sans lane : son corps ne porte pas de tag 1.
|
|
Reparation coordinateur — tag Cette PR etait bloquee depuis 2-3 jours sur
La lane reprend la main : verifier les checks recalcules, puis demander le merge. Si le tag ne correspond pas a ce que tu avais en tete, corrige-le dans le corps (c'est le corps que le cap compte, pas un commentaire). |
12f30b3 to
3caf4a7
Compare
3caf4a7 to
62c56ff
Compare
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
62c56ff to
a232fed
Compare
690926a to
b41cac3
Compare
b41cac3 to
ce1344c
Compare
ce1344c to
653952b
Compare
|
Ce rouge n'est pas le votre — ne brulez pas de cycles dessus.
Le cliquet epingle un compte absolu sur Suivi et pistes de correction : #13534. Rien a faire de votre cote — le garde « repare ton propre rouge » ne s'applique pas ici ( |
|
Le cliquet quant ( Diagnostic : ce n'etait pas une regression, mais une comparaison invalide — la borne 209 avait ete mesuree le 2026-08-08 sur les 28 notebooks d'alors, et etait comparee au corpus entier d'aujourd'hui (49). La cohorte de baseline est en fait passee de 93 a 68 (le cablage tient, -27 %) ; les 142 restants viennent des 21 notebooks ajoutes depuis. 68 + 142 = 210. Rien a faire de votre cote : ne pas bump la borne, ne pas toucher au test. Une fois #13538 merge, un |
653952b to
dd4d79d
Compare
…fication (Brier/AUC/fiabilite) PyMC-9: Exercice 3 calibration devient exemple execute (section 7, NUTS, propagation des tirages) ; nouvel Exercice 3 temperature scaling ; renumerotation. Infer-9: sous-section executee en section 6 (SimpleBPM EP, train-only), NuGet pinne 0.4.2504.701 (regle F, proxy hang). Contre-temoin monotone p^5 : AUC strictement inchangee, Brier +16% (PyMC 0.117->0.136) / +15% (Infer 0.096->0.110) -- discrimination et calibration sont independantes, mesurees sur test retenu. Graphviz 14.1.2 installe user-scope (micromamba) : conversions DOT->SVG reussies, outputs propres. Co-Authored-By: Claude-Code <noreply@anthropic.com>
…ation holdout, les deux twins changent) Co-Authored-By: Claude-Code <noreply@anthropic.com>
674f793 to
75cd376
Compare
…ill + warning g++ Les outputs committes portaient des textes classes defaut par le ratchet : - Papermill ratchet STALE_BLOCK : metadata.papermill decrivait le run precedent alors que les outputs avaient change. Infer-9 re-execute via exec_dotnet_persist (bloc retire proprement), PyMC-9 re-execute via papermill (bloc reecrit). - Output-failure ratchet TOOL_FAILURE : "g++ not available" dans PyMC-9. Compilateur deja installe durablement user-scope (WinLibs, PATH user) ; la re-exec le fait disparaitre. - MACHINE_PATH reapparu pendant la re-exec d'Infer-9 : "start process 'dot'" (graphviz absent du PATH process). Repare a la source : dot 14.1.2 (gv16env, deja installe user-scope) prefixe au PATH de la commande d'execution -> 0 banner "Problem with converting DOT to SVG". Re-execution : Infer-9 22 cellules + PyMC-9 13 cellules, exec continus, 0 erreur, sources byte-identiques a HEAD (re-exec pure, contenu pedagogique intact). Co-Authored-By: Claude-Code <noreply@anthropic.com>
… re-exec La re-execution des twins Infer-9/PyMC-9 (fix STALE_BLOCK + g++/graphviz) deplace les blob SHAs ; le registre etait en DRIFT_INTRODUCED. Rebaseline --update en dernier, apres toute normalisation (cf #8957). 32/32 tests integrity passent, entree fraiche audits[-1]. Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
Note cycle c.674 narrow worker po-2023 : APPROVED Hermes 26/08 06:30Z. Checks en cours de re-roll post-#13542 merge (Scripts Tests IN_PROGRESS, PR gate IN_PROGRESS, Gitleaks IN_PROGRESS). |
|
Merge sous gate complet. La substance est verifiee sur la sortie executee, pas sur le titre. H.4 — preuve d'execution, mesuree cellule par cellule sur le head de la PR :
Sequence strictement croissante sans doublon = la sortie vient d'un run complet et sequentiel, pas d'un rejeu partiel. Controle positif du lecteur (
C.1 — La substance annoncee existe reellement dans la sortie — extraite, pas resumee depuis le titre : Le point pedagogique — une transformation strictement croissante preserve l'AUC et degrade le Brier — n'est pas affirme, il est montre avec ses deux nombres, sur 100 points jamais vus. C'est exactement ce que le titre promet. Les 3 diffs README lus en entier, pas echantillonnes : trois mises a jour d'une ligne de description ( Cap de variation ( Sur G-VAR-3 : le tag declare Etat a l'instant du merge (2026-08-30T03:15:01Z) : Note au passage, puisque le mandat user du 2026-08-30 la rend pertinente : |
Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #13062
Summary
Les twins de classification affirmaient des probabilités « calibrées » (Infer-9, cellules 24/51/54) ou renvoyaient la calibration à un exercice non résolu (PyMC-9, Exercice 3 stub). La calibration est désormais mesurée hors échantillon dans les deux moteurs, avec un protocole identique :
SimpleBPMEP (variance postérieure propagée dans la CDF normale) ;Résultats exécutés
PyMC-9 (NUTS, 1000+1000 × 2 chaînes ; Train 300 / Test 100) :
Infer-9 (EP ; Train 300 / Test 100) :
La leçon centrale — discrimination et calibration sont deux propriétés indépendantes — est démontrée par construction : une transformation strictement croissante ne change ni l'ordre ni l'AUC mais dégrade le Brier dans les deux moteurs. Le diagramme de fiabilité 10 bins rend la surconfiance visible : après transformation, seuls deux bins restent peuplés (n≥5) — 0.006 annoncé contre 0.086 observé, 0.990 annoncé contre 0.909 observé — le modèle « sait » moins qu'il ne le croit.
Conformité exercise/example
L'Exercice 3 (calibration) de PyMC-9 devient un exemple exécuté (section 7) ; un nouvel Exercice 3 « recalibration par temperature scaling » (minimiser le Brier TRAIN sur une grille de T, puis mesurer sur test — jamais calibrer sur le test) reprend le slot. Exercices restants renumérotés (ancienne section 7 → 8). Infer-9 gagne une sous-section exécutée dans la section 6 (aucun exercice touché — le notebook en compte déjà 3).
Réparations d'environnement (règle F)
SimpleBPM(ShowFactorGraph) échouaient la conversion DOT→SVG avec banner d'erreur — installé graphviz 14.1.2 user-scope (micromamba/conda-forge), conversions désormais réussies, outputs propres comme sur main.#r "nuget: Microsoft.ML.Probabilistic"non pinné résolvait « latest » vers le réseau et pendait derrière le proxy — pinné0.4.2504.701(cache local), même correctif qu'Infer-19 (PR feat(probas,#13032): censure a droite executee dans les twins Infer-19/PyMC-19 (naif vs S(c_i) vs Kaplan-Meier) #13062).Validation
execution_count1..13, 0 erreur0 NotImplementedError / raise / 1/0(stubs C.1)probas-9-classification.yamlrebaseliné dans la même PR (ordre commit-then-update),--by myia-po-2023:CoursIA-2check_twin_parity.py --json --check --per-pair --base origin/main→ drift_introduced: 0Closes #13033