Skip to content

[Origami pli 1] CausalBridges-00-PearlLadder-Intro : motivation Snow/Doll-Hill, échelle de Pearl pas-à-pas (socle commun aux 8 plis à venir) #19310

Description

@jsboige

Grain: DEEP/notebook-python — lane myia-po-2027:CoursIA-2 — prev: DEEP/notebook-lean #19281

Sous-grain du Pli 1 de l'Epic origami #19309 « Compléter la constellation causale » (Epic parent ouvert en parallèle, voir aussi le commentaire d'état sur #19309). Pré-condition vide : ce pli est le socle, sans lequel les 8 plis suivants (P-09 Hernan, P-10 ML-CATE, P-11 Schölkopf 2021, P-12 Schölkopf 2012, P-13 Causal RL, P-14 Heckman, P-15 m-Transport, P-16 ATE-ATT-CATE systematic) n'ont pas de lecteur commun. Le prochain pli (P-09 Hernan) reste verrouillé jusqu'au merge et à la validation de celui-ci.

Le parent porte le programme et les sources (R-pearl 2009, R-scholkopf2021, R-hernan 2020, R-rubin 2005, R-bareinboim2016/2020, R-petersbook 2017, etc.) ; cette issue réserve un seul livrable atomique : CausalBridges-00-PearlLadder-Intro-Python.ipynb.

