Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,16 @@
"print(f\"censuration (sortie de suivi) : {obs['C'].mean():.2%}\")"
]
},
{
"cell_type": "markdown",
"id": "cb09-lecture-sim",
"metadata": {},
"source": [
"### Lecture de la simulation\n",
"\n",
"La sortie montre les cinq premières lignes du jeu simulé (N = 2000) avec ses sept colonnes — de `L0` à `Y`, en passant par `Y_obs` — : on y lit déjà la censuration, avec `Y_obs` à `NaN` dès que `C = 1`, puis les trois taux agrégés : 40,00 % de switch à t0, 32,15 % à t1 et 52,40 % de sorties de suivi. C'est ce fort taux de censuration informative qui biaisera l'analyse en cas complets et motivera les poids de censuration de la section 6."
]
},
{
"cell_type": "markdown",
"id": "cb09_c05",
Expand Down Expand Up @@ -265,6 +275,16 @@
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "cb09-lecture-dag",
"metadata": {},
"source": [
"### Lecture du DAG\n",
"\n",
"La figure trace le graphe causal à deux visites : `L1` y est à la fois fils de `A0` (médiation `A0 → L1 → Y`) et parent de `A1` et de `Y` (confounding de `A1 → Y`), tandis que `C` ne dépend que de `L1` — la censuration est bien informative. C'est cette double casquette de `L1`, à la fois médiateur et confondeur, qu'aucune régression classique ne démêle : ajuster sur `L1` bloque l'effet médié, ne pas ajuster laisse le chemin de confounding ouvert. Les g-méthodes des sections 5 et 6 contournent précisément ce dilemme."
]
},
{
"cell_type": "markdown",
"id": "cb09_c07",
Expand Down Expand Up @@ -356,6 +376,16 @@
" print(f\"{k:30s} {v:+.4f} (biais {v - truth:+.4f})\")"
]
},
{
"cell_type": "markdown",
"id": "cb09-lecture-naifs",
"metadata": {},
"source": [
"### Lecture des estimateurs naïfs\n",
"\n",
"La sortie confronte les trois réflexes à la vérité terrain (+0,6766, contraste *always* − *never*) : tous sur-estiment l'effet, du non-ajusté (+3,3194, biais +2,6427) à l'ajusté complet (+1,7434, biais +1,0668), en passant par l'ajusté baseline (+1,6778, biais +1,0012). Même l'ajustement sur `L1`, qui conditionne sur un médiateur, conserve un biais supérieur à 1 — le diagnostic de la section 3 est confirmé en chiffres."
]
},
{
"cell_type": "markdown",
"id": "cb09_c09",
Expand Down Expand Up @@ -453,6 +483,16 @@
"print(\"NB : effet d'UN switch a t=0 seulement -- ce n'est PAS le contraste de strategie de l'essai cible.\")"
]
},
{
"cell_type": "markdown",
"id": "cb09-lecture-dowhy",
"metadata": {},
"source": [
"### Lecture de dowhy\n",
"\n",
"La sortie montre `dowhy` identifier un ATE par backdoor sur `L0` à l'instantané t=0 (estimand `NONPARAMETRIC_ATE`, avec ses hypothèses d'unconfoundedness) et l'estimer à −0,5137 — l'effet d'un seul switch, que la cellule rappelle ne pas être le contraste de stratégie de l'essai ciblé. L'organe SOTA s'arrête donc au traitement ponctuel, exactement à la frontière que les g-méthodes des sections 5 et 6 franchissent."
]
},
{
"cell_type": "markdown",
"id": "cb09_c11",
Expand Down Expand Up @@ -534,6 +574,16 @@
"print(f\"g-formula : {gf:+.4f} (biais {gf - truth:+.4f}) [verite {truth:+.4f}]\")"
]
},
{
"cell_type": "markdown",
"id": "cb09-lecture-gformula",
"metadata": {},
"source": [
"### Lecture de la g-formula\n",
"\n",
"La sortie rapporte l'estimation g-formula à +0,7872, soit un biais de +0,1106 contre la vérité terrain +0,6766 affichée entre crochets : la simulation forward neutralise le confounding variant dans le temps en générant `L1` sous chaque stratégie plutôt qu'en l'ajustant. Ce résidu d'environ +0,11 vient pour l'essentiel de la censuration informative, que cette implémentation de la g-formula ne pondère pas — contrairement à l'IPTW de la section 6."
]
},
{
"cell_type": "markdown",
"id": "cb09_c13",
Expand Down Expand Up @@ -640,6 +690,16 @@
"print(f\"IPTW stabilise : {ip:+.4f} (biais {ip - truth:+.4f}) [verite {truth:+.4f}]\")"
]
},
{
"cell_type": "markdown",
"id": "cb09-lecture-iptw",
"metadata": {},
"source": [
"### Lecture de l'IPTW\n",
"\n",
"La sortie rapporte l'estimation IPTW stabilisée à +1,2090, soit un biais de +0,5323 contre la vérité terrain +0,6766 : sur cette réplique unique, la pondération corrige le confounding mais reste nettement plus dispersée que la g-formula (+0,11 de biais). C'est le prix des poids extrêmes sur les histoires de traitement rares, que le benchmark de la section 7 quantifiera en écart-type inter-répliques."
]
},
{
"cell_type": "markdown",
"id": "cb09_c15",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,16 @@
"print(\"\\nSur la diagonale (meme point) = 1.0 ; la covariance decroit avec la distance.\")\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-rbf",
"metadata": {},
"source": [
"### Lecture de la matrice de covariance\n",
"\n",
"La sortie affiche la matrice de covariance RBF (ℓ = 1) entre les cinq points sonde : symétrique, avec une diagonale unité — un point est parfaitement corrélé à lui-même — et des valeurs qui décroissent hors diagonale. C'est l'objet central du GP : tout tirage de fonction, toute inférence et toute prédiction partent de cette matrice `K`, dont la section 6 mesurera le coût de factorisation."
]
},
{
"cell_type": "markdown",
"id": "f3486252",
Expand Down Expand Up @@ -368,6 +378,16 @@
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-donut",
"metadata": {},
"source": [
"### Lecture du dataset donut\n",
"\n",
"La sortie confirme la géométrie annoncée : 16 points au total, 8 par classe, avec un rayon moyen de 0,43 pour le disque intérieur et 1,35 pour l'anneau extérieur — et la figure les montre emboîtés, sans aucun hyperplan capable de les séparer. C'est ce constat d'inséparabilité linéaire qui justifie de passer à un classifieur à frontière non linéaire, le GP logistique de la section 3."
]
},
{
"cell_type": "markdown",
"id": "95d51c4c",
Expand Down Expand Up @@ -553,6 +573,16 @@
"print(f\"ls posterior : moyenne = {az.summary(idata, var_names=['ls'])['mean'].iloc[0]:.2f}\")\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-nuts",
"metadata": {},
"source": [
"### Lecture de l'inférence NUTS\n",
"\n",
"La sortie rapporte 800 échantillons post-burnin (2 chaînes), zéro divergence — la cible — et une longueur de corrélation postérieure moyenne de 0,79. Ce `ls` appris se situe entre les deux extrêmes des tirages du prior (`ls=0,2` trop wiggly, `ls=5,0` trop lisse) : c'est le compromis biais-variance que la section 5 discute, ici tranché par les données."
]
},
{
"cell_type": "markdown",
"id": "754027d1",
Expand Down Expand Up @@ -750,6 +780,16 @@
"print(\"\\nLecture : centre -> classe 0, anneau -> classe 1, mi-rayon -> incertain.\")\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-accuracy",
"metadata": {},
"source": [
"### Lecture de l'accuracy\n",
"\n",
"La sortie rapporte une exactitude de 16/16 (100,0 %) sur le training, puis les probabilités des quatre points test : le centre (0, 0) est classé 0 avec P = 0,23, le point à mi-rayon (0,9, 0) est classé 1 de justesse (P = 0,52), et les deux points de l'anneau (1,3, 0) et (0, 1,4) avec P = 0,64 et 0,57. Le 100 % de training est un chiffre d'interpolation — avec une latente `f` par point observé, le GP colle à ses propres données —, c'est pourquoi la cellule enchaîne aussitôt sur des points jamais vus."
]
},
{
"cell_type": "markdown",
"id": "72efa4e4",
Expand Down Expand Up @@ -880,6 +920,16 @@
"plt.tight_layout(); plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-hsgp-data",
"metadata": {},
"source": [
"### Lecture du dataset élargi\n",
"\n",
"La sortie annonce 200 points d'entraînement (100 par classe) et 200 points de test, et la figure les montre sur la même géométrie de donut que la section 2, à l'échelle. C'est sur ce jeu que la section va mesurer le mur du GP dense et le gain du HSGP, bras contre bras."
]
},
{
"cell_type": "code",
"execution_count": 10,
Expand Down Expand Up @@ -949,6 +999,16 @@
"print(f\"N=200 -> N=6400 : x32 points, x{chol_times[6400] / chol_times[200]:.0f} en cout de factorisation\")\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-hsgp-wall",
"metadata": {},
"source": [
"### Lecture du mur de factorisation\n",
"\n",
"La sortie mesure une factorisation de Cholesky de 0,6 ms à N=200 contre 1443,4 ms à N=6400 : ×32 points, ×2615 de coût, avec un exposant empirique ajusté à N^2,3 — le N^3 asymptotique n'est pas encore atteint, l'overhead BLAS dominant aux petits N. C'est ce mur, payé à chaque pas NUTS par le GP dense, que la projection HSGP remplace par un produit N × m."
]
},
{
"cell_type": "code",
"execution_count": 11,
Expand Down Expand Up @@ -1082,6 +1142,16 @@
"print(f\"GP dense N=200 : {temps_dense:7.1f} s | acc OOS = {acc_dense:.3f} | log-loss = {ll_dense:.3f}\")\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-hsgp-dense",
"metadata": {},
"source": [
"### Lecture du bras dense\n",
"\n",
"La sortie rapporte le bras dense de référence à N=200 : 51,2 s d'inférence, accuracy hors-échantillon de 1,000 et log-loss de 0,113. C'est la ligne de base — temps et qualité — contre laquelle les deux budgets HSGP de la cellule suivante seront comparés."
]
},
{
"cell_type": "code",
"execution_count": 12,
Expand Down Expand Up @@ -1272,6 +1342,16 @@
" f\"acc OOS = {acc_dense:.3f} | log-loss = {ll_dense:.3f}\")\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-hsgp-arms",
"metadata": {},
"source": [
"### Lecture des bras HSGP\n",
"\n",
"La sortie compare les trois bras à N=200 : le dense à 51,2 s, et les deux budgets HSGP à 3,3 s (m=[10,10], 100 coefficients) et 4,2 s (m=[20,20], 400 coefficients), tous trois à accuracy 1,000 et log-loss quasi identique (0,113-0,114). La base tronquée divise le temps d'inférence par 12 à 15 sans rien sacrifier de la qualité prédictive sur ce donut régulier."
]
},
{
"cell_type": "code",
"execution_count": 13,
Expand Down Expand Up @@ -1402,6 +1482,16 @@
"print(f\"GP dense N=6400 estime : ~{est_dense_6400 / 3600:.0f} h -- le mur reel\")\n"
]
},
{
"cell_type": "markdown",
"id": "p16-lecture-hsgp-scale",
"metadata": {},
"source": [
"### Lecture du passage à l'échelle\n",
"\n",
"La sortie rapporte le HSGP à N=1200 : 12,1 s, accuracy 1,000 et une log-loss de 0,030 — meilleure qu'à N=200, les données supplémentaires resserrant le posterior. Le bras dense, lui, n'est pas exécuté : il est estimé à ~51 min par extrapolation Cholesky-dominée (~254× le HSGP mesuré), et ~40 h à N=6400 — le mur en chiffres."
]
},
{
"cell_type": "code",
"execution_count": 14,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-10-23'
by: myia-po-2025:CoursIA
python_sha: 1766ee2b560dd77a24d6dc096c61c367de0954f8
csharp_sha: c1d9d9a980966f070e4a2e9aa952d14c881639d9
content_python_sha: 3984fb17435f31bfcb3fceb76771485c1650c3d44559fe86577c896ecc07a739
content_csharp_sha: 0b34eb3ec31f3775a6c198a023d1e33e2df4099567c77bc349e7e27d2de1e6bf
Loading