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 @@ -728,7 +728,7 @@
"| # | Design | Information disponible | Biais à dompter |\n",
"|---|--------|------------------------|-----------------|\n",
"| 1 | Observationnel, même population | $P(v)$ | **confondage** — neutralisé par backdoor (§4) |\n",
"| 2 | Expérimental sur $Z$ (plus accessible que $X$) | $P(v \\mid do(z))$ | **extrapolation d'intervention** — le cas instrumental (§5 de DoWhy-5) |\n",
"| 2 | Expérimental sur $Z$ (plus accessible que $X$) | $P(v \\mid do(z))$ | **extrapolation d'intervention** — le cas instrumental (§5 de CausalBridges-06) |\n",
"| 3 | Essai randomisé, échantillon **non représentatif** | $P(v \\mid do(x), S{=}1)$ | **sélection** — l'essai dit vrai... de son échantillon |\n",
"| 4 | Source expérimentale ≠ population cible | $P(v \\mid do(x))$ + $P(v \\mid S{=}s)$ | **transportabilité** — généraliser l'effet à la cible |\n",
"\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "edfa17c4",
"metadata": {},
"source": [
"# DoWhy-1 — Exiger un estimand : l'identification causale avant le chiffre\n",
"# CausalBridges-02 — Exiger un estimand : l'identification causale avant le chiffre\n\n> Renumerotation #17421 : ce carnet etait publie sous le nom DoWhy-1 ; les renvois internes de la serie citent desormais le numero courant.\n",
"\n",
"**Serie** : Inference causale avec DoWhy (Probas, Python)\n",
"**Prerequis** : [PyMC-05-Causal-Inference](../../PyMC/PyMC-05-Causal-Inference.ipynb) (l'echelle de Pearl,\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
"tags": []
},
"source": [
"# DoWhy-2 — Le contrefactuel individuel : quand l'effet moyen cache tout\n",
"# CausalBridges-03 — Le contrefactuel individuel : quand l'effet moyen cache tout\n\n> Renumerotation #17421 : ce carnet etait publie sous le nom DoWhy-2 ; les renvois internes de la serie citent desormais le numero courant.\n",
"\n",
"**Série** : Inférence causale avec DoWhy (Probas, Python)\n",
"**Prérequis** : [DoWhy-1-Estimand-et-Intervention](CausalBridges-02-Dowhy-Estimand-Intervention.ipynb) \n",
"**Prérequis** : [CausalBridges-02-Estimand-et-Intervention](CausalBridges-02-Dowhy-Estimand-Intervention.ipynb) \n",
"(l'estimand, le do-calcul, l'ATE) et [Do-Calculus-Bridge](CausalBridges-01-Do-Calculus.ipynb) (backdoor).\n",
"\n",
"**Objet** : monter d'un cran sur l'échelle de Pearl. DoWhy-1 répondait a la question\n",
"**Objet** : monter d'un cran sur l'échelle de Pearl. CausalBridges-02 répondait a la question\n",
"« *le traitement a-t-il un effet moyen ?* » (l'**ATE**). Ce notebook pose la question\n",
"d'individu : « *que se serait-il passé pour CET étudiant, sans le traitement ?* » — le\n",
"**contrefactuel individuel**.\n"
Expand Down Expand Up @@ -55,7 +55,7 @@
"**en coûte 3**. En moyenne, cela fait zéro — et pourtant, personne n'est moyen.\n",
"L'**ATE** est honnête mais aveugle : il faut descendre a l'échelle de l'individu.\n",
"\n",
"Ce notebook fait ce que DoWhy-1 ne pouvait pas : utiliser la **structure du SCM\n",
"Ce notebook fait ce que CausalBridges-02 ne pouvait pas : utiliser la **structure du SCM\n",
"appris** pour rejouer le monde d'un individu sous une autre intervention\n",
"(abduction, action, prediction).\n"
]
Expand Down Expand Up @@ -239,7 +239,7 @@
"et d'une famille de mécanismes, puis l'utilise pour **rejouer** le monde d'un\n",
"individu sous une autre intervention.\n",
"\n",
"| Rung (Pearl) | Question | DoWhy-1 | DoWhy-2 |\n",
"| Rung (Pearl) | Question | CausalBridges-02 | CausalBridges-03 |\n",
"|---|---|---|---|\n",
"| Rung 1 — observation | Que s'est-il passé (avec le traitement) ? | l'estimand | la pente naïve + OLS |\n",
"| Rung 2 — intervention | Que se passerait-il si TOUS étaient traités ? | l'ATE, backdoor | l'ATE, décomposition |\n",
Expand Down Expand Up @@ -776,7 +776,7 @@
"\n",
"Le chiffre individuel est séduisant, il doit être **honnête**. Pour qu'il tienne :\n",
"\n",
"1. **Le graphe causal est connu** (ici : toujours celui de DoWhy-1, `V -> {T, Y}`, `T -> Y`) ;\n",
"1. **Le graphe causal est connu** (ici : toujours celui de CausalBridges-02, `V -> {T, Y}`, `T -> Y`) ;\n",
"2. **La famille de mécanismes est adéquate** : le bruit doit être additif et le\n",
" regresseur capable de la vraie forme — polynomial degré 2 pour une interaction ;\n",
"3. **L'abduction est exacte** : le bruit individuel est parfaitement déduit de\n",
Expand Down Expand Up @@ -978,7 +978,7 @@
"**Verdict honnête** : le contrefactuel individuel est exact ici parce que le\n",
"monde est connu, l'interaction polynomiale bien approchée et le bruit additive.\n",
"Sur le terrain, exiger : graphe identifié, mécanismes diagnostiqués, sensibilité\n",
"de spécification. La suite de la série (DoWhy-3) apprendra a **découvrir** le\n",
"de spécification. La suite de la série (CausalBridges-04) apprendra a **découvrir** le\n",
"graphe quand il est inconnu — la dernière carte non jouée ici.\n",
"\n",
"**Pour aller plus loin** : `dowhy_organs.py` (module canonique de ce notebook) —\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
"tags": []
},
"source": [
"# DoWhy-3 — La découverte de structure : le graphe qu'on n'a pas\n",
"# CausalBridges-04 — La découverte de structure : le graphe qu'on n'a pas\n\n> Renumerotation #17421 : ce carnet etait publie sous le nom DoWhy-3 ; les renvois internes de la serie citent desormais le numero courant.\n",
"\n",
"DoWhy-1 (section 4, « le graphe assumé ») identifie, estime et réfute un effet **sur un graphe donné**. Mais d'où vient ce graphe ? D'une expertise métier — ou des données elles-mêmes. Ce notebook traite la question que DoWhy-1 laissait ouverte : **que peut-on retrouver du graphe causal depuis les données seules, et où s'arrête exactement ce que les données peuvent dire ?**\n",
"CausalBridges-02 (section 4, « le graphe assumé ») identifie, estime et réfute un effet **sur un graphe donné**. Mais d'où vient ce graphe ? D'une expertise métier — ou des données elles-mêmes. Ce notebook traite la question que CausalBridges-02 laissait ouverte : **que peut-on retrouver du graphe causal depuis les données seules, et où s'arrête exactement ce que les données peuvent dire ?**\n",
"\n",
"**Moteurs** : [`causal-learn`](https://causal-learn.readthedocs.io/) pour la découverte (PC, GES, DirectLiNGAM — réellement exécutés, règle F / SOTA-OK), [`dowhy`](https://www.pywhy.org/dowhy/) pour le retour à l'estimand. Kernel `coursia-ml-training`.\n",
"\n",
"**Plan** : 1. un monde DGP-connu — 2. PC (contraintes) — 3. GES (score) — 4. la classe d'équivalence — 5. LiNGAM (hypothèse fonctionnelle) — 6. l'échec honnête — 7. l'ambiguïté se propage à l'estimand — 8. exercices — 9. synthèse.\n",
"\n",
"**Durée** : ~45 min. Prérequis : DoWhy-1 (estimand, backdoor), DAG, indépendance conditionnelle."
"**Durée** : ~45 min. Prérequis : CausalBridges-02 (estimand, backdoor), DAG, indépendance conditionnelle."
]
},
{
Expand Down Expand Up @@ -668,7 +668,7 @@
"\n",
"Trois faits mesurés sur ces deux seeds : le DAG rendu est **faux** (arêtes parasites, orientations inversées — `Y → C` au lieu de `C → Y`), il est **complet** (aucune arête ambiguë qui signalerait un doute), et il est **instable** (deux seeds gaussiens rendent des graphes différents). DirectLiNGAM ne détecte pas la violation de sa propre hypothèse — il produit toujours un DAG.\n",
"\n",
"Diagnostics praticiens : (1) le **kurtosis** des résidus (une valeur ≈ 0 dit que l'hypothèse non gaussienne n'est pas tenable) ; (2) l'**instabilité inter-seeds**. Le verdict « cette orientation est soutenable » vient du praticien, jamais de la librairie — c'est la leçon structurelle de la série (`NON_IDENTIFIABLE` dans DoWhy-5, CPDAG ambigu ici : chaque fois, l'honnêteté est un résultat, pas un échec)."
"Diagnostics praticiens : (1) le **kurtosis** des résidus (une valeur ≈ 0 dit que l'hypothèse non gaussienne n'est pas tenable) ; (2) l'**instabilité inter-seeds**. Le verdict « cette orientation est soutenable » vient du praticien, jamais de la librairie — c'est la leçon structurelle de la série (`NON_IDENTIFIABLE` dans CausalBridges-06, CPDAG ambigu ici : chaque fois, l'honnêteté est un résultat, pas un échec)."
]
},
{
Expand All @@ -687,7 +687,7 @@
"source": [
"## 7. L'ambiguïté se propage à l'estimand — le pont dowhy\n",
"\n",
"DoWhy-1 identifie un estimand **sur un graphe**. Reprenons le CPDAG découvert en section 2 : ses 3 extensions valides sont 3 graphes causaux incompatibles. Sur les **mêmes données**, chacune mène à un ensemble d'ajustement différent — donc à un estimand différent. L'effet total vrai de `X` sur `Y` vaut `COEF_X_M · COEF_M_Y = 0.8`."
"CausalBridges-02 identifie un estimand **sur un graphe**. Reprenons le CPDAG découvert en section 2 : ses 3 extensions valides sont 3 graphes causaux incompatibles. Sur les **mêmes données**, chacune mène à un ensemble d'ajustement différent — donc à un estimand différent. L'effet total vrai de `X` sur `Y` vaut `COEF_X_M · COEF_M_Y = 0.8`."
]
},
{
Expand Down Expand Up @@ -756,7 +756,7 @@
"\n",
"`0.81` en ajustant `{C}` (le DAG vrai), `0.22` en ajustant `{M}` (l'extension qui prend M pour parent de X — ajuster le médiateur écrase la part médiatisée), `1.05` sans rien ajuster (l'extension où X est racine — le confondeur n'est plus confondeur). **Aucune donnée supplémentaire, aucun `n` plus grand** ne tranche entre ces trois mondes gaussiens : le choix d'une extension est une **hypothèse causale assumée**, pas un réglage statistique.\n",
"\n",
"C'est la chaîne complète de la série : **découverte** (ce notebook) → hypothèse de graphe (DoWhy-1 §4) → identification → estimation → réfutation. Chaque flèche de cette chaîne ne supprime jamais une ambiguïté : elle la convertit en hypothèse explicite."
"C'est la chaîne complète de la série : **découverte** (ce notebook) → hypothèse de graphe (CausalBridges-02 §4) → identification → estimation → réfutation. Chaque flèche de cette chaîne ne supprime jamais une ambiguïté : elle la convertit en hypothèse explicite."
]
},
{
Expand Down Expand Up @@ -968,7 +968,7 @@
"\n",
"Les trois verdicts honnêtes du notebook : **CPDAG ambigu = un résultat** (l'ambiguïté est la borne exacte des données gaussiennes) ; **LiNGAM silencieux = un danger** (complétude n'est pas preuve — kurtosis et stabilité inter-seeds sont les gardes-fous) ; **ambiguïté du graphe = ambiguïté du chiffre** (le choix d'extension est causal, pas statistique).\n",
"\n",
"**Dans la constellation** : DoWhy-1 (le graphe assumé et sa sensibilité), DoWhy-5 (`NON_IDENTIFIABLE` est un résultat), `CausalBridges-07-Quasi-Experimental.ipynb` (la pratique observationnelle). L'organe `dowhy_discovery_organs.py` reste importable pour tout consommateur tiers — c'est la contrainte d'architecture de la série (#13921 : module canonique, jamais de duplication cell-scoped)."
"**Dans la constellation** : CausalBridges-02 (le graphe assumé et sa sensibilité), CausalBridges-06 (`NON_IDENTIFIABLE` est un résultat), `CausalBridges-07-Quasi-Experimental.ipynb` (la pratique observationnelle). L'organe `dowhy_discovery_organs.py` reste importable pour tout consommateur tiers — c'est la contrainte d'architecture de la série (#13921 : module canonique, jamais de duplication cell-scoped)."
]
}
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
"tags": []
},
"source": [
"# DoWhy-4 — Le confondeur non observé : sensibilité, pas certitude\n",
"# CausalBridges-05 — Le confondeur non observé : sensibilité, pas certitude\n\n> Renumerotation #17421 : ce carnet etait publie sous le nom DoWhy-4 ; les renvois internes de la serie citent desormais le numero courant.\n",
"\n",
"DoWhy-1 exigeait un estimand **nommé** ; DoWhy-3 découvrait le graphe avec sa\n",
"CausalBridges-02 exigeait un estimand **nommé** ; CausalBridges-04 découvrait le graphe avec sa\n",
"borne structurelle (le CPDAG ambigu). Il reste l'hypothèse qu'aucun graphe\n",
"observé ne peut trancher : **l'absence de confondeur NON OBSERVÉ**. On ne\n",
"peut ni la tester, ni la découvrir — on peut la **chiffrer**.\n",
Expand Down Expand Up @@ -1580,8 +1580,8 @@
" étant réduit de moitié ; aucune analyse de sensibilité ne remplace la\n",
" mesure du confondeur — elle dit combien elle coûte de l'ignorer.\n",
"\n",
"Série DoWhy (retour au [README](README.md)) : DoWhy-1 l'estimand, DoWhy-2 le\n",
"contrefactuel, DoWhy-3 le graphe, **DoWhy-4 le confondeur caché**, DoWhy-5\n",
"Série Causal-Bridges (retour au [README](README.md)) : CausalBridges-02 l'estimand, CausalBridges-03 le\n",
"contrefactuel, CausalBridges-04 le graphe, **CausalBridges-05 le confondeur caché**, CausalBridges-06\n",
"l'instrument faible.\n",
"\n",
"\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
"id": "768b91fc",
"metadata": {},
"source": [
"# DoWhy-5 — L'instrument faible : quand le pipeline IV rend un chiffre mais pas une cause\n",
"# CausalBridges-06 — L'instrument faible : quand le pipeline IV rend un chiffre mais pas une cause\n\n> Renumerotation #17421 : ce carnet etait publie sous le nom DoWhy-5 ; les renvois internes de la serie citent desormais le numero courant.\n",
"\n",
"**Série** : Inférence causale avec DoWhy (Probas, Python)\n",
"\n",
"**Prérequis** : `DoWhy-1` (identification), `DoWhy-2` (contrefactuel individuel), cellule 40 de `CausalBridges-07-Quasi-Experimental.ipynb` (2SLS from scratch). Notions de MCO, $d$-séparation, **et une lecture préalable de la cellule 40 (instrument faible from scratch)** est utile pour voir ce que `dowhy` automatise.\n",
"**Prérequis** : `CausalBridges-02` (identification), `CausalBridges-03` (contrefactuel individuel), cellule 40 de `CausalBridges-07-Quasi-Experimental.ipynb` (2SLS from scratch). Notions de MCO, $d$-séparation, **et une lecture préalable de la cellule 40 (instrument faible from scratch)** est utile pour voir ce que `dowhy` automatise.\n",
"\n",
"**Durée** : ~45 min\n",
"\n",
Expand Down Expand Up @@ -584,7 +584,7 @@
"\n",
"**Exercice 2 (F-stat vs n).** *Attendu* : F croît à peu près linéairement avec n à R² premier étage fixe — à force 0.05, R² = 0.0033 : F dépasse mécaniquement le seuil 10 pour n assez grand, *sans que l'instrument soit devenu meilleur*. Le seuil Staiger-Stock (F > 10) est une règle empirique calibrée sur le biais à n modéré, pas un théorème ; à n = 100 000, un F de 15 avec un R² de 0.003 reste un instrument dont la variation exogène est minuscule. *Anti-piège* : valider l'instrument sur le seul dépassement du seuil — rapporter le R² premier étage à côté du F, toujours.\n",
"\n",
"**Exercice 3 (DAG incomplet).** *Attendu* : dowhy identifie *sous le graphe fourni* — retirez l'arête médiateur X→M→Y et l'estimand change de forme (effet total vs effet direct deviennent indiscernables), retirez un confondeur observé et le backdoor devient invalide sans erreur visible. Le verdict `NON_IDENTIFIABLE` est une *réponse* (le graphe donné ne suffit pas), pas un échec de calcul. *Anti-piège* : « corriger » en ajoutant des arêtes jusqu'à obtenir un estimé — l'identification est conditionnelle au DAG déclaré ; embellir le DAG pour obtenir un chiffre, c'est fabriquer la conclusion recherchée (le lien avec DoWhy-3 est direct : si le DAG n'est pas connu, il est *découvert et assumé*, jamais deviné au service du résultat)."
"**Exercice 3 (DAG incomplet).** *Attendu* : dowhy identifie *sous le graphe fourni* — retirez l'arête médiateur X→M→Y et l'estimand change de forme (effet total vs effet direct deviennent indiscernables), retirez un confondeur observé et le backdoor devient invalide sans erreur visible. Le verdict `NON_IDENTIFIABLE` est une *réponse* (le graphe donné ne suffit pas), pas un échec de calcul. *Anti-piège* : « corriger » en ajoutant des arêtes jusqu'à obtenir un estimé — l'identification est conditionnelle au DAG déclaré ; embellir le DAG pour obtenir un chiffre, c'est fabriquer la conclusion recherchée (le lien avec CausalBridges-04 est direct : si le DAG n'est pas connu, il est *découvert et assumé*, jamais deviné au service du résultat)."
]
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"# Causal-Fairness — Décomposer la discrimination : l'analyse d'équité causale\n",
"\n",
"**Série** : Inference causale avec DoWhy (Probas, Python)\n",
"**Prérequis** : [Do-Calculus-Bridge](CausalBridges-01-Do-Calculus.ipynb) (l'échelle de Pearl : observation < intervention < contrefactuel) et [DoWhy-1](CausalBridges-02-Dowhy-Estimand-Intervention.ipynb) (l'identification backdoor avec `dowhy`).\n",
"**Prérequis** : [Do-Calculus-Bridge](CausalBridges-01-Do-Calculus.ipynb) (l'échelle de Pearl : observation < intervention < contrefactuel) et [CausalBridges-02 (ex-DoWhy-1)](CausalBridges-02-Dowhy-Estimand-Intervention.ipynb) (l'identification backdoor avec `dowhy`).\n",
"**Outil** : simulation Monte-Carlo à générateur connu + [`dowhy`](https://py-why.github.io/dowhy/) 0.14 pour l'identification pratique + [`pandas`](https://pandas.pydata.org/) sur le crédit allemand.\n",
"**Cadre formel** : Plecko & Bareinboim, *Causal Fairness Analysis* (FnT Machine Learning R-90, 2024), chapitres 3-4.\n",
"\n",
Expand Down Expand Up @@ -1275,7 +1275,7 @@
" quatre-cinquièmes ; *Griggs v. Duke Power*, 401 U.S. 424 (1971) ;\n",
"- **Dua & Graff**, UCI Machine Learning Repository — German Credit Data ;\n",
"- Notebooks de la constellation : [Do-Calculus-Bridge](CausalBridges-01-Do-Calculus.ipynb) (échelle de Pearl),\n",
" [DoWhy-1](CausalBridges-02-Dowhy-Estimand-Intervention.ipynb) (identification backdoor),\n",
" [CausalBridges-02 (ex-DoWhy-1)](CausalBridges-02-Dowhy-Estimand-Intervention.ipynb) (identification backdoor),\n",
" [Infer-5](../../Infer/Infer-5-Causal-Inference.ipynb) (médiation sur moteur .NET),\n",
" [PyMC-05](../../PyMC/PyMC-05-Causal-Inference.ipynb) (inférence bayésienne de l'effet)."
]
Expand Down
Loading