Livrable

  • Créer MyIA.AI.Notebooks/Probas/DecisionTheory/Causal-Bridges/CausalBridges-00-PearlLadder-Intro-Python.ipynb (noyau Python, kernel coursia-ml-training), exécuté bout-en-bout, committé avec outputs réels (C.2).
  • Motivation historique (cellule 0) : Snow/choléra 1854 (Broad Street pump) + Doll & Hill 1950 (smoking/lung cancer) — deux exemples où l'observation seule a été piégeuse et où la causalité a demandé un raisonnement supplémentaire. Figures matplotlib schématiques.
  • DAG 4 nœuds (cellule 1) : Z (confondeur, ex. aptitude) → X (traitement, ex. mentorat), X → Y (outcome, ex. score), Z → Y, plus M (médiateur, ex. effort) entre X et Y. Dessin networkx + export PNG.
  • P(y|x) (association) (cellule 2) : observation pure. Sur DGP semi-synthétique, montrer que P(Y|X=1) ≠ P(Y|do(X=1)) quand Z confond. C'est le barometer de Pearl §1.
  • P(y|do(x), z) (intervention) (cellule 3) : mutilation du graphe (Pearl §3.3) — supprimer l'arête Z → X, fixer X := x, puis estimer. Vérification par simulation : P(Y|do(X=1)) = E_Z[P(Y|X=1, Z)].
  • P(y_x | x₀, y₀) (contrefactuel individuel) (cellule 4) : abduction-action-prédiction (Pearl §9) sur 1 individu — pour 1 étudiant non traité à $V > 0$ ayant $Y=0.6$, estimer son $Y$ sous $T := 1$.
  • 5 exercices C.1 :
    1. Ajouter un second confondeur W (ex. motivation), étendre le DAG, vérifier l'identifiabilité.
    2. Vérifier P(Y|do(X)) reste identifiable (backdoor adjustment).
    3. Calculer le contrefactuel inverse (« aurait-il réussi sans mentorat ? » pour un étudiant traité à $V < 0$).
    4. Reproduire le paradoxe de Simpson (un effet qui s'inverse en agrégeant).
    5. Démontrer que voir le barometer ≠ le faire tomber (illustration causale).
  • 3 cellules-types vérifiées post-exec : cell 2 (P(Y|X) naïf), cell 3 (P(Y|do(X)) après mutilation), cell 4 (contrefactuel individuel) — outputs canoniques, execution_count non-null.
  • Bibliographie primaire en cellule dédiée : Pearl Causality 2009 (ch. 1, 3, 9) ; Hernan/Robins What If 2020 ch. 1-2 ; Schölkopf 2021 (2102.11107) §1.
  • Verdict SOTA documenté : SOTA-OK (Pearl + numpy + scipy + networkx + matplotlib, aucun GPU requis, aucun réseau neuronal, installable via pip sans secret).
  • README de la série Causal-Bridges : ajouter une ligne dans la table « Contenu » référençant ce notebook comme socle d'entrée commun aux 8 plis à venir.

Acceptation

  • Le notebook existe à MyIA.AI.Notebooks/Probas/DecisionTheory/Causal-Bridges/CausalBridges-00-PearlLadder-Intro-Python.ipynb, exécuté bout-en-bout, outputs commités (C.2).
  • execution_count non-null sur toutes les cellules code ; outputs cohérents (C.2) ; pas d'erreur volontaire (C.1 : stubs pass / return None / print("Exercice a completer")).
  • 3 cellules-types vérifiées post-exec : cell 2 (association naïve), cell 3 (intervention mutilée), cell 4 (contrefactuel individuel). Outputs canoniques documentés dans la PR.
  • 5 exercices C.1 présents, alignés à la convention dépôt (sans lever d'exception).
  • Bibliographie primaire en cellule dédiée (Pearl 2009 ch. 1/3/9, Hernan/Robins 2020 ch. 1-2, Schölkopf 2021 §1).
  • Verdict SOTA documenté en cellule dédiée (SOTA-OK argumenté).
  • README de la série Causal-Bridges mis à jour avec une ligne « CausalBridges-00 — PearlLadder-Intro | ~45 min | socle d'entrée commun aux plis à venir ».
  • PR Grain: DEEP/notebook-python — lane <lane> — prev: <prev> en première ligne, hors worktree (cf. gh-posting-hygiene.md).
  • PR reviewable : scope borné au seul notebook + 1 ligne README, pas de diffs collatéraux.
  • Issue de suivi ouverte si une dépendance (librairie, GPU, kernel) s'avère manquante.

Pré-condition et verrouillage

  • Pré-condition du Pli 1 : aucune. C'est le socle.
  • Verrouillage du Pli 2 (P-09 Hernan Target Trial Emulation) : verrouillé jusqu'à merge vérifié du Pli 1 par ai-01. Au merge, le coordinateur déplie par commentaire [PLI 2 DÉPLIÉ] sur l'Epic parent, créant la sous-issue P-09.
  • Pli 1 peut être pioché immédiatement par n'importe quelle lane Python (recommandation : lane myia-po-2025:CoursIA-2 ou myia-po-2027:CoursIA-2, par adjacence thématique avec la série Causal-Bridges).

Vérification avant de croire le scan (cf. audit-reassessment.md)

Le scratchpad/causal_scan.md session 2026-10-05 affirme qu'aucun notebook de la constellation ne pose l'échelle de Pearl pas-à-pas avant d'attaquer do-calculus. Vérification firsthand : CausalBridges-01 attaque « l'échelle de Pearl » mais suppose DAG + conditional proba acquis et entre directement dans les 3 règles du do-calculus. C'est conforme : le scan est correct, le Pli 1 comble un vrai manque (entrée pédagogique, pas redondance).

Ancrage aux refs cibles

  • R-pearl (Pearl Causality 2009, ch. 1) : la table d'exemples Snow/Doll-Hill est canonique.
  • R-hernan (Hernan/Robins What If 2020, ch. 1-2) : la reformulation « voir vs faire » en réponse à « qu'est-ce que l'inférence causale ? ».
  • R-scholkopf2021 (2102.11107) §1 : la motivation « pourquoi la causalité ? » en lien avec le machine learning.
  • R-bareinboim2016 (Pearl's Hierarchy, r60.pdf) §1 : la hiérarchie rungs 1-2-3.

Conventions

  • Noyau : Python 3, kernel coursia-ml-training (cf. CausalBridges-01).
  • Dépendances : numpy, scipy, networkx, matplotlib. Aucune GPU. Aucune API externe.
  • Anti-régression : ne pas dupliquer ce qui est déjà dans CausalBridges-01..08 — ce Pli 1 est avant CB-01, pas en doublon.
  • Pas de secret dans le notebook (règle secrets-hygiene.md).
  • Pas de scrub de sortie (règle 6 secrets-hygiene.md + sota-not-workaround.md Stop & Repair).

Audience

  • Étudiants EPITA/EPF/ECE qui abordent l'inférence causale via le dépôt.
  • Lecteurs du document greenpau Causal Inference.md qui veulent une entrée exécutable avant les ressources externes.
  • Lanes Python qui piochent un grain DEEP/CONTENU adjacent à l'IIT / Probabilités / Décision.

Part of #19309

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    EPICEpic tracking issue with sub-issues

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions