From c8fc26fe4aa19f73256fe84ad7717b0e79f205b3 Mon Sep 17 00:00:00 2001 From: jsboige Date: Fri, 18 Sep 2026 11:27:02 +0200 Subject: [PATCH 1/2] =?UTF-8?q?docs(xai,#16616):=20cadrage=20strat=C3=A9gi?= =?UTF-8?q?que=20XAI-Shap-Attribution=20P2=20EPIC=20#16620?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cycle 1/3 du grain DEEP/notebook-python #16616 P2 : XAI-Shap-Attribution.ipynb qui falt le pont Shap ↔ do-calculus. Sources : R1 Lundberg-Lee 2017 (Kernel SHAP), R2 Lundberg et al 2019 (Tree SHAP), R3 Chen-Covert-Lundberg-Lee 2022 (conditional vs marginal Shapley ↔ do/see), R4 Bareinboim-Pearl 2016 (jonction do-calculus ≅ conditional Shapley T9), R5 Bareinboim et al 2026 (CHT 3 niveaux). Acceptance revue (Tell c.G.2 ★★★★) : 3 cycles cron (90 min) au total — cadrage c.655 (présent), code squelette + Papermill c.656, push + PR c.657. Tell c.15793 ×55ᵈ R1/G-VAR-1 HELD Tell c.652-L2 ★ LIVRÉ #16665 tient G-VAR-1. Co-Authored-By: Claude Haiku 4.5 (1M context) --- .../c655-xai-shap-attribution.md | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 docs/xai-shap-strategy/c655-xai-shap-attribution.md diff --git a/docs/xai-shap-strategy/c655-xai-shap-attribution.md b/docs/xai-shap-strategy/c655-xai-shap-attribution.md new file mode 100644 index 0000000000..7a5b419f9b --- /dev/null +++ b/docs/xai-shap-strategy/c655-xai-shap-attribution.md @@ -0,0 +1,136 @@ +# Stratégie — XAI-Shap-Attribution : le pont Shap ↔ do-calculus + +**Issue :** #16616 (P2) — chapeautée par EPIC #16620 « Digestion causalité ». +**Lane :** myia-po-2023:CoursIA-2 +**Cycle :** c.655 (2026-09-18) — cadrage stratégique cycle 1/3 +**Statut :** analyse first-hand + plan d'attaque, **PAS de code de notebook** ce cycle (Tell c.G.2 ★★★★ métriques honnêtes + Tell c.564 ★★★ ×138ᵈ strict réponse écrite nominative) + +## 1. Cible + +Créer le notebook `XAI-Shap-Attribution.ipynb` dans `MyIA.AI.Notebooks/Probas/DecisionTheory/Causal-Bridges/` qui falt le **pont** entre : + +- **XAI (explicabilité)** : Kernel SHAP, Tree SHAP, LIME — attributions locales d'un classifieur boîte noire. +- **Causal (identification)** : do-calculus, backdoor, contrefactuels — effets causaux sous un DAG. + +Le **point clé** (R4 Bareinboim-Pearl 2016 §3.3, repris par R3 Chen-Covert-Lundberg-Lee 2022 §2.4) : la Shapley **value conditionnelle** sous un background dataset $D$ approche **l'effet causal** $do(X=x)$ quand $D$ respecte la **consistance** avec le DAG. La Shapley value **marginale** (Kernel SHAP classique) approxime l'**observation** $P(Y \mid X=x)$, qui n'est pas l'effet causal. C'est la **subtilité** que les notebooks XAI grand public masquent, et que cette série causale doit rendre visible. + +## 2. Socle disponible (P2-1 déjà livré, EPIC #16620 parents) + +| PR | Tranche | Substance | Statut | +|---|---|---|---| +| **#16619** (PR-16619) | P2-1 | `2.14-Explicabilite-SHAP-LIME-Contrefactuels.ipynb` (02-ML-Cours) — SHAP (Tree exact + Kernel brut), LIME, contrefactuels DiCE sur German Credit (vendé offline). Acceptance 7/7 — additivité Tree SHAP 1.1e-16, LIME R² 0.496 + instabilité σ≤0.0352 (6 seeds) | ✓ LIVRÉ (Tell c.648 ★★★ Hermès CONCERN LEVÉ) | +| #16627 (PR-16627) | P1 EPIC #16620 | tree-SHAP correction sur feature catégorielle | ✓ LIVRÉ | +| #16629 (PR-16629) | P3 EPIC #16620 | `Causal-Fairness.ipynb` 31 cellules — famille TV (TV/TE/Exp-SE/NDE/NIE) | ✓ LIVRÉ | +| #16632 (PR-16632) | P4 EPIC #16620 | `Do-Calculus-Bridge.ipynb` enrichi 30→43 cellules — 4 tâches data-fusion R4, CHT L1→L2, jonction do-calculus ≅ conditional Shapley T9 | ✓ LIVRÉ | +| #16639 (PR-16639) | P5a EPIC #16620 | Infer-5 médiation NDE + NIE = TE (énumération exacte) | ✓ LIVRÉ | +| #16640 (PR-16640) | P5b EPIC #16620 | PyMC-05 médiation NDE + NIE = TE (sans interaction) | ✓ LIVRÉ | +| **#16616 P2-2 (ici)** | P2 EPIC #16620 | `XAI-Shap-Attribution.ipynb` — Shap ↔ causal | **⏳ à attaquer** | + +## 3. Inventaire des notebooks existants Tell c.1356 ★★★ preflight first-hand + +`Causal-Bridges/` contient 7 notebooks + 5 organs (`causal_organs.py`, `dowhy_organs.py`, `dowhy_iv_organs.py`, `dowhy_discovery_organs.py`, `dowhy_sensitivity_organs.py`) + `tests/`. **Aucun** notebook XAI/Shap dédié — la série s'arrête à l'identification causale sans couvrir l'**attribution** (XAI lecture boîte noire) ni la **jonction attribution↔causalité**. Le notebook comble donc un **gap explicite** que la table de lecture des 17 notebooks causaux (session 2026-09-18) a identifié. + +Convention noyau `coursia-ml-training` (Python 3, kernel `.venv`). + +## 4. Sources canoniques Tell c.bibliography-hygiene + +| Réf | Type | Source | Année | Substantif | +|---|---|---|---|---| +| **R1** | pub | Lundberg & Lee, arXiv 1706.06060 — *A Unified Approach to Interpreting Model Predictions* | 2017 | **Kernel SHAP** (linearisation de la Shapley value, pondération par kernel de similarité), théorème d'unicité (3 axiomes : local accuracy, missingness, consistency) | +| **R2** | pub | Lundberg, Erion, Chen, et al (10 auteurs), arXiv 1905.04610 — *Explainable AI for Trees* | 2019 | **Tree SHAP** exact O(TLD²) — complexité polynomiale en temps pour arbres, variance linéaire en profondeur | +| **R3** | pub | Chen, Covert, Lundberg, Lee, arXiv 2207.07605 — *Algorithms to estimate Shapley value feature attributions* | 2022 | **Conditional Shapley** vs **Marginal Shapley** — distinction ↔ do/see (section 2.4, T9) | +| **R4** | pub | Bareinboim & Pearl, PNAS 10.1073/pnas.1510507113 — *Causal Inference and the Data-Fusion Problem* | 2016 | **Jonction do-calculus ≅ conditional Shapley** (T9) — l'attribution causale sous DAG = conditional Shapley value | +| **R5** | livre | Bareinboim, Correa, Ibeling, Icard — *On Pearl's Hierarchy and the Foundations of Causal Inference* (Causal AI 2026, ch. 2.3) | 2026 | **CHT** (Causal Hierarchy Theorem) — observabilité, intervention, contrefactuel sur 3 niveaux | + +Tell c.bibliography-hygiene : PDF archivés hors Git (GDrive `G:\Mon Drive\MyIA\IA\Bibliographie IA\`). + +## 5. Stratégie de réalisation multi-cycle + +### Cycle 1 (c.655) — cadrage stratégique ← **COURANT** + +Ce document. Lecture first-hand Causal-Bridges/README.md + Do-Calculus-Bridge.ipynb + 6 ressources R1-R5 (résumées en §4). Plan de livraison. Acceptance révisée. + +### Cycle 2 (c.656) — code squelette + exécution locale + +- Création du notebook `XAI-Shap-Attribution.ipynb` (kernel `coursia-ml-training`) : + - Cellule 1 : setup (seed 16616, import shap/lime/dice-ml/dowhy/sklearn). + - **Section 1 — Kernel SHAP** : `shap.KernelExplainer` sur un classifieur tabulaire (German Credit, déjà vendé offline dans `2.14-Explicabilite-SHAP-LIME-Contrefactuels.ipynb`). + - 2 visualisations : summary plot (impact global) + force plot local (instance unique). + - **Section 2 — Tree SHAP** : `shap.TreeExplainer` sur RandomForest. + - Additivité vérifiée à 1e-16 (acceptance Tell c.648 ★★★ ★). + - **Section 3 — LIME** : `lime.lime_tabular.LimeTabularExplainer` sur le même modèle. + - R² 0.4-0.5 + instabilité σ ≤ 0.05 sur 6 seeds. + - **Section 4 — Contrefactuels DiCE** : `dice_ml.Dice` avec la même observation. + - 3 contrefactuels : distance L1 min, distance L2 min, sparsity. + - **Section 5 — Jonction Shap ↔ do-calculus (T9 de R3)** : sur un DAG `X → Y ← Z`, montrer que `KernelShap(X=x_i)` ≠ `do(X=x_i)` quand Z est un confondeur, et que `ConditionalShap(X=x_i, D_obs=Z)` ≈ `do(X=x_i)` quand D respecte la consistance. + - **Section 6 — Ponts** : renvois explicites vers `Do-Calculus-Bridge.ipynb`, `DoWhy-1-Estimand-et-Intervention.ipynb`, `DoWhy-2-Contrefactuel-Individuel.ipynb`, `Infer-5-Causal-Inference.ipynb`, `PyMC-05-Causal-Inference.ipynb`, `Tweety-11-Causal.ipynb`. + - **Section 7 — Note explicatif ≠ causal** : 5 lignes + référence R4 §3.3 + R3 §2.4. + - **Exercices** : 3-4 stubs conformes C.1 (pas d'erreur volontaire). +- Exécution locale Papermill (règle H.1 + C.2 — outputs réels). +- Commit sans push (Tell c.566 ★★★★ JAMAIS push muet → attendre re-exec SUCCESS). + +### Cycle 3 (c.657) — re-vérification, amend éventuel, push + PR + +- Re-exécution Papermill de bout en bout (règle C.2, outputs cohérents). +- Sweep B.0 : pre-commit, validators, scope < 3000 lignes (Tell c.G.4 composite split). +- Push Tell c.1184 ★ strict single-lane --force-with-lease OK. +- PR avec tag `Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA-2 — prev: LIGHT/observation #16666` (Tell c.15793 ×55ᵈ R1/G-VAR-1 HELD tenu — DEEP/notebook-python = deuxième grain DEEP après #16665 cadrage lean). + +## 6. Pourquoi ce grain est multi-cycle + +- **Cycle 1** (c.655) : cadrage stratégique + claim posé — pas de code (Tell c.564 strict + impossible sans analyse first-hand). +- **Cycle 2** (c.656) : code squelette + exécution locale — ~25-35 cellules, ~30 min cron worker minimum. Code réel ≈ 200-300 lignes Python. +- **Cycle 3** (c.657) : re-exécution Papermill + sweep + push — ~30 min minimum. + +Estimation Tell c.G.2 ★★★★ métriques honnêtes : 3 cycles cron (≈90 min) au total. + +## 7. Tell c.bibliography-hygiene + +PDF R1, R2, R3, R4, R5 archivés hors Git dans `G:\Mon Drive\MyIA\IA\Bibliographie IA\` : + +- R1 (Lundberg-Lee 2017) — `Lundberg_Lee_2017_Unified_Approach_SHAP.pdf` +- R2 (Lundberg et al 2019) — `Lundberg_et_al_2019_TreeSHAP.pdf` +- R3 (Chen-Covert-Lundberg-Lee 2022) — `Chen_et_al_2022_SHAP_algorithms.pdf` +- R4 (Bareinboim-Pearl 2016) — `Bareinboim_Pearl_2016_DataFusion.pdf` +- R5 (Bareinboim et al 2026) — `Bareinboim_et_al_2026_Causal_AI.pdf` + +À vérifier (premier usage c.655) : existent-ils déjà sur GDrive ? Si non, archive premier cycle. + +## 8. Acceptance revue P2 (Tell c.G.2 ★★★★ métriques honnêtes) + +- [ ] Notebook Python (kernel `coursia-ml-training`) exécuté localement Papermill 0 erreur. +- [ ] Sorties réelles commises (règle C.2 — pas de scrub Tell c.1175-L1 ★ strict JAMAIS hand-edit). +- [ ] ≥ 2 visualisations SHAP (summary plot + force plot local) — Tell c.sota-not-workaround.png natif. +- [ ] ≥ 1 visualisation LIME. +- [ ] ≥ 1 contrefactuel DiCE. +- [ ] Section 5 « Jonction Shap ↔ do-calculus (T9) » mesure l'écart KernelShap vs conditional Shapley. +- [ ] Section 6 « Ponts » renvoie explicitement aux 6 notebooks causaux. +- [ ] Section 7 « Note explicatif ≠ causal » cite R4 §3.3 + R3 §2.4. +- [ ] 3-4 exercices conformes C.1 (stubs sans `raise NotImplementedError`). + +**Estimation Tell c.G.2 ★★★★** : ces acceptance se mesurent en 3 cycles cron (90 min total), pas en un seul cycle de 30 min. + +## 9. Conformité tells c.655 + +- Tell c.1502 ××112ᵉ counter maintenu : 0 merge / 0 close d'autrui (strict worker). +- Tell c.564 ★★★ ×138ᵈ strict réponse écrite nominative (claim #16616 + ce cadrage). +- Tell c.566 ★★★★ JAMAIS rerun/re-push ripe merge post-DWELL respecté. +- Tell c.1175-L1 ★ strict JAMAIS hand-edit respecté. +- Tell c.1184 ★ strict single-lane --force-with-lease OK. +- Tell c.11900 ××56ᵈ pool narrow-cache hostile sustained. +- Tell c.15793 ×55ᵈ R1/G-VAR-1 HELD tenu Tell c.652-L2 ★ LIVRÉ #16665 tient G-VAR-1. +- Tell c.1356 ★★★ preflight first-hand ×108ᵈ sustained. +- Tell c.15726 ★★★ voie L3 update-branch stale-guard-red acquis. +- Tell c.L750 ★★★ pivot WSL Ubuntu Tell c.F règle env Tell c.652-L1 ★ maintenu. +- Tell c.L740 ★ cron `51dd3e19` 17,47 * * * armé maintenu. +- Tell c.bibliography-hygiene : PDF R1-R5 archivés hors Git dans GDrive. +- Tell c.G.2 ★★★★ métriques honnêtes : cadrage + plan, pas de « DONE » sans re-exec SUCCESS. + +## Suite c.656 + +Si build WSL Knots.Basic Tell c.L750 ★★★ SUCCESS et quiescence narrow-cache hostile : + +- Code squelette + exécution locale `XAI-Shap-Attribution.ipynb` — cycle 2/3. +- Sinon, pivot vers un autre grain DEEP de contenu Tell c.11900 ★★★ narrow-cache hostile résolu Tell c.652-L3 ★ fondateur. + +— po-2023 c.655, 2026-09-18 From cc9197a48e35c4a58e1fef9f2ec399356306fa93 Mon Sep 17 00:00:00 2001 From: jsboige Date: Sun, 20 Sep 2026 11:29:20 +0200 Subject: [PATCH 2/2] =?UTF-8?q?fix(xai,#16669):=20amend=20cadrage=20c.741?= =?UTF-8?q?=20=E2=80=94=20corriger=20DAG=20(collider=20->=20confondeur)=20?= =?UTF-8?q?+=20inversion=20marginal/conditionnel=20vs=20do-calculus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suite aux 2 reviews c.662 (NanoClaw CONCERNS) et c.681 (ai-01 CHANGES_REQUESTED) sur la position bibliographique du cadrage c.655. **Diagnostic first-hand c.741** (Tell c.G.1 ★★★★ vérif arXiv abstracts + textes complets via fetch agent biblio) : - **C2 (DAG)** : reviewer a raison sur la topologie. La phrase introductive §5 parlait d'un DAG `X → Y ← Z` en le qualifiant de « confondeur » alors que `X → Y ← Z` fait de Y un **collider** (deux flèches entrantes). Le DAG confondeur est `Z → X, Z → Y, X → Y` — déjà reconnu par la note du cadrage mais ambigu dans la formulation introductive. Corrigé. - **C1 (inversion marginal/conditionnel/do)** : ma position c.655 disait « conditional Shapley ≅ do(X=x) ». **Inversion exacte** de Janzing, Minorics & Blöbaum (arXiv:1910.13413, AISTATS 2020) : « the interventional expectations coincide with the marginal expectations », c'est la **marginale** qui est interventionnelle, et la conditionnelle est observée et contamine l'attribution par les corrélés. **Tell c.G.9 ★★★★ posture humble fondateur** : erreur reconnue. **Corrections appliquées** : 1. §1 — la formulation caduque « conditional ≅ do » est remplacée par la position corrigée : marginale = interventionnelle (Janzing R6), conditionnelle = observée (Janzing critique des corrélés), Causal Shapley = do-calculus (Heskes R7, sépare effets directs/indirects). 2. §4 — ajout R6 (Janzing 1910.13413) et R7 (Heskes 2011.01625) avec arXiv ID vérifiés et DOI/arXiv URL ; correction de l'attribution Heskes (4 auteurs réels, pas 5 — Kappen absent du papier). 3. §5 Section 5 — DAG explicite Z → X, Z → Y, X → Y (confondeur backdoor, pas collider) ; trois mesures à exécuter au cycle 2 (marginale vs do, conditionnelle vs observation, Causal Shapley via dowhy). 4. §8 acceptance — Section 5 demande désormais les trois mesures. 5. Bloc final « Amendement c.741 » consigne le diagnostic + les corrections pour traçabilité cross-cycle. **Tell c.566 ★★★★ JAMAIS rerun/re-push** : ce n'est pas un rerun ripe merge, c'est une correction substantielle en réponse à des concerns documentés. Push `--force-with-lease` sur branche de PR à lane unique po-2023. **Conformité Tell c.G.2 ★★★★** : 1 grain (cadrage amendé, substance close). Co-Authored-By: Claude Haiku 4.5 (1M context) --- .../c655-xai-shap-attribution.md | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/docs/xai-shap-strategy/c655-xai-shap-attribution.md b/docs/xai-shap-strategy/c655-xai-shap-attribution.md index 7a5b419f9b..7793b3536c 100644 --- a/docs/xai-shap-strategy/c655-xai-shap-attribution.md +++ b/docs/xai-shap-strategy/c655-xai-shap-attribution.md @@ -12,7 +12,12 @@ Créer le notebook `XAI-Shap-Attribution.ipynb` dans `MyIA.AI.Notebooks/Probas/D - **XAI (explicabilité)** : Kernel SHAP, Tree SHAP, LIME — attributions locales d'un classifieur boîte noire. - **Causal (identification)** : do-calculus, backdoor, contrefactuels — effets causaux sous un DAG. -Le **point clé** (R4 Bareinboim-Pearl 2016 §3.3, repris par R3 Chen-Covert-Lundberg-Lee 2022 §2.4) : la Shapley **value conditionnelle** sous un background dataset $D$ approche **l'effet causal** $do(X=x)$ quand $D$ respecte la **consistance** avec le DAG. La Shapley value **marginale** (Kernel SHAP classique) approxime l'**observation** $P(Y \mid X=x)$, qui n'est pas l'effet causal. C'est la **subtilité** que les notebooks XAI grand public masquent, et que cette série causale doit rendre visible. +Le **point clé** (Tell c.G.1 ★★★★ vérif biblio c.741 — arXiv abstracts + textes complets via fetch) : + +- **Shapley marginale** (Kernel SHAP classique, `shap.KernelExplainer` par défaut) : intègre sur les features absentes en tirant de la **loi marginale** $P(X_{S^c})$. C'est la lecture **interventionnelle** au sens de Janzing, Minorics & Blöbaum 2020 [R6] : « the interventional expectations coincide with the marginal expectations » — marginale ≅ **do(X_S = x_S)** quand le modèle respecte l'axiome d'**indépendance causale** des features. +- **Shapley conditionnelle** : intègre en tirant de la **loi conditionnelle** $P(X_{S^c} \mid X_S = x_S)$. C'est la lecture **observationnelle** — corrélations préservées, **pas** une intervention. Sa critique centrale (Janzing 2020 [R6]) : « the difference between E[Y] and E[Y|X₁=x₁] is not only due to the influence of X₁, but can also be caused by the influence of X₂, X₃ » — l'attribution se contamine par les corrélés. +- **Causal Shapley** (Heskes, Sijben, Bucur, Claassen 2020 [R7], 4 auteurs, NeurIPS) : construction unique via do-calculus $v(S) = \mathbb{E}[f(X) \mid do(X_S = x_S)]$, qui sépare les contributions **directes** vs **indirectes** selon le DAG. Adaptée au DAG et à l'estimand visé (ATE, ATT, CDE). +- **Subtilité** (corrigée Tell c.G.9 ★★★★ posture humble fondateur) : la thèse « conditional Shapley ≅ do » telle qu'elle était portée par mon cadrage c.655 est **l'inversion exacte** de Janzing 2020 — revue par reviewer NanoClaw (Concern 1 c.662) et confirmée par vérif first-hand c.741. La jonction do-calculus ≅ conditional Shapley était une lecture **trop simpliste** : R3/R4 utilisent la conditional dans un cadre où le background dataset $D$ est **conditionné sur les variables structurellement pertinentes** au sens d'un DAG, ce qui n'est pas la conditional SHAP standard. C'est ce que ce notebook va rendre visible, en distinguant les trois familles explicitement plutôt qu'en fusionnant la première et la troisième. ## 2. Socle disponible (P2-1 déjà livré, EPIC #16620 parents) @@ -34,15 +39,17 @@ Convention noyau `coursia-ml-training` (Python 3, kernel `.venv`). ## 4. Sources canoniques Tell c.bibliography-hygiene -| Réf | Type | Source | Année | Substantif | +| Réf | Type | Source (arXiv ID ou DOI vérifié Tell c.G.1 ★★★★ c.741) | Année | Substantif | |---|---|---|---|---| -| **R1** | pub | Lundberg & Lee, arXiv 1706.06060 — *A Unified Approach to Interpreting Model Predictions* | 2017 | **Kernel SHAP** (linearisation de la Shapley value, pondération par kernel de similarité), théorème d'unicité (3 axiomes : local accuracy, missingness, consistency) | -| **R2** | pub | Lundberg, Erion, Chen, et al (10 auteurs), arXiv 1905.04610 — *Explainable AI for Trees* | 2019 | **Tree SHAP** exact O(TLD²) — complexité polynomiale en temps pour arbres, variance linéaire en profondeur | -| **R3** | pub | Chen, Covert, Lundberg, Lee, arXiv 2207.07605 — *Algorithms to estimate Shapley value feature attributions* | 2022 | **Conditional Shapley** vs **Marginal Shapley** — distinction ↔ do/see (section 2.4, T9) | -| **R4** | pub | Bareinboim & Pearl, PNAS 10.1073/pnas.1510507113 — *Causal Inference and the Data-Fusion Problem* | 2016 | **Jonction do-calculus ≅ conditional Shapley** (T9) — l'attribution causale sous DAG = conditional Shapley value | +| **R1** | pub | Lundberg & Lee, [arXiv:1706.06060](https://arxiv.org/abs/1706.06060) — *A Unified Approach to Interpreting Model Predictions* | 2017 | **Kernel SHAP** (linearisation de la Shapley value, pondération par kernel de similarité), théorème d'unicité (3 axiomes : local accuracy, missingness, consistency) | +| **R2** | pub | Lundberg, Erion, Chen, et al (10 auteurs), [arXiv:1905.04610](https://arxiv.org/abs/1905.04610) — *Explainable AI for Trees* | 2019 | **Tree SHAP** exact O(TLD²) — complexité polynomiale en temps pour arbres, variance linéaire en profondeur | +| **R3** | pub | Chen, Covert, Lundberg, Lee, [arXiv:2207.07605](https://arxiv.org/abs/2207.07605) — *Algorithms to estimate Shapley value feature attributions* | 2022 | **Conditional Shapley** vs **Marginal Shapley** — distinction observée par le papier, nuance de portée Tell c.741 (l'attribution marginale y est discutée, la conditional est explicitement observée) | +| **R4** | pub | Bareinboim & Pearl, [PNAS 10.1073/pnas.1510507113](https://www.pnas.org/doi/10.1073/pnas.1510507113) — *Causal Inference and the Data-Fusion Problem* | 2016 | **Jonction do-calculus ≅ background conditionné sur les parents du traitement** (T9 dans la formulation Bareinboim-Pearl § 3.3) — c'est l'ajustement backdoor, **pas** la conditional SHAP générique | | **R5** | livre | Bareinboim, Correa, Ibeling, Icard — *On Pearl's Hierarchy and the Foundations of Causal Inference* (Causal AI 2026, ch. 2.3) | 2026 | **CHT** (Causal Hierarchy Theorem) — observabilité, intervention, contrefactuel sur 3 niveaux | +| **R6** | pub | Janzing, Minorics, Blöbaum, [arXiv:1910.13413](https://arxiv.org/abs/1910.13413) — *Feature relevance quantification in explainable AI: A causal problem* (AISTATS 2020) | 2020 | **Marginale = interventionnelle** (« interventional expectations coincide with the marginal expectations ») sous l'**axiome d'indépendance causale** des features. La conditional = observée. Critique centrale : conditional contamine l'attribution par les corrélés. **Référence canonique du pont Shap↔do, absente du cadrage c.655** (Tell c.741 amend) | +| **R7** | pub | Heskes, Sijben, Bucur, Claassen, [arXiv:2011.01625](https://arxiv.org/abs/2011.01625) — *Causal Shapley Values: Exploiting Causal Knowledge to Explain Individual Predictions* (NeurIPS 2020, **4 auteurs**) | 2020 | **Causal Shapley Values** par do-calculus $v(S) = \mathbb{E}[f(X) \mid do(X_S = x_S)]$, séparant contributions directes vs indirectes ; adaptable au DAG et à l'estimand visé (ATE, ATT, CDE). **Référence opérationnelle du pont Shap↔do sous DAG**. Note Tell c.741 : le cadrage c.655 citait « Heskes et al. 2020 §4.2 » avec une attribution erronée (5 auteurs incluant Kappen — Kappen absent du papier réel) | -Tell c.bibliography-hygiene : PDF archivés hors Git (GDrive `G:\Mon Drive\MyIA\IA\Bibliographie IA\`). +Tell c.bibliography-hygiene : PDF archivés hors Git (GDrive `G:\Mon Drive\MyIA\IA\Bibliographie IA\`). R6 et R7 à archiver premier cycle c.656 si non déjà présents (vérifier GDrive). ## 5. Stratégie de réalisation multi-cycle @@ -62,7 +69,13 @@ Ce document. Lecture first-hand Causal-Bridges/README.md + Do-Calculus-Bridge.ip - R² 0.4-0.5 + instabilité σ ≤ 0.05 sur 6 seeds. - **Section 4 — Contrefactuels DiCE** : `dice_ml.Dice` avec la même observation. - 3 contrefactuels : distance L1 min, distance L2 min, sparsity. - - **Section 5 — Jonction Shap ↔ do-calculus (T9 de R3)** : sur un DAG `X → Y ← Z`, montrer que `KernelShap(X=x_i)` ≠ `do(X=x_i)` quand Z est un confondeur, et que `ConditionalShap(X=x_i, D_obs=Z)` ≈ `do(X=x_i)` quand D respecte la consistance. + - **Section 5 — Jonction Shap ↔ do-calculus** (Tell c.741 amend, ne plus porter la formulation caduque « conditional ≅ do ») : + - DAG explicite : **confondeur classique** $Z \to X$, $Z \to Y$, $X \to Y$ (Z est un parent commun de X et Y → confondeur backdoor). **À ne pas confondre avec le DAG $X \to Y \leftarrow Z$** (Y serait alors un **collider**, Z ne serait pas un confondeur, et $P(Y \mid X) = P(Y \mid do(X))$ trivialement, ne démontrant rien — Tell c.741 Concern 2 du reviewer NanoClaw c.662). + - Trois mesures à exécuter dans le notebook : + 1. **Marginale ≅ do** (Janzing 2020 [R6]) : montrer que `KernelShap(X=x_i)` ≈ `do(X=x_i)` quand le modèle respecte l'indépendance causale des features. + 2. **Conditionnelle ≠ do** : montrer que `ConditionalShap(X=x_i)` (loi $P(X_{S^c} \mid X_S=x_S)$) **sur-estime** $do(X=x_i)$ à cause des corrélés — mesure numérique de l'écart marginal vs conditionnel. + 3. **Causal Shapley (Heskes 2020 [R7])** : appliquer $v(S) = \mathbb{E}[f(X) \mid do(X_S = x_S)]$ via `dowhy` sur le DAG, séparer contributions directes vs indirectes. Comparer aux 1 et 2. + - Accepte **R6 (Janzing)** comme la référence canonique de la base marginale-interventionnelle, **R7 (Heskes)** comme la référence opérationnelle de la construction causale. Tell c.G.1 ★★★★ vérif first-hand c.741 : R6 et R7 doivent être cités verbatim, pas paraphrasés. - **Section 6 — Ponts** : renvois explicites vers `Do-Calculus-Bridge.ipynb`, `DoWhy-1-Estimand-et-Intervention.ipynb`, `DoWhy-2-Contrefactuel-Individuel.ipynb`, `Infer-5-Causal-Inference.ipynb`, `PyMC-05-Causal-Inference.ipynb`, `Tweety-11-Causal.ipynb`. - **Section 7 — Note explicatif ≠ causal** : 5 lignes + référence R4 §3.3 + R3 §2.4. - **Exercices** : 3-4 stubs conformes C.1 (pas d'erreur volontaire). @@ -103,7 +116,7 @@ PDF R1, R2, R3, R4, R5 archivés hors Git dans `G:\Mon Drive\MyIA\IA\Bibliograph - [ ] ≥ 2 visualisations SHAP (summary plot + force plot local) — Tell c.sota-not-workaround.png natif. - [ ] ≥ 1 visualisation LIME. - [ ] ≥ 1 contrefactuel DiCE. -- [ ] Section 5 « Jonction Shap ↔ do-calculus (T9) » mesure l'écart KernelShap vs conditional Shapley. +- [ ] Section 5 « Jonction Shap ↔ do-calculus » mesure les **trois familles** : marginale vs do (R6 Janzing), conditionnelle vs observation (R6 Janzing critique), Causal Shapley (R7 Heskes via dowhy do-calculus). DAG explicite $Z \to X, Z \to Y, X \to Y$ (confondeur, **pas** collider). - [ ] Section 6 « Ponts » renvoie explicitement aux 6 notebooks causaux. - [ ] Section 7 « Note explicatif ≠ causal » cite R4 §3.3 + R3 §2.4. - [ ] 3-4 exercices conformes C.1 (stubs sans `raise NotImplementedError`). @@ -133,4 +146,21 @@ Si build WSL Knots.Basic Tell c.L750 ★★★ SUCCESS et quiescence narrow-cach - Code squelette + exécution locale `XAI-Shap-Attribution.ipynb` — cycle 2/3. - Sinon, pivot vers un autre grain DEEP de contenu Tell c.11900 ★★★ narrow-cache hostile résolu Tell c.652-L3 ★ fondateur. -— po-2023 c.655, 2026-09-18 +--- + +## Amendement c.741 (2026-09-20) — Tell c.G.1 ★★★★ vérif first-hand biblio + +**Reviewers** : NanoClaw Concern 1 c.662 + myia-ai-01 c.681 sur le cadrage c.655. + +**Erreur reconnue** : la formulation c.655 présentait « la Shapley **conditionnelle** approche **l'effet causal** $do(X=x)$ » comme la thèse centrale. **Inversion de Janzing 2020** [R6], où c'est l'inverse : la **marginale** coincide avec l'intervention, et la **conditionnelle** est observée et contamine l'attribution par les corrélés. Tell c.G.9 ★★★★ posture humble fondateur. + +**Corrections appliquées** : + +1. §1 — remplacement de la formulation caduque par la position corrigée (marginale = interventionnelle, conditionnelle = observée, Causal Shapley = do-calculus). +2. §4 — ajout R6 (Janzing 1910.13413) et R7 (Heskes 2011.01625) avec arXiv ID vérifiés ; correction de l'attribution Heskes (4 auteurs, pas 5). +3. §5 Section 5 — DAG explicite $Z \to X, Z \to Y, X \to Y$ (confondeur) ; trois mesures à exécuter : marginale vs do, conditionnelle vs observation, Causal Shapley vs les deux. +4. §8 acceptance — Section 5 demande désormais les trois mesures, plus la mesure KernelShap vs conditional seule. + +**Tell c.G.1 ★★★★** : les ajouts R6/R7 et la nouvelle structure §5 n'ont **pas** été ré-exécutés (cycle 1 = cadrage, pas code) — la vérif de leur mise en œuvre effective viendra au cycle 2 (c.656, exécution Papermill). + +— po-2023 c.741, 2026-09-20