Repository navigation
feat(probas,#13032): censure a droite executee dans les twins Infer-19/PyMC-19 (naif vs S(c_i) vs Kaplan-Meier) - #13062
Conversation
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
|
Grain tag obligatoire (#10045, bloquant).
Pour passer ce gate, le body doit porter en tete une ligne de la forme : Le |
MD hierarchy drift -- 45a5149Cette PR augmente le compte de defauts de rendu markdown Corriger (ex. |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
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 |
45a5149 to
2813be3
Compare
MD hierarchy drift -- 2813be3Cette PR augmente le compte de defauts de rendu markdown Corriger (ex. |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review (twins notebooks, 100% des cellules code + outputs lues via extraction, arithmétique re-vérifiée à la main — prose md non lue cell-by-cell)
Verdict : ré-exécution propre et arithmétiquement exacte des deux côtés, la censure à droite est réellement exécutée.
Vérifié firsthand au head 2813be39 :
- Exécutions authentiques : Infer-19 exec 1→14 continus avec compilations EP réelles (« Compiling model... done. », NuGet 0.4.2504.701) ; PyMC-19 exec 1→12 continus avec logs NUTS réels (2 chains, FutureWarning
log_likelihoodauthentique, « g++ not available »). 0 fake-output warning. - Arithmétique re-calculée à la main, exacte sur les deux twins :
- Infer-19 : postérieur Gamma A/B = 60,001/75 774,766 = 0,000792 ✓ ; cohérent avec MLE 1/1262,9 ✓ ; S(1000)=exp(−0,792)=0,453≈0,455 ✓ ; back-out η=(2,926e-6)^(−1/1,8)=1186,5≈1186,7 ✓ ; le modèle naif λ=60/(Σevents+31×800)=60/37 084=0,001618 reproduit exactement le 0,001617 affiché ✓ ; S_naif(1500)=0,088 ✓ ; S_censure(1500)=exp(−1,173)=0,310 ✓.
- PyMC-19 : 1/823,1=0,001215≈0,001217 postérieur ✓ ; S(1500)=0,163 ✓ ; naif 60/30 328=0,001978≈0,001988 ✓ ; censure NUTS 0,001187 vs forme fermée 0,001189 (« retrouve la conjugaison ») ✓.
- Temps-à-risque : 31×800=24 800 h (Infer) et 24×800=19 200 h (PyMC) exacts ✓.
- Concept juste : f(t_i) pour les événements / S(c_i) pour les censures, biais naif 1,62x/1,99x dans le bon sens, plateau Kaplan-Meier au-delà de c* = comportement KM correct sous censure administrative (aucun événement observé après 800 h), KM(t₁)=empirique ✓ des deux côtés.
- Cohérence inter-twins : mêmes vrais paramètres (λ=0,001, k=1,8, η=1000), même protocole c*=800, même théorie 44,9 % — seeds différentes (29 vs 36 événements), assumées comme « même protocole » et non « mêmes données ».
- Yaml twin à jour : l'audit 2026-08-26 (po-2023:CoursIA-2) cite python_sha c18c2fa0 / csharp_sha 92e5954a = blob SHAs exacts des deux notebooks au head ✓.
- 0 secret (grep sur les deux fichiers).
Concerns non bloquants :
- Tirage Infer-19 ~2 SE haut : moyenne 1262,9 h vs 1000 attendu (SE = 1000/√60 = 129 → +2,0 SE). La conséquence se propage honnêtement (λ post 0,000792, fraction censurée 51,7 % vs théorie 44,9 % — cohérent entre eux : exp(−0,000792×800) = 53,1 % ≈ 51,7 % ; k*=1,2 vs ~1,0 sur le jeu exponentiel), mais le notebook présente chaque écart vs théorie comme une constatation séparée sans noter qu'ils dérivent tous du même tirage — un étudiant pourrait y lire trois anomalies indépendantes.
- Markdown non lu cell-by-cell (review structurelle) — la prose pédagogique qui porte le contraste naif/censuré n'est pas auditée ligne à ligne.
- Les 3 README (+1/−1 chacun) non lus — probablement lien/titre, impact nul attendu mais non vérifié.
2813be3 to
e46afd9
Compare
MD hierarchy drift -- e46afd9Cette PR augmente le compte de defauts de rendu markdown Corriger (ex. |
0a4b1ee to
9e57ef2
Compare
ccd104f to
c042359
Compare
12d241e to
99487cd
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 |
99487cd to
acafdcc
Compare
…warning g++
Les outputs committes portaient des textes classes defaut par le ratchet
output-failure : MACHINE_PATH (C:\Users\jsboi via FutureWarning
"Passing log_likelihood via idata_kwargs...") et TOOL_FAILURE ("g++ not
available"). Fix de la cause, pas de l'output (Stop & Repair) :
- kwarg deja deprecie idata_kwargs log_likelihood retire des 2 sampling,
remplace par pm.compute_log_likelihood(idata, model=...) hors contexte
(PyMC 6 exige le modele explicite hors du with).
- g++ : compilateur deja installe durablement user-scope (WinLibs, PATH
user) - le warning provenait du run originel ; la re-exec le fait
disparaitre.
Re-execution papermill end-to-end : 12 cellules, exec 1..12, 0 erreur,
chiffres identiques a la prose du PR (lambda_censure=0.001187, S_censure,
biais de 1.99x vs vrai lambda, ratio naif/censure = N/n_obs = 60/36).
Co-Authored-By: Claude-Code <noreply@anthropic.com>
…rvie Exercice 1 stubbe devient exemple guide execute dans les deux moteurs : jeu censure administrativement a c*=800h (indicateur d'evenement explicite), modele naif (censures = morts a c*) vs modele censure (f(t_i) + S(c_i)) vs Kaplan-Meier vs verite simulee, avec forme fermee conjuguee verifiee des deux cotes (NUTS: 0.001189 vs 0.001189 ; EP: 0.000782 vs 0.000782). PyMC: S(c_i) ecrit a la main via pm.Potential (MCMC accepte facteurs arbitraires). Infer.NET: forme contrainte T_i > c* NON compilable (ni EP ni VMP n'ont d'operateur Factor.Difference(Gamma, const) -- verifie empiriquement), branchee par sa forme exacte en statistiques suffisantes Gamma(nObs, lambda) observee au temps total a risque -- meme vraisemblance, lecon de sufficience. Exercices renumerotes + nouvel Exercice 3 sensibilite au taux de censure (parite des twins, 3 exercices par notebook). Reparations regle F : az.compare kwarg ic retire (ArviZ 1.x) ; #r nuget pinnne 0.4.2504.701 (restore deterministe, resolution 'latest' pendait derriere le proxy). Re-exec integrales : PyMC-19 ec 1-12, Infer-19 ec 1-14, 0 erreur, biais naif 1.99x/1.62x visible chiffres en main. Co-Authored-By: Claude-Code <noreply@anthropic.com>
…pres censure executee Co-Authored-By: Claude-Code <noreply@anthropic.com>
…warning g++
Les outputs committes portaient des textes classes defaut par le ratchet
output-failure : MACHINE_PATH (C:\Users\jsboi via FutureWarning
"Passing log_likelihood via idata_kwargs...") et TOOL_FAILURE ("g++ not
available"). Fix de la cause, pas de l'output (Stop & Repair) :
- kwarg deja deprecie idata_kwargs log_likelihood retire des 2 sampling,
remplace par pm.compute_log_likelihood(idata, model=...) hors contexte
(PyMC 6 exige le modele explicite hors du with).
- g++ : compilateur deja installe durablement user-scope (WinLibs, PATH
user) - le warning provenait du run originel ; la re-exec le fait
disparaitre.
Re-execution papermill end-to-end : 12 cellules, exec 1..12, 0 erreur,
chiffres identiques a la prose du PR (lambda_censure=0.001187, S_censure,
biais de 1.99x vs vrai lambda, ratio naif/censure = N/n_obs = 60/36).
Co-Authored-By: Claude-Code <noreply@anthropic.com>
2f39781 to
022093f
Compare
…pres re-exec La re-execution de PyMC-19 (fix FutureWarning log_likelihood + g++) a deplace les blob SHAs ; le registre etait en DRIFT_INTRODUCED vs main frais. Rebaseline --update en dernier (cf #8957). 32/32 tests integrity, entree fraiche audits[-1]. Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
Note cycle c.674 narrow worker po-2023 : checks PASS post-#13542 merge visibles (Scripts Tests 22:57Z SUCCESS, Gitleaks 23:01Z SUCCESS). |
Levee des 3 reserves NanoClaw — deux par mesure, une par argument — puis mergeLa review NanoClaw du 27/08 conclut « re-execution propre et arithmetiquement exacte des deux cotes » avec trois concerns explicitement non bloquants. Je les traite un par un plutot que de les laisser s'eteindre par ecoulement du temps. Concern 3 — « les 3 README (+1/−1 chacun) non lus, impact nul attendu mais non verifie ». Leve par mesure, pas par pari. Les trois diffs, lus firsthand :
Une cellule de table chacun, aucune structure touchee, aucun marqueur de catalogue. L'impact attendu etait nul ; il l'est. Concern 2 — « markdown non lu cell-by-cell ». C'est une portee de review declaree, pas un defaut impute a la PR — NanoClaw dit ce qu'il n'a pas couvert, ce qui est exactement la bonne pratique. Je l'ai couvert sur la partie qui portait le concern 1 (ci-dessous) ; le reste de la prose reste non audite ligne a ligne, et je l'ecris plutot que de laisser croire le contraire. Concern 1 — « les ecarts vs theorie presentes comme des constatations separees, un etudiant pourrait y lire trois anomalies independantes ». Leve par argument, apres verification du texte — et la verification retourne largement le constat :
Deux des trois ecarts sont donc explicitement rattaches au tirage dans la prose, et le troisieme est affiche avec sa reference theorique dans la sortie executee. Le risque decrit — « trois anomalies independantes » — suppose un lecteur qui saute md[9] et md[18] ; il ne decoule pas du texte tel qu'il est ecrit. Ce qui manque au plus est une phrase de synthese reliant les trois au meme tirage, ce qui est un raffinement, pas un defaut a corriger avant merge. Note honnete au passage : Gate repasse a l'instant : |
Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA-2 — prev: MED/guard #13035
Summary
L'exercice 1 « Censure à droite » des deux jumeaux de survie était un stub jamais exécuté — la notion structurante ($S(c_i)$ comme contribution de vraisemblance d'un point censuré) n'était démontrée nulle part. Il devient un exemple guidé exécuté dans les deux moteurs, avec le même protocole :
pm.Potentialécrit à la main / Infer.NETVariable.ConstrainPositive(T_i - c*)sur le temps latent.verite / naif / censure / K-M.Résultats exécutés (PyMC-19)
Le facteur de gonflement naïf/censuré est exactement$N/n_{obs} = 60/36$ — un biais de comptage pur, sans qu'aucun composant supplémentaire ne meure. NUTS retrouve la forme fermée $\mathrm{Gamma}(a + n_{obs}, b + \sum t_{obs} + \sum c_i)$ .
Conformité exercise/example (règle labeling)
L'exercice résolu devient un exemple exécuté (convention) ; les exercices restants sont renumérotés (AFT → Exercice 1, Exp-vs-Weibull → Exercice 2) et un nouvel Exercice 3 « Sensibilité au taux de censure » ($c^\star \in {600, 1000, 1400}$ ) maintient 3 exercices stub par notebook, en parité dans les deux twins.
Réparations d'environnement (règle F, pré-requises à la re-exécution)
az.compare(..., ic="loo")→ kwargicretiré dans ArviZ 1.x (LOO est le critère par défaut). La cellule ne compilait plus dans l'env courant.#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(version en cache local) — restore déterministe hors-ligne.Validation
execution_count1..12, 0 erreurexecution_count1..14, 0 erreur0 NotImplementedError / raise / 1/0(stubs C.1 :printseul)probas-19-survival-analysis.yamlrebaseliné dans la même PR (ordre commit-then-update)check_twin_parity.py --json --check --per-pair --base origin/main→ drift_introduced: 0Résultats exécutés (Infer-19)
Rapport naif/censure = 0,001617/0,000782 = 2,07 = N/nObs = 60/29 — l'identité exacte du biais de comptage, vérifiée côté .NET aussi. Écart moteur : le MCMC (PyMC) accepte le facteur arbitraire
pm.Potentialécrit à la main ; Infer.NET n'a pas d'opérateurFactor.Difference(Gamma, const)(vérifié empiriquement, EP et VMP →CompilationFailedException) — la vraisemblance censurée y entre par sa forme exacte en statistiques suffisantes (Gamma(nObs, λ)observée au temps total à risque), même postérieur, leçon de sufficience documentée dans la prose.Fichiers
MyIA.AI.Notebooks/Probas/PyMC/PyMC-19-Survival-Analysis.ipynb— +7 cellules (section 6 exécutée), renumérotation, fix ArviZ 1.xMyIA.AI.Notebooks/Probas/Infer/Infer-19-Survival-Analysis.ipynb— +7 cellules, pin NuGet, renumérotationscripts/notebook_tools/twin_pairs.d/probas-19-survival-analysis.yaml— rebaseline même PRCloses #13032