From ac4f40a0a5bacf52af114b65966fab291f4cde96 Mon Sep 17 00:00:00 2001 From: jsboige self-bot Date: Fri, 28 Aug 2026 02:37:36 +0200 Subject: [PATCH 1/4] =?UTF-8?q?fix(pymc,#13277):=20PyMC-2=20cellule=2018?= =?UTF-8?q?=20=E2=80=94=20verdict=20honn=C3=AAte=20divergences=20439=20/?= =?UTF-8?q?=20r=5Fhat=201.030=20/=20ESS=20250=20(label=20switching=20marqu?= =?UTF-8?q?=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Re-execution #12778 a change les valeurs (86 -> 439, 1.020 -> 1.030, 284 -> 250) mais la cellule d'interpretation markdown n'avait pas suivi : elleannonçait toujours les anciennes valeurs et qualifiait le label switching de 'leger'. Correction : - Trois puces alignees sur la sortie re-executee (cellule 17) : 439 / 1.030 / 250. - Jugement 'ESS suffisant' -> 'ESS limite' (250 chaines confondues < cible 400 pour GMM). - Jugement 'r_hat legerement au-dessus' -> 'label switching marque' : r_hat 1.030 + facteur 5 sur les divergences = signature d'un posterior multimodal non identifie (chaque divergence = gradient abrupt entre modes). - Transition 'non-identifiabilite (legere)' -> 'non-identifiabilite marquee' : les estimations ponctuelles ne restent interpretables qu'apres permutation des labels. Hors scope : table du body de #12778 (trace_mixte absent, trace_nm obsoletes). A traiter en second PR si necessaire. Lane: myia-po-2026:CoursIA-2 Refs: #12778, #13277, #12476 --- .../Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb b/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb index f6a9fc7603..9cfd2a2fd4 100644 --- a/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb +++ b/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb @@ -1033,14 +1033,14 @@ "\n", "Le modèle de mélange à 2 composantes a été échantillonné avec un algorithme hybride : NUTS pour les paramètres continus (poids, moyennes, ecarts-types) et BinaryGibbsMetropolis pour les assignations discretes (z).\n", "\n", - "La lecture de diagnostic (`az.summary`, ajoutee apres `pm.sample`) quantifie le warning committe par l'echantillonneur :\n", - "- **86 divergences** NUTS apres tuning ;\n", - "- **R-hat max = 1.020** (sur `mu_components[0]`, juste au-dessus du seuil 1.01) ;\n", - "- **ESS bulk min = 284** (toutes chaines confondues, suffisant) — le warning ESS de PyMC porte sur l'ESS *par chaine* (< 100 pour certains parametres), une inefficacite au niveau de la chaine, pas un manque global de tirages.\n", + "La lecture de diagnostic (`az.summary`, ajoutee apres `pm.sample`) quantifie le warning committe par l'echantillonneur (sortie re-executee par cette PR) :\n", + "- **439 divergences** NUTS apres tuning (cinq fois plus qu'avant la re-execution : 86 -> 439) ;\n", + "- **R-hat max = 1.030** (sur `mu_components[0]` et `mu_components[1]`, au-dessus du seuil 1.01) ;\n", + "- **ESS bulk min = 250** (toutes chaines confondues, **limite**) -- le warning ESS de PyMC porte sur l'ESS *par chaine* (< 100 pour certains parametres), une inefficacite au niveau de la chaine, pas un manque global de tirages.\n", "\n", - "Le r_hat de `mu_components[0]` legerement au-dessus de 1.01 est la signature du **label switching** : les etiquettes des composantes permutent au cours de l'echantillonnage, rendant le paysage posterior multimodal. Les deux moyennes ne sont donc pas totalement identifiables — c'est cela, et non un manque de tirages, qui fait re-descendre le diagnostic sous le seuil.\n", + "Le r_hat a 1.030 combine a 439 divergences est la signature d'un **label switching marque** : les etiquettes des composantes permutent au cours de l'echantillonnage, rendant le paysage posterior multimodal, et les trajectoires NUTS qui traversent les vallees entre modes accumulent les divergences (chaque divergence = un point ou le gradient est trop abrupt pour l'integrateur leapfrog). Le facteur 5 sur les divergences entre deux tirages du meme modele temoigne d'une sensibilite au seed/initialisation, caracteristique des posteriors multimodaux non identifies. Les deux moyennes ne sont donc pas totalement identifiables -- c'est cela, et non un manque de tirages, qui empeche le diagnostic d'atteindre le seuil.\n", "\n", - "Malgre cette non-identifiabilite (legere), les estimations ponctuelles restent interpretables :\n", + "Compte tenu de cette non-identifiabilite marquee, les estimations ponctuelles restent interpretables **uniquement apres permutation des labels** (les composantes ne sont identifiees que par leur moyenne relative, pas par leur indice) :\n", "- La composante \"normale\" capture les trajets de 11 a 20 minutes\n", "- La composante \"exceptionnelle\" capture les trajets de 28 a 35 minutes\n", "- Les 3 observations extremes (28, 32, 35 min) correspondent bien aux evenements extraordinaires\n", From c3fb7771b593e83a60b24714cf59cb7ffd446687 Mon Sep 17 00:00:00 2001 From: jsboige self-bot Date: Fri, 28 Aug 2026 04:21:20 +0200 Subject: [PATCH 2/4] =?UTF-8?q?chore(probas,#13283):=20twin=20parity=20kno?= =?UTF-8?q?wn=5Fdifferences=20born=C3=A9e=20PR=20#13283?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suite au rebase de PR #13283 sur origin/main (cycle 4) qui a absorbé les commits de #12778 (c2d1df0e4 = PyMC-2/3/4 az.summary diagnostic), ajoute uniquement la note bornée au registre twin — le commit 7a7232230 (twin attestation) a été skip via rebase --skip : main dispose déjà d'un audit twin 2026-08-25 (0f4c31eb2 = #12975) qui attestait correctement l'état pré-#12778. Note bornée PR #13283 uniquement : - scope : cellule 18 markdown + 3 jugements ré-tirés (label switching marqué, non-identifiabilité marquée, ESS limite) - motif unilatéral : seul le jumeau Python a été touché par #12778 (Infer.NET = moteur EP/VMP déterministe, pas de stochasticité NUTS/ArviZ) - diagnostic C.4 cat. c (moteur upstream) + verdict CAUSE_FIXED - B.0 OK : body PR documente accept + raison 3 jugements ré-tirés - Refs : Closes #13277, See #12778 #12476 #13275 Aucun strip outillé en attente. Rebase cycle 4 a préservé le contenu cellule 18 (mêmes SHAs post-rebase fb752531... / 8e44292a... côté Python, 52312779... / 0862151a... côté C# car git rebase préserve le contenu quand pas de conflit cellule). Le ticket 13283 sur cellule 18 (premier commit aeccee4e0 rebased) + cette note = 2 commits au total, suffisant pour ai-01 merge car la substance pédagogique est validée (po-2025 preflight c.665) + le contexte twin parity est ici documenté. Refs: PR #13283, #13277, #12778, #12476, #13275 Co-Authored-By: Claude Haiku 4.5 (1M context) --- .../twin_pairs.d/probas-2-gaussian-mixtures.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml b/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml index 87ba043418..089624ae83 100644 --- a/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml +++ b/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml @@ -63,3 +63,14 @@ - 'Moteurs d''inference distincts : C# Infer.NET = inference deterministe approchee (Expectation Propagation / Variational Message Passing, modele compile en code d''inference) ; Python PyMC = echantillonnage MCMC (NUTS/HMC par defaut) + ADVI (variationnel) sur backend PyTensor. Memes concepts, paradigmes d''inference differents.' + - '2026-08-28 (drift unilateral myia-po-2026:CoursIA-2, PR #13283) : correction derive prose cellule 18 cote Python seul + (markdown d''interpretation de l''echantillonnage GMM, post-re-execution #12778) — les sorties az.summary reellement + committees par le notebook ont 439 divergences / R-hat max 1.030 / ESS bulk min 250 sur mu_components, et la prose + annonce 86 / 1.020 / 284 (avec jugements "leger" / "limite" / "suffisant"). PR #13283 corrige les 3 valeurs + 3 + jugements re-tires (label switching MARQUE plus "leger", non-identifiabilite MARQUEE plus "leger", ESS LIMITE + plus "suffisant"). Jumeau C# (Infer-2) inchange : il n''a pas ete touche par #12778 (Infer.NET = moteur EP/VMP + deterministe, pas de stochasticite NUTS/ArviZ). Mouvement unilateral legitime (parity_level native-both, moteurs + distincts : drift documente ne touche que la sortie d''un moteur, et le markdown qui la decrit dans la stack + concernee). Aucun strip outille en attente (probe banner 0, papermill 0, machine paths 0). B.0 OK : body PR #13283 + documente diagnostic derive C.4 categorie c (moteur upstream) + verdict CAUSE_FIXED. Refs: Fixes #13277, + See #12778 #12476 #13275.' From 6a03062c663d1be8fb86923492a62ed904031c3e Mon Sep 17 00:00:00 2001 From: jsboige self-bot Date: Fri, 28 Aug 2026 05:49:36 +0200 Subject: [PATCH 3/4] =?UTF-8?q?fix(pymc,#13277):=20cellule=2018=20?= =?UTF-8?q?=E2=80=94=20attribution=20correcte=20sortie=20reexecutee=20par?= =?UTF-8?q?=20#12778=20+=20twin=20rebaseline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La cellule 18 markdown d'interpretation annonait 'sortie reexecutee par cette PR' — mais #13283 ne reexecute aucune cellule code (6+/6- markdown uniquement). La reexecution 439/1.030/250 a ete commitee par #12778 (MERGED 2026-08-28). Deux corrections targeted : - (1) attribution cellule 18 : 'cette PR' -> '#12778' (correction factuelle) - (2) twin rebaseline (scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml) : attestation 2026-08-28 myia-po-2026:CoursIA-2 avec nouveaux blob/content_python_sha, csharp_sha/content_csharp_sha inchanges (jumeau Infer.NET non touche, parite preservee). Verification : python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/main = Total 157 OK=157 INTRO=0 (DRIFT=0). Cf commentaires preflight adjoint #13283 jsboigeEpita 2026-08-28T01:29Z + 02:32Z. Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: MED/docs #13235 Co-Authored-By: Claude Opus 4.6 --- .../Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb | 2 +- .../twin_pairs.d/probas-2-gaussian-mixtures.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb b/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb index 9cfd2a2fd4..43dd723671 100644 --- a/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb +++ b/MyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb @@ -1033,7 +1033,7 @@ "\n", "Le modèle de mélange à 2 composantes a été échantillonné avec un algorithme hybride : NUTS pour les paramètres continus (poids, moyennes, ecarts-types) et BinaryGibbsMetropolis pour les assignations discretes (z).\n", "\n", - "La lecture de diagnostic (`az.summary`, ajoutee apres `pm.sample`) quantifie le warning committe par l'echantillonneur (sortie re-executee par cette PR) :\n", + "La lecture de diagnostic (`az.summary`, ajoutee apres `pm.sample`) quantifie le warning committe par l'echantillonneur (sortie re-executee par #12778) :\n", "- **439 divergences** NUTS apres tuning (cinq fois plus qu'avant la re-execution : 86 -> 439) ;\n", "- **R-hat max = 1.030** (sur `mu_components[0]` et `mu_components[1]`, au-dessus du seuil 1.01) ;\n", "- **ESS bulk min = 250** (toutes chaines confondues, **limite**) -- le warning ESS de PyMC porte sur l'ESS *par chaine* (< 100 pour certains parametres), une inefficacite au niveau de la chaine, pas un manque global de tirages.\n", diff --git a/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml b/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml index 089624ae83..44e87322b1 100644 --- a/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml +++ b/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml @@ -57,6 +57,12 @@ csharp_sha: f7d507ae2ac763906e13d6ba61240219f5193ab4 content_python_sha: d097e445246d572e6a5e758b31e5c98587b7d29174d6c55596e949e4874da28b content_csharp_sha: 193d1a1aa8d5a5fe5da8159efcba581bcbc402afb68247a3c3e14d78f380a76a + - date: "2026-08-28" + by: myia-po-2026:CoursIA-2 + python_sha: 9cfd2a2fd4971f898fc156767770f45427c6b8e8 + csharp_sha: f7d507ae2ac763906e13d6ba61240219f5193ab4 + content_python_sha: cd7456ba906f7fafe38411af38e48278ef8682ec0dab56de805ba3ff6dfdfe9c + content_csharp_sha: 193d1a1aa8d5a5fe5da8159efcba581bcbc402afb68247a3c3e14d78f380a76a known_differences: - '2026-08-21 (rebaseline asymetrique myia-po-2024:CoursIA-2) : PR #12065 corrige heading_in_list cote C# (Infer-2-Gaussian-Mixtures.ipynb, 1 finding) tandis que le jumeau Python (PyMC-2-Gaussian-Mixtures.ipynb) etait deja a 0 finding. La convergence unilaterale est legitime (cf ai-01 arbitrage 2026-08-21 15:00Z, DM msg-20260821T130006-lc9u2c) : la parite reelle s''ameliore, elle n''est pas enshrinee. Aucun strip outille en attente (probe banner 0, papermill 0, machine paths 0).' - 'Socle pedagogique commun : melanges de distributions gaussiennes (GMM) modelise dans les deux stacks.' From 61e523c5ca789c327f59212f1fa5b02b27c2c1d7 Mon Sep 17 00:00:00 2001 From: jsboige self-bot Date: Fri, 28 Aug 2026 07:57:11 +0200 Subject: [PATCH 4/4] fix(twin-parity,#13283): rebaseline Probas-2 Gaussian-Mixtures (closes close-keyword rouge) Tell c.672-L28/29 : le runner CI voit DRIFT_INTRODUCED sur la paire Probas-2 Gaussian-Mixtures (blob Python bouge sur main c9811ce1f, registre twin stale sur 7e2a009e). Rebaseline via --update au nouveau blob 43dd7236... (post PR #12778 re-execution + rebase du registre sur origin/main). Cf run 33140038133/job/98748615912 (PR gate FAILURE cause twin parity DRIFT_INTRODUCED, run 33140083941/job/98748756540 cause closing-keyword + PR-number reference). Lane : myia-po-2026:CoursIA-2 Co-Authored-By: Claude Opus 4.6 --- .../twin_pairs.d/probas-2-gaussian-mixtures.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml b/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml index 44e87322b1..7e6f056873 100644 --- a/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml +++ b/scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml @@ -63,6 +63,12 @@ csharp_sha: f7d507ae2ac763906e13d6ba61240219f5193ab4 content_python_sha: cd7456ba906f7fafe38411af38e48278ef8682ec0dab56de805ba3ff6dfdfe9c content_csharp_sha: 193d1a1aa8d5a5fe5da8159efcba581bcbc402afb68247a3c3e14d78f380a76a + - date: "2026-08-28" + by: myia-po-2026:CoursIA-2 + python_sha: 43dd723671556866dbf5324eb29ccd1e3eb9c705 + csharp_sha: f7d507ae2ac763906e13d6ba61240219f5193ab4 + content_python_sha: 13ea4c5eeed3fff1733f4582d7b75f2583e2dfa54e9cafeaa1afd448d2168d66 + content_csharp_sha: 193d1a1aa8d5a5fe5da8159efcba581bcbc402afb68247a3c3e14d78f380a76a known_differences: - '2026-08-21 (rebaseline asymetrique myia-po-2024:CoursIA-2) : PR #12065 corrige heading_in_list cote C# (Infer-2-Gaussian-Mixtures.ipynb, 1 finding) tandis que le jumeau Python (PyMC-2-Gaussian-Mixtures.ipynb) etait deja a 0 finding. La convergence unilaterale est legitime (cf ai-01 arbitrage 2026-08-21 15:00Z, DM msg-20260821T130006-lc9u2c) : la parite reelle s''ameliore, elle n''est pas enshrinee. Aucun strip outille en attente (probe banner 0, papermill 0, machine paths 0).' - 'Socle pedagogique commun : melanges de distributions gaussiennes (GMM) modelise dans les deux stacks.'