From a2d36444c32651f44e10e93d07990306e98f54ab Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 8 Oct 2026 02:05:29 +0200 Subject: [PATCH 1/4] Fix(infer,#18556): tranche 2b/Glossaire -- enonces avant stubs, prose 3/sqrt(prec), glossaire mesure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Infer-2b : (B1) enonces Exercices 1/2 deplaces AVANT leur stub de code (convention des Exercices 3/4 ; sequence exec 1..19 inchangee, cellules code byte-identiques) ; (B2) cellule 9 : 3/sqrt(prec) est une distance en UNITES, pas en ecarts-types ; (B3) en-tete nav precedent -> Précédent (forme serie). Glossaire (mesure cross-serie) : VMP reellement utilise en 1b/2/2b/10/11 (pas seulement 2 et 11) ; Gibbs = Infer-1 (Infer-13 n'a aucune utilisation) ; Gamma shape,rate (GammaFromShapeAndRate), pas shape,scale. Organes : nav-chain 0 NEW ; consecutive-code-cells max 2 (label, non-bloquant) ; output/source-collapse 0 ; output-failure 0. Markdown-only, aucune cellule code modifiee (hash avant/apres identique) -> pas de re-execution due (C.2). Co-Authored-By: Claude Sonnet 5.5 --- .../Infer-2b-Debugging-Bonnes-Pratiques.ipynb | 122 +++++++++--------- .../Probas/Infer/Infer-Glossary.md | 6 +- 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb b/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb index b56cb9d504..f6bb9db7c5 100644 --- a/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb +++ b/MyIA.AI.Notebooks/Probas/Infer/Infer-2b-Debugging-Bonnes-Pratiques.ipynb @@ -34,7 +34,7 @@ "\n", "## Navigation\n", "\n", - "| précédent | Suivant |\n", + "| Précédent | Suivant |\n", "|-----------|--------|\n", "| [Infer-2-Gaussian-Mixtures](Infer-2-Gaussian-Mixtures.ipynb) | [Infer-3-Factor-Graphs](Infer-3-Factor-Graphs.ipynb) |\n", "\n", @@ -393,7 +393,7 @@ "1. L'observation est déterministe (`ObservedValue`)\n", "2. Le prior est suffisamment large pour \"accepter\" cette valeur\n", "\n", - "> **règle pratique** : Si votre prior a une precision `prec`, alors les observations situees a plus de `3/sqrt(prec)` ecarts-types du centre auront un support quasi-nul. Avec `prec=1000`, cela represente environ `0.1` unites autour de la moyenne." + "> **règle pratique** : Si votre prior a une precision `prec`, alors les observations situees a plus de `3/sqrt(prec)` unites (soit 3 ecarts-types) du centre auront un support quasi-nul. Avec `prec=1000`, cela represente environ `0.1` unites autour de la moyenne." ] }, { @@ -1091,6 +1091,37 @@ "> **Leçon de debugging** : face à un résultat EP surprenant, **augmentez `NumberOfIterations` et observez la trajectoire** plutôt que le seul point final. Une oscillation précoce qui se stabilise (EP ici) se distingue d'une divergence franche (valeurs NaN/Inf, ou croissance monotone non bornée). Le réflexe « EP = instable » est juste mais doit être **diagnostiqué, jamais présupposé** : sur modèle conjugué EP est impeccable (cf. §3 ci-dessus), sur modèle non-conjugué elle oscille mais converge si le modèle est bien posé. C'est cette nuance que la simple ligne de tableau ne pouvait pas capturer.\n" ] }, + { + "cell_type": "markdown", + "id": "c3138f24", + "metadata": { + "papermill": { + "duration": 0.006957, + "end_time": "2026-06-06T14:50:44.751168+00:00", + "exception": false, + "start_time": "2026-06-06T14:50:44.744211+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "## Exercice 1 : Diagnostic d'un modèle de melange gaussien\n", + "\n", + "**Objectif** : Identifiez et corrigez les problemes dans un modèle de melange gaussien a 2 composantes.\n", + "\n", + "**Contexte** : Un modèle de melange gaussien tente de separer des données issues de deux distributions distinctes, mais l'inference produit des résultats inattendus (moyennes identiques ou divergence).\n", + "\n", + "**étapes** :\n", + "1. Analysez le modèle fourni et identifiez au moins 2 problemes parmi : prior symetrique, algorithme mal adapte, observation hors-support\n", + "2. Corrigez chaque problème en vous basant sur les bonnes pratiques vues dans ce notebook\n", + "3. Comparez les résultats obtenus avec EP et VMP sur votre modèle corrige\n", + "\n", + "**Indices** :\n", + "- **Indice** 1 : Les composantes d'un melange doivent avoir des priors distincts pour eviter le label switching\n", + "- **Indice** 2 : Testez avec `engine.ShowProgress = true` pour observer la convergence\n", + "- **Indice** 3 : Utilisez `DiagnosticGaussian()` pour verifier la sante des posterieurs" + ] + }, { "cell_type": "code", "execution_count": 8, @@ -1145,37 +1176,6 @@ "Console.WriteLine(\"Exercice a completer : diagnostiquer et corriger le melange gaussien\");" ] }, - { - "cell_type": "markdown", - "id": "c3138f24", - "metadata": { - "papermill": { - "duration": 0.006957, - "end_time": "2026-06-06T14:50:44.751168+00:00", - "exception": false, - "start_time": "2026-06-06T14:50:44.744211+00:00", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "## Exercice 1 : Diagnostic d'un modèle de melange gaussien\n", - "\n", - "**Objectif** : Identifiez et corrigez les problemes dans un modèle de melange gaussien a 2 composantes.\n", - "\n", - "**Contexte** : Un modèle de melange gaussien tente de separer des données issues de deux distributions distinctes, mais l'inference produit des résultats inattendus (moyennes identiques ou divergence).\n", - "\n", - "**étapes** :\n", - "1. Analysez le modèle fourni et identifiez au moins 2 problemes parmi : prior symetrique, algorithme mal adapte, observation hors-support\n", - "2. Corrigez chaque problème en vous basant sur les bonnes pratiques vues dans ce notebook\n", - "3. Comparez les résultats obtenus avec EP et VMP sur votre modèle corrige\n", - "\n", - "**Indices** :\n", - "- **Indice** 1 : Les composantes d'un melange doivent avoir des priors distincts pour eviter le label switching\n", - "- **Indice** 2 : Testez avec `engine.ShowProgress = true` pour observer la convergence\n", - "- **Indice** 3 : Utilisez `DiagnosticGaussian()` pour verifier la sante des posterieurs" - ] - }, { "cell_type": "code", "execution_count": 9, @@ -1737,6 +1737,34 @@ "> La force de l'effet du prior depend du ratio entre les pseudo-observations du prior ($\\alpha + \\beta$) et les observations reelles (5 dans cet exemple)." ] }, + { + "cell_type": "markdown", + "id": "835a51ef", + "metadata": { + "papermill": { + "duration": 0.006704, + "end_time": "2026-06-06T14:50:47.315549+00:00", + "exception": false, + "start_time": "2026-06-06T14:50:47.308845+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### Exercice 2 : Impact du prior sur un diagnostic medical\n", + "\n", + "**Objectif** : Modeliser un test de depistage avec des priors différents et observer l'impact sur le diagnostic posterieur.\n", + "\n", + "**Contexte** : Un test medical a un taux de faux positifs de 5% et un taux de sensibilite de 90%. La prevalence de la maladie est de 1%. Vous observez un test positif. Quelle est la probabilite que le patient soit reellement malade ?\n", + "\n", + "**Indices** :\n", + "- **Indice** 1 : Modelisez la probabilite de maladie avec `Variable.Beta(alpha, beta)` ou `Variable.Bernoulli(prevalence)`\n", + "- **Indice** 2 : Testez avec `Beta(1, 99)` (prevalence 1%), puis `Beta(10, 90)` (prevalence 10%)\n", + "- **Étape** 1 : définir le modèle avec la probabilite de maladie comme variable latente\n", + "- **Étape** 2 : Ajouter la vraisemblance du test (sensibilite et taux de faux positifs)\n", + "- **Étape** 3 : Observer un test positif et calculer le posterieur pour différentes prevalences" + ] + }, { "cell_type": "code", "execution_count": 13, @@ -1772,34 +1800,6 @@ "Console.WriteLine(\"Exercice a completer : test de depistage medical\");" ] }, - { - "cell_type": "markdown", - "id": "835a51ef", - "metadata": { - "papermill": { - "duration": 0.006704, - "end_time": "2026-06-06T14:50:47.315549+00:00", - "exception": false, - "start_time": "2026-06-06T14:50:47.308845+00:00", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "### Exercice 2 : Impact du prior sur un diagnostic medical\n", - "\n", - "**Objectif** : Modeliser un test de depistage avec des priors différents et observer l'impact sur le diagnostic posterieur.\n", - "\n", - "**Contexte** : Un test medical a un taux de faux positifs de 5% et un taux de sensibilite de 90%. La prevalence de la maladie est de 1%. Vous observez un test positif. Quelle est la probabilite que le patient soit reellement malade ?\n", - "\n", - "**Indices** :\n", - "- **Indice** 1 : Modelisez la probabilite de maladie avec `Variable.Beta(alpha, beta)` ou `Variable.Bernoulli(prevalence)`\n", - "- **Indice** 2 : Testez avec `Beta(1, 99)` (prevalence 1%), puis `Beta(10, 90)` (prevalence 10%)\n", - "- **Étape** 1 : définir le modèle avec la probabilite de maladie comme variable latente\n", - "- **Étape** 2 : Ajouter la vraisemblance du test (sensibilite et taux de faux positifs)\n", - "- **Étape** 3 : Observer un test positif et calculer le posterieur pour différentes prevalences" - ] - }, { "cell_type": "markdown", "id": "68678e15", diff --git a/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md b/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md index d238a8cfb6..82f39afb40 100644 --- a/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md +++ b/MyIA.AI.Notebooks/Probas/Infer/Infer-Glossary.md @@ -9,8 +9,8 @@ Ce glossaire recapitule les termes techniques utilises dans la serie de notebook | Terme | Definition | Notebook(s) | |-------|------------|-------------| | **EP (Expectation Propagation)** | Algorithme d'inference approchee qui propage des messages gaussiens entre facteurs. Rapide mais peut diverger. | Tous | -| **VMP (Variational Message Passing)** | Algorithme variationnel qui minimise la divergence KL. Plus stable que EP, mais sous-estime l'incertitude. | Infer-2, Infer-11 | -| **Gibbs Sampling** | Methode MCMC qui echantillonne chaque variable conditionnellement aux autres. Exact asymptotiquement mais lent. | Infer-13 | +| **VMP (Variational Message Passing)** | Algorithme variationnel qui minimise la divergence KL. Plus stable que EP, mais sous-estime l'incertitude. | Infer-1b, Infer-2, Infer-2b, Infer-10, Infer-11 | +| **Gibbs Sampling** | Methode MCMC qui echantillonne chaque variable conditionnellement aux autres. Exact asymptotiquement mais lent. | Infer-1 | | **Message Passing** | Paradigme ou les distributions sont propagees entre variables via des "messages". | Infer-3, Infer-2b | --- @@ -23,7 +23,7 @@ Ce glossaire recapitule les termes techniques utilises dans la serie de notebook | **Beta** | [0, 1] | alpha, beta | Prior sur probabilités | | **Gaussian** | R | mean, precision | Valeurs continues | | **TruncatedGaussian** | [a, b] | mean, variance, lower, upper | Valeurs contraintes | -| **Gamma** | R+ | shape, scale | Prior sur precisions | +| **Gamma** | R+ | shape, rate (`GammaFromShapeAndRate`) | Prior sur precisions | | **Dirichlet** | Simplex | alpha[] | Prior sur poids de mélange | | **Discrete** | {0, ..., K-1} | probs[] | Variables categoriques | From f3dce3c1e2f103c02d9cf6166fbd9cdd17db1e3a Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 8 Oct 2026 03:14:28 +0200 Subject: [PATCH 2/4] Fix(twin,#8057): attestation probas-2b-debugging a la tete de la tranche 2b Rebaseline --update apres audit firsthand : Infer-2b modifie en markdown-only (enonces avant stubs, prose 3/sqrt(prec), nav header), PyMC-02b inchange -- parite semantique intacte, SHAs de contenu re-attestes (sub-file 0018). See #18556 Co-Authored-By: Claude Sonnet 5.5 --- .../0018-2026-10-08-myia-po-2027-CoursIA.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2027-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..1da454a067 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2027-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-08' +by: myia-po-2027:CoursIA +python_sha: bf93bf3fd1522445e6a1ecce8c5d8e65303aff6e +csharp_sha: f6bb9db7c5fbcf8e6c640a3b360e7553586b5246 +content_python_sha: 1bbe48aeb3a65546ff1de2d0e001cf286fe1cb0082621919c196495c890704b9 +content_csharp_sha: ae4dfbaf07293ce9bcd1bffbdae79da1417be5c8e328215a44e119b298dae997 From a6ea965534cd33a557750c837699490236932358 Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 8 Oct 2026 03:14:51 +0200 Subject: [PATCH 3/4] fix(infer,#19823): rebaseline twin pair Probas-2b Debugging (DRIFT c.108) Le CI gate Twin parity audit (#8057) detecte 1 paire en DRIFT introduite par cette PR (sha blob Python et C# changes par la tranche 2b/Glossaire) : - Probas-2b Debugging (python_sha 96d..., csharp_sha cf2...) Rebaseline chirurgicale (L963/L974) via : python scripts/notebook_tools/check_twin_parity.py --update --pair 'Probas-2b Debugging' --by 'myia-po-2024:CoursIA-2' Aucune modification de fond sur les notebooks. Atteste la parite au nouveau SHA blob, ne la repare pas. Strip outille --update va en DERNIER (cf #8957). Co-Authored-By: Claude Haiku 4.5 (1M context) --- .../0018-2026-10-08-myia-po-2024-CoursIA-2.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml b/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml new file mode 100644 index 0000000000..f3c80e6299 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml @@ -0,0 +1,6 @@ +date: '2026-10-08' +by: myia-po-2024:CoursIA-2 +python_sha: bf93bf3fd1522445e6a1ecce8c5d8e65303aff6e +csharp_sha: f6bb9db7c5fbcf8e6c640a3b360e7553586b5246 +content_python_sha: 1bbe48aeb3a65546ff1de2d0e001cf286fe1cb0082621919c196495c890704b9 +content_csharp_sha: ae4dfbaf07293ce9bcd1bffbdae79da1417be5c8e328215a44e119b298dae997 From 601f941c4be1b06aba7fb9de3cd056de2fcc78ff Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 8 Oct 2026 07:50:34 +0200 Subject: [PATCH 4/4] fix(twin,#8057): dedupliquer la collision d'index 0018 probas-2b-debugging Deux attestations 0018 coexistaient sur cette branche, toutes deux datees 2026-10-08 et attestant les MEMES blobs (python bf93bf3f, csharp f6bb9db7) : 0018-...-myia-po-2027-CoursIA.yaml (attestation --update de la lane) et 0018-...-myia-po-2024-CoursIA-2.yaml (rebaseline duplique du meme geste). Le registre exige un index unique par paire : la copie po-2024 est retiree (suppression, pas rename -- renommer en 0019 inverserait la semantique du journal, cf lesson-twin-index-collision-delete-not-rename). Aucune information perdue : la copie gardee attestait des SHA identiques. Valide par pytest scripts/notebook_tools/tests/test_twin_registry_integrity.py. See #19823 Co-Authored-By: Claude Sonnet 5.5 --- .../0018-2026-10-08-myia-po-2024-CoursIA-2.yaml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml b/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml deleted file mode 100644 index f3c80e6299..0000000000 --- a/scripts/notebook_tools/twin_pairs.d/probas-2b-debugging/0018-2026-10-08-myia-po-2024-CoursIA-2.yaml +++ /dev/null @@ -1,6 +0,0 @@ -date: '2026-10-08' -by: myia-po-2024:CoursIA-2 -python_sha: bf93bf3fd1522445e6a1ecce8c5d8e65303aff6e -csharp_sha: f6bb9db7c5fbcf8e6c640a3b360e7553586b5246 -content_python_sha: 1bbe48aeb3a65546ff1de2d0e001cf286fe1cb0082621919c196495c890704b9 -content_csharp_sha: ae4dfbaf07293ce9bcd1bffbdae79da1417be5c8e328215a44e119b298dae997