Skip to content
Merged
408 changes: 118 additions & 290 deletions MyIA.AI.Notebooks/Probas/Infer/Infer-18-Change-Point.ipynb

Large diffs are not rendered by default.

29 changes: 24 additions & 5 deletions MyIA.AI.Notebooks/Probas/Infer/Infer-19-Survival-Analysis.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
"**Plan.** (1) Pourquoi un modèle dedie aux durees. (2) Le modèle exponentiel (cas conjugue).\n",
"(3) Fonction de survie predictive en forme fermee. (4) Le modèle de Weibull via une astuce de\n",
"transformee. (5) Sélection de la forme `k`. (6) Trois exercices (censure, regression AFT,\n",
"comparaison de modèles)."
"comparaison de modèles).",
"\n***\n## Navigation\n| Précédent | Suivant |\n|-----------|--------|\n| [Infer-18-Change-Point](Infer-18-Change-Point.ipynb) | - |\n***\n"
]
},
{
Expand Down Expand Up @@ -1060,7 +1061,7 @@
"\n",
"Le test de coherence reussit sur les deux jeux :\n",
"\n",
"- **Jeu Weibull** (`k = 1,8`) : le score est **minimal en `k = 1,8`** (`-466,7`), c'est-a-dire\n",
"- **Jeu Weibull** (`k = 1,8`) : le score est **maximal en `k = 1,8`** (`-466,7`), c'est-a-dire\n",
" exactement la valeur vraie. Le pic est net (`k = 1,5` et `k = 2,0` sont déjà moins bons).\n",
" La méthode retrouve la signature d'usure.\n",
"- **Jeu exponentiel** (`k = 1`) : le meilleur est `k = 1,2` (`-486,8`), mais `k = 1,0` (`-488,5`)\n",
Expand All @@ -1087,7 +1088,8 @@
"`f(c_i)` mais la survie `S(c_i) = exp(-lambda * c_i)`.\n",
"\n",
"Nous executons la comparaison complete sur le jeu exponentiel de la section 3, censuré a\n",
"`c* = 800` h — environ 45 % de censures :\n",
"`c* = 800` h : 44,9 % de censures attendues en théorie (`exp(-lambda·c*)`), 51,7 % sur cet\n",
" échantillon — l'écart est la variabilité d'échantillonnage :\n",
"\n",
"- **Modele naif** : les durees enregistrees (censures figees a `c*`) traitees comme des evenements\n",
" exacts. Chaque censure est comptee comme une mort precoce : le taux estime **monte**, la survie\n",
Expand Down Expand Up @@ -1230,6 +1232,20 @@
"Console.WriteLine($\" S_naif(1500) = {Math.Exp(-lambdaNaif * 1500):F3} (vraie survie = {Math.Exp(-lambdaTrue * 1500):F3})\");"
]
},
{
"cell_type": "markdown",
"id": "f3a19c72",
"metadata": {},
"source": [
"### Lecture : le prix du comptage naïf\n",
"\n",
"Le modèle naïf pousse `lambda` vers le haut (`0,001617` contre un vrai `0,001000`, un biais\n",
"de **1,62×**) et écrase la survie (`S_naif(1500) = 0,088` contre `0,223` pour la vérité) :\n",
"chaque censure enregistrée à `c*` est comptée comme une mort précoce. La correction n'exige\n",
"pas un nouveau moteur, elle exige la **bonne vraisemblance** — `S(c_i)` pour une censure,\n",
"`f(t_i)` pour un événement. C'est la cellule suivante qui la construit."
]
},
{
"cell_type": "code",
"execution_count": 10,
Expand Down Expand Up @@ -1490,8 +1506,11 @@
" modele parametrique, lui, extrapole (au prix de son hypothese de loi) — la complementarite\n",
" non-parametrique/parametrique.\n",
"- **Pont moteur** : PyMC-19 mene la meme comparaison cote NUTS — la censure y entre par un\n",
" `pm.Potential(-lambda * c_i)` ecrit a la main, ici par `Variable.ConstrainPositive`. Meme\n",
" protocole, meme forme fermee, deux machines."
" `pm.Potential(-lambda * c_i)` ecrit a la main. Cote Infer.NET, la meme vraisemblance passe par\n",
" la **forme exacte en statistiques suffisantes** (`Gamma(nObs, lambda)` observe au temps total a\n",
" risque, section 7) : la contrainte latente `T_i > c*` n'y est pas compilable, et la sufficience\n",
" porte la meme vraisemblance en restant conjuguee. Meme protocole, meme forme fermee, deux\n",
" chemins d'encodage de la censure."
]
},
{
Expand Down
32 changes: 29 additions & 3 deletions MyIA.AI.Notebooks/Probas/Infer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Le trait distinctif d'Infer.NET : le modèle déclaratif est **compilé** (via R
| 16 | [Infer-16-Sparse-Gaussian-Process](Infer-16-Sparse-Gaussian-Process.ipynb) | 55 min | Processus gaussiens, noyau RBF, classification non-linéaire, sparse GP |
| 17 | [Infer-17-Kalman-Filter](Infer-17-Kalman-Filter.ipynb) | 55 min | Filtre de Kalman, système dynamique linéaire gaussien, conjugaison, EP exacte |
| 18 | [Infer-18-Change-Point](Infer-18-Change-Point.ipynb) | 50 min | Détection de rupture, DiscreteUniform, ForEach + If/IfNot sur plage, EP, Poisson |
| 19 | [Infer-19-Survival-Analysis](Infer-19-Survival-Analysis.ipynb) | 50 min | Analyse de survie, Exponentielle conjugée (Gamma), Weibull par transformée, S(t) forme fermée, censure à droite exécutée (`ConstrainPositive` vs Kaplan–Meier) |
| 19 | [Infer-19-Survival-Analysis](Infer-19-Survival-Analysis.ipynb) | 50 min | Analyse de survie, Exponentielle conjuguée (Gamma), Weibull par transformée, S(t) forme fermée, censure à droite exécutée (statistiques suffisantes `Gamma(nObs, lambda)` vs Kaplan–Meier) |

> **Théorie de la décision** : les notebooks de décision (utilité, EVPI, MDPs, Thompson Sampling, plus les companions Lean) forment désormais un arc autonome dans [`../DecisionTheory/DecInfer/`](../DecisionTheory/DecInfer/README.md), adossé au lake [`decision_theory_lean`](../DecisionTheory/decision_theory_lean/).

Expand Down Expand Up @@ -815,12 +815,38 @@ Le **point de rupture** (*change-point*) modélise une série qui suit un régim
| Sélection de régime | `Variable.If(block.Index <= cp)` / `IfNot` | Branche la vraisemblance avant/après la rupture |
| Postérieur discret | `ie.Infer<Discrete>(cp)` | Vecteur de probabilités sur les $N$ positions |
| Initialisation EP | `taux.InitialiseTo(...)` | EP déterministe : amorcer les taux évite les optima locaux |
| Concentration | entropie $H(\text{cp})$ | $H \to 0$ = rupture certaine ; le Bayes factor teste sa réalite (cf. Infer-8) |
| Concentration | entropie $H(\text{cp})$ | $H \to 0$ = rupture certaine ; le Bayes factor teste sa réalite (cf. Infer-10) |

**Positionnement** : [Infer-14](Infer-14-Sequences.ipynb) et [Infer-17](Infer-17-Kalman-Filter.ipynb) infèrent un état **récurrent** (un par pas) ; Infer-18 infère un **indice structurel unique** couplé à toute la plage — un usage du `If` sur une plage qu'aucun autre notebook n'exploite. Sur le cas gaussien, EP récupère le vrai point caché **exactement** (mode = 50, masse 0,998) ; sur les catastrophes minières (1851–1962), la rupture est datée à **1890–1891** (taux 3,1 → 0,9, rapport 3,3×), soit le résultat canonique de la littérature. Le notebook pointe aussi vers [Infer-5 (Causal)](Infer-5-Causal-Inference.ipynb) : un point de rupture est un changement de mécanisme générateur.
**Positionnement** : [Infer-14](Infer-14-Sequences.ipynb) et [Infer-17](Infer-17-Kalman-Filter.ipynb) infèrent un état **récurrent** (un par pas) ; Infer-18 infère un **indice structurel unique** couplé à toute la plage — un usage du `If` sur une plage qu'aucun autre notebook n'exploite. Sur le cas gaussien, EP récupère le vrai point caché **exactement** (mode = 50, masse 0,998) ; sur les catastrophes minières (1851–1962), le mode du postérieur tombe en **1891** (intervalle crédible à 90 % : **1886–1892** ; taux 3,1 → 0,9, rapport 3,3×), soit le résultat canonique de la littérature. Le notebook pointe aussi vers [Infer-5 (Causal)](Infer-5-Causal-Inference.ipynb) : un point de rupture est un changement de mécanisme générateur.

**Applications** : contrôle qualité (dérive de production), finance (changement de régime de marché), épidémiologie, surveillance de capteurs, datation d'événements structurels en sciences sociales et climatiques.

### Infer-19 : Analyse de survie (time-to-event bayésien)

L'**analyse de survie** modélise le **délai** qui sépare un instant initial d'un événement — panne, décès, désabonnement. Ce délai `T` est positif et asymétrique : une gaussienne est inadaptée, et la grandeur centrale n'est plus une moyenne mais la **fonction de survie** `S(t) = P(T > t)`. Le notebook construit la famille exponentielle/Weibull en restant **conjuguée** : l'exponentielle par conjugaison Gamma directe, la Weibull par **transformée de puissance** (`U = T^k ~ Exp(r)`), la forme `k` étant sélectionnée par balayage de log-vraisemblance prédictive. La **censure à droite** y est traitée sur un exemple **exécuté** : modèle naïf (biaissé), modèle corrigé par la **forme exacte en statistiques suffisantes** (`Gamma(nObs, lambda)` observée au temps total à risque — la contrainte latente `T_i > c*` n'étant pas compilable dans Infer.NET), confrontés à l'estimateur non paramétrique de Kaplan–Meier.

**Durée** : 50 min

**Objectifs** :

- Modéliser un délai positif asymétrique et comprendre pourquoi la gaussienne échoue (temps négatifs, asymétrie, queue)
- Maîtriser le modèle exponentiel conjugué (postérieur Gamma fermé) et la survie prédictive en forme fermée
- Étendre à la Weibull par transformée de puissance et sélectionner la forme `k` par balayage de log-vraisemblance prédictive
- Traiter la **censure à droite** : le biais du modèle naïf, la correction par statistiques suffisantes, la confrontation à Kaplan–Meier

**Concepts clés** :

| Concept | API | Description |
| --------- | --------------- | ------------- |
| Conjugaison exponentielle | `Variable.GammaFromShapeAndRate` | Postérieur Gamma fermé sur le taux `lambda` |
| Transformée Weibull | `U = T^k ~ Exp(r)` | Ramène la Weibull au cas conjugué |
| Censure à droite | `Gamma(nObs, lambda)` observée au temps total à risque | Vraisemblance exacte en statistiques suffisantes (la contrainte `T_i > c*` n'est pas compilable) |
| Estimation non paramétrique | Kaplan–Meier (1958) | Escalier empirique adapté à la censure ; plat au-delà de `c*` |

**Positionnement** : [Infer-17](Infer-17-Kalman-Filter.ipynb) et [Infer-18](Infer-18-Change-Point.ipynb) infèrent des paramètres d'un processus **observé partout** ; Infer-19 infère un **délai unique** par individu, **partiellement observé** (censure) — l'information manquante entre dans la vraisemblance au lieu d'être ignorée. PyMC-19 mène la même comparaison côté NUTS (censure par `pm.Potential`) : même protocole, même forme fermée, deux encodages du moteur.

**Applications** : fiabilité industrielle (temps avant panne), essais cliniques (survie), analyse de churn client, garanties produits, maintenance prédictive.

---

## Concepts Clés Infer.NET
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-10-08'
by: myia-po-2024:CoursIA-2
python_sha: 69e0d128ed5b33b32eb852d3668be941d9f2bb58
csharp_sha: 56c6b6d08c621bb28d2c25946f3acc5d7da42f04
content_python_sha: b58b150603924d25040b59b5f44d8fa019189e0853436e4c9cef02e66d4ebf95
content_csharp_sha: 167e41016f50f5d88e73237f77d09c8c15cf66f8aac675d7b63e7f19cdad5b92
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-10-09'
by: myia-po-2027:CoursIA
python_sha: 69e0d128ed5b33b32eb852d3668be941d9f2bb58
csharp_sha: 3abceb8a911996c60057bdba548436313c45bcaf
content_python_sha: b58b150603924d25040b59b5f44d8fa019189e0853436e4c9cef02e66d4ebf95
content_csharp_sha: 8016c218a16f80a849588f7f0e0e1f6ffd02d6e5c5472e02b280084831d5306d
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-10-09'
by: myia-po-2027:CoursIA
python_sha: 3526999f14a350a16f4ff3f8c4b76af719e52349
csharp_sha: 3abceb8a911996c60057bdba548436313c45bcaf
content_python_sha: 38e0f56b3d5bb83c045abcb537dde4131f2400dfdf276fd7ca6e699b8d7b5eec
content_csharp_sha: 8016c218a16f80a849588f7f0e0e1f6ffd02d6e5c5472e02b280084831d5306d
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-10-08'
by: myia-po-2024:CoursIA-2
python_sha: 9644282a311939ad230654749e04a2f872644c23
csharp_sha: cf218cdca39d5e855d6eec947356f7eae6fb38a4
content_python_sha: f85d60ca11ea1f14c45835aeefc676d543008e669cf52d17ba48241d6b338d95
content_csharp_sha: 706c95ff6d3685d092bebbcb4d2e4ad961e3fd22e27e549539a1600047cfd4e4
Loading