Skip to content

fix(docs,#17518): README 02-ML-Cours -- ligne 2.14b (pont attribution-causalite, DAG simule) - #17968

Merged
myia-ai-01 merged 4 commits into
mainfrom
feature/17518-readme-2.14b-row
Sep 28, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
feature/17518-readme-2.14b-row

Conversation

@jsboige

@jsboige jsboige commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/readme -- lane myia-po-2027:CoursIA-2 -- prev: MED/notebook-python #17697

fix(docs,#17518): README 02-ML-Cours -- ligne 2.14b (SHAP causal bridge) ajoutee a la table

Périmètre réel (alignement body sur diff)

Le body v1 / v2 annoncaient deux insertions (2.11e + 2.14b) sur la foi d'un audit disque qui avait trouve 2 trous. Le diff reel de la PR a la tete vivante 82f78be9bbe1 (merge-base main : c63f74cce ou superieur) ne contient qu'une seule insertion : la ligne 2.14b-XAI-Shap-Attribution-Causal-Bridge, au format des lignes voisines de la table (sujet, mesure-phare, donnees), juste apres la ligne 2.14-Explicabilite-SHAP-LIME-Contrefactuels.

git diff --stat origin/main...82f78be9bbe1 :

 MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Le seul -1 supprime la mention « ; la foret de 2.14 en extension optionnelle » a la fin de la ligne (la cellule 3 du carnet affiche « Modele 2.14 absent » ; la foret aleatoire 2.14 n'est pas entrainée, ni en chemin nominal, ni en extension -- voir 82f78be9 du 2026-09-28, reponse a la reserve ai-01 c.5859295409 du 27/09 19:09Z).

Pourquoi une seule ligne, et non deux

L'audit v1 (cycle c.885, 2026-09-26) avait bien identifie deux trous dans la table README par rapport au disque : 2.11e-CVXPY-Optimisation et 2.14b-XAI-Shap-Attribution-Causal-Bridge. La PR #17968 a ete ouverte pour fermer les deux en un seul geste.

Mais entre l'ouverture de #17968 et le push de la tete vivante 906de5a5b2, la PR #17960 a ete mergee et a ajoute la ligne 2.11e-CVXPY-Optimisation dans la table. Au moment ou la PR #17968 est prete a merger, la table sur main ne presente plus qu'un seul trou : la ligne 2.14b. La PR ne sert donc que cette ligne.

C'est le point que l'[OVERRIDE] d'ai-01 du 27/09 13:24:30Z releve : « La tete ne touche plus la ligne 2.11e : git diff origin/main...906de5a5b2 n'ajoute qu'une ligne, celle de 2.14b. La ligne 2.11e presente sur main vient de #17960. ».

Contenu de l'insertion (verbatim, 1 ligne ajoutee -- reecrite post-#18127 puis nettoyee post-#17968)

Pont attribution <-> causalite -- Kernel SHAP marginal contre Tree SHAP conditionnel sur un DAG explicite (age -> credit_amount -> default), sur l'individu idx=773 ; puis LIME, DiCE et un contrefactuel age=42 | L'attribution reste une fonction du background dataset : ecarts marginal/conditionnel en valeur absolue mais meme signe des contributions ; l'additivite se verifie (base + somme phi = 0.9400 vs P(default|x) = 0.940) ; un contrefactuel (age=42, f(x') = 0.7200) n'est pas une intervention do(.) -- l'exercice 3 (les distinguer) reste a completer | DAG simule (2 features, 1000 individus)

Deux passes successives :

  • 609d873 (Sonnet 5, 2026-09-28 03:45Z) : retrait des claims les plus voyants (pickle, German Credit, do(age)) -- reserve jsboige 21:09Z + ai-01 01:24Z.
  • 82f78be9 (Haiku, ce cycle) : retrait de la mention residuelle « la foret de 2.14 en extension optionnelle » -- la cellule 3 du carnet affiche « Modele 2.14 absent », donc meme en extension la foret n'est pas entrainée. Mention infidele aux sorties committees, levée par la reserve ai-01 c.5859295409.

La ligne décrit maintenant les sorties committes du carnet sur main : DAG simule, additivite base + somme = +0.9400, contrefactuel f(x') = 0.7200 -- toutes trois verifiees dans les outputs du carnet a la tete de merge. Le claim do(age) non mesure est retiré (le contrefactuel n'est pas une intervention ; l'exercice 3 reste un stub a completer, dit honnetement dans la ligne).

Le défaut de fond (la cellule 3 du carnet affiche « Modele 2.14 absent » alors que la prose de 2.14b évoque une forêt SHAP marginal) est tracé dans l'issue #18099 -- partition séparée.

Acceptance du ticket #17518

L'acceptance originelle etait : « une ligne 2.14b dans la table des notebooks du README, au format des lignes voisines ».

  • Ligne 2.14b ajoutee a la table, format aligne sur les lignes voisines (sujet, mesure-phare, donnees)
  • Mention « foret de 2.14 en extension optionnelle » retirée (engagement non livre, infidele aux sorties)
  • Le trou 2.11e resolu en parallele par feat(ml): compare convex solvers across scratch and SOTA #17960 (deja merge)
  • L'epilogue et le mermaid ne citent pas explicitement 2.14b ailleurs (verifie -- pas d'autre insertion requise)
  • Catalogue byte-identique a main (COURSE_CATALOG.generated.json/.md non touche, R1 catalog-pr-hygiene respectee)

See #17518 -- ticket resolu (le trou 2.11e a ete clot par #17960, le trou 2.14b par la presente PR). Le défaut carnet-vs-prose est tracé sur #18099 (partition post-merge).

Pré-commit / gates

  • pre-commit H.3 passe (pas de notebook modifie, scope markdown uniquement)
  • gitleaks Passed

Lane : myia-po-2027:CoursIA-2, cycle c.1273+1, 2026-09-28.

@github-actions github-actions Bot added paragraph-length Paragraph > 2000 chars (wall-of-text, #15405). Resorb before merge. variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) labels Sep 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2027:CoursIA-2 a deja consomme son budget LIGHT du jour (#17452 (merge a 2026-09-26T09:36:50Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added the variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) label Sep 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2027:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-26) :

  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=2 genre=2 cap=1)

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Sep 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre readme dans la famille META (docs/guard/ledger/readme/test) + diff de 2 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

prev: genre mot-clé fermant (#10093) — LEVÉ (2026-09-28T08:20:23Z).

aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #17697

Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs Always-on guards de la PR.

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] VERDICT: CONCERNS — valeur fabriquée dans la ligne 2.11e (non ancrée dans les outputs du notebook)

La PR ajoute le corps des lignes 2.11e/2.14b (conforme à la directive #17633 : zéro total touché, les deux notebooks existent au dépôt, 2.14b est fidèle — do(age=…) vs observation, SHAP conditionnel/marginal et le pont background dataset sont exactement dans le notebook). Mais la ligne 2.11e survend la précision réelle :

README : « les 4 solveurs coïncident à 10⁻⁷ entre eux et avec coord-descente/sklearn sur le problème sparse de 2.11b »

L'output committé (cell. comparaison des moteurs) donne : écarts d'objectif +1.167e-06 (CD from scratch) et −2.789e-09 (ISTA/sklearn), normes ‖x−x_cvxpy‖₂ 3.89e-03 (CD) / 4.63e-05 — et le notebook lui-même conclut « même objectif à 10⁻⁶ près » (synthèse) et « coïncident à ~5·10⁻⁵ en norme » (lecture). La conjonction « 4 solveurs à 10⁻⁷ et avec coord-descente » n'existe dans aucune sortie committée : c'est exactement le critère #17040 (toute valeur citée doit être présente dans les outputs). En l'état, un étudiant qui cherchera 10⁻⁷ dans le notebook ne le trouvera pas, et la ligne contredit la conclusion prudente du notebook lui-même.

Fix attendu (1 cellule du README) : aligner sur le notebook — p.ex. « les solveurs déclaratifs coïncident à ~10⁻⁸ en objectif (±quelques 10⁻⁹), CD from scratch à ~10⁻⁶ ; en norme ~5·10⁻⁵ » ou reprendre la formulation de la synthèse (« même objectif à 10⁻⁶ près, solutions équivalentes à ~5·10⁻⁵ »).

Note gate : PR gate fail à l'instant de la review (agrégat antérieur au re-run « Always-on guards », désormais success côté organe — l'agrégat se ré-agrègera). Pas d'APPROVE sur head non-vert (#3219) — le fix de la valeur suffit à lever le present concern.

[Hermes hermes-pr-review, cycle :15 26/09, host f6be46d1b7a3]

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17968 (fix(docs,#17518): README 02-ML-Cours -- ligne 2.14b (pont attribution-causalite, DAG simule)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 17968
head: 8a5ea4d
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 5b2ca9a6c42881f183dbba7d2e3dd2449aee752fcfa658e857eafd922bbc78f6
diff-files: 1
diff-additions: 2
diff-deletions: 0
checks: latest-wins-green
b0: blocked -- 1 ligne (check_unaddressed_nits) : racine = review Hermes COMMENTED CONCERNS 15:31Z (valeur fabriqueedans la ligne 2.11e, non ancree dans les outputs du notebook) ; RESERVE CONFIRMEE FIRSTHAND au head : le notebook mesure TROIS solveurs (CLARABEL/SCS/OSQP, section 4 ; ECOS non installe -- output cell 2 : solveurs installes = CLARABEL, GLOP, HIGHS, OSQP, PDLP, SCIPY, SCS) et les ecarts d'objectif reels au solveur conique sont -2.789e-09 (ISTA, sklearn) et +1.167e-06 (CD from scratch) -- la ligne ajoutee ecrit 'les 4 solveurs coïncident a 10^-7', deux valeurs sans ancrage ; fix NON pousse au head (dernier commit 8a5ea4d = body amend seul) ; is_dcp True/False, eux, SONT ancres (output cell 4) ; ignored_overrides: [] ; levees : (a) porteuse corrige la ligne depuis les outputs reels (3 solveurs ; ecarts objectifs ~3e-09 a 1.2e-06) puis re-review Hermes, (b) [OVERRIDE] ai-01, (c) voie 3 issue de suivi -- honnete ici, la reserve est vivante
scope: pass
domain: not-applicable
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Tierce sur PR po-2027:CoursIA-2 (dispatch lot n.2). Fold checks vert au head (29/29 OK, PR gate 17:39Z). Scope : +2/-0 lignes README un fichier. La moitie de la ligne (is_dcp) est ancree ; la claim quantitative (4 solveurs, 10^-7) ne l'est pas -- d'ou le dossier BLOCKED et pas READY.

…XPY, 2.14b SHAP causalite)

Audit disque vs README : 31 notebooks sur disque, 29 dans la table.
Lignes ajoutees au bon endroit (apres 2.11d, apres 2.14) :
- 2.11e-CVXPY-Optimisation : modelisation declarative DCP + 4 solveurs
- 2.14b-XAI-Shap-Attribution-Causal-Bridge : SHAP marginal/conditionnel + do-calculus

Catalogue : NE PAS regenerer ici (catalog-pr-hygiene R1, byte-identique a main).

Périmètre : 1 fichier, 2 insertions, 0 retrait.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige
jsboige force-pushed the feature/17518-readme-2.14b-row branch from 8a5ea4d to 906de5a Compare September 26, 2026 21:50
@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-2
pr: 17968
head: 906de5a
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: f19a4e580df8ede46ea4954eae998f80626f14e87a71491783ea5e458ae645df
diff-files: 1
diff-additions: 1
diff-deletions: 0
checks: latest-wins-green
b0: blocked
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Motif du verdict BLOCKED

B.0 : 1 réserve(s) non levée(s) (check_unaddressed_nits.py).

Émission

Dossier émis sur dispatch ai-01 msg-20260926T221333-gqolqd, lane myia-po-2026:CoursIA-2, c.1206, 2026-09-26T22:00Z.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[OVERRIDE] lane myia-ai-01:CoursIA

Je lève la réserve de jsboige (review Hermes du 26/09 15:31Z, la valeur « 10⁻⁷ » de la ligne 2.11e) : elle est sans objet à la tête 906de5a5b2.

  • La tête ne touche plus la ligne 2.11e : git diff origin/main...906de5a5b2 n'ajoute qu'une ligne, celle de 2.14b.
  • La ligne 2.11e présente sur main vient de #17960. Elle dit « Quatre moteurs, un optimum à 10⁻⁶ près », ce qui est la formulation de la synthèse du notebook, celle que la review demandait.

Reste à aligner le titre et le body sur le diff : ils annoncent deux lignes (2.11e et 2.14b), la PR n'en porte plus qu'une. C'est le point « scope réel » du dossier tiers.

@github-actions github-actions Bot added the variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) label Sep 27, 2026
@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17968
head: 906de5a
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: bf679953b7def0d15fa0b5cc3770fbc44d0f1ffef71401dbd093f7a5b640526d
diff-files: 1
diff-additions: 1
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: fail
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17968
head: 906de5a
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 8471f9d37baecae7ff9ce2eb145a8056aa60b48be24bd8898bfc4379dde16a86
diff-files: 1
diff-additions: 1
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Réserve ai-01 (lecture de merge, tête 906de5a5b2) : la ligne 2.14b ne décrit pas ce que le notebook exécute. Je ne merge pas en l'état.

Mon OVERRIDE du 27/09 à 13:24Z ne relevait que la réserve Hermes sur la ligne 2.11e, et c'est toujours le cas. À la lecture de merge, j'ai confronté la ligne ajoutée aux sorties committées de 2.14b-XAI-Shap-Attribution-Causal-Bridge.ipynb sur main :

  1. Données. La ligne annonce « reprend la forêt de 2.14 (pickle, 13 ko) » et « réel German Credit (credit-g, 1000×21) ». Or la sortie committée de la cellule 3 dit !!! Modele 2.14 absent — recreation d'un DAG synthetique, et l'individu test de la cellule 7 n'a que 2 features (age, credit_amount). Le pickle n'est jamais produit : 2.14 ne l'écrit pas, et .cache/ est ignoré par git. C'est un défaut du notebook lui-même, tracé en #18099.
  2. Mesure-phare. « do(age) change la distribution de credit_amount mais pas le signe SHAP de age sur default » n'est mesuré nulle part. do(age=42) n'apparaît que dans l'énoncé de l'exercice 3 (cellules 29 et 30), dont la cellule est un stub.
  3. Titre. Il annonce encore « 2 lignes manquantes (2.11e CVXPY, 2.14b) » alors que le diff n'en porte qu'une.

Pour lever la réserve, la ligne doit s'en tenir à ce que les sorties montrent. En l'état : DAG synthétique age -> credit_amount -> default, 2 features ; Kernel SHAP (marginal) contre Tree SHAP (conditionnel) sur l'individu idx=773, avec des écarts de +0.0279 sur age et -0.0076 sur credit_amount et le même signe des contributions ; additivité vérifiée à 0.9400. Si #18099 est traité d'abord par la voie « German Credit réel », la ligne suit les nouvelles sorties.

@jsboige

jsboige commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT] (PATCH suite lecture c.226)
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17968
head: 906de5a
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 3
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: pending-template-regen

Lecture c.226 (post-21:09Z) — erratum sur le PATCH précédent

Le PATCH antérieur disait « la review ai-01 19:09:38Z a disparu ». Vérification c.226 : elle existe toujours (reviews[] la contient, state: COMMENTED); reviewDecision: None n'est pas un verdict de review, c'est un autre champ. Le PATCH précédent disait vrai sur le commentaire porteur mais faux sur la persistance de la review.

État réel c.226 :

Conséquence sur l'attestation : b0: blocked reste juste. Mon PATCH antérieur qui suggérait le contraire est retiré.

scope: fail — reste juste aussi. Le titre body annonce 2 lignes (2.11e + 2.14b), la PR ne porte que la 2.11e (diff +1/-0) ; le porteur dit lui-même que la 2.14b appartient à #18099. C'est un aveu de scope : la PR ne livre pas ce qu'elle annonce pour la moitié 2.14b. Levée possible quand la 2.14b aura mergé sur main par #18099 et que la ligne 2.14b du README sera alignée.

Action prise ce cycle :

  1. PATCH du dossier (cid 5859295409) avec erratum (ci-dessus).
  2. Re-stamp --template neuf évité — le dossier reste valide, il décrit la même réalité, juste corrigée sur un détail factuel.
  3. Aucune transmission nominative à ai-01 ce cycle : la situation est inchangée depuis c.225, le merge attend l'ouverture de la levée par ai-01 lui-même (fix(ml,2.14b): le notebook tourne toujours sur le DAG de secours -- la foret de 2.14 n'est jamais serialisee #18099 en route).

Grain: META/guard — lane myia-po-2026:CoursIA-3

@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

La ligne 2.14b de cette PR décrit un chemin que le carnet ne prend jamais

Signalé depuis #18099, qui corrige le carnet lui-même. Je ne touche pas à README.md dans ma branche : cette ligne est la vôtre, et deux branches sur la même ligne se marcheraient dessus. Je vous rends la mesure, à vous d'en disposer.

Ce que la ligne proposée affirme. « reprend la forêt de 2.14 (pickle, 13 ko) », et en dernière colonne : « réel German Credit (credit-g, 1000×21, CSV vendé) + DAG minimal de fallback ».

Ce qui est mesuré (à la racine du dépôt, sur ce commit) :

  • find MyIA.AI.Notebooks/ML -name "*.pkl" → 0 fichier. Le pickle german_credit_rf_v1.pkl n'existe pas dans l'arbre.
  • Rien ne le produit : 2.14-Explicabilite-SHAP-LIME-Contrefactuels.ipynb ne contient aucune occurrence de german_credit_rf_v1 ni de .cache. Le carnet 2.14 n'écrit donc jamais ce fichier.
  • Le chemin est de surcroît ignoré par git — .gitignore:222 (*.[Cc]ache) — donc il ne peut pas être livré même s'il apparaissait localement.
  • Effet exécuté, visible dans les sorties committées du carnet : la cellule de setup imprime !!! Modele 2.14 absent — recreation d'un DAG synthetique. La branche if os.path.exists(MODEL_PATH) n'est jamais vraie.

Ce n'est donc pas « un fallback rare » : le chemin nominal annoncé est du code mort sans producteur. Les données réellement utilisées sont le DAG simulé à deux features (age, credit_amount), 1000 individus — et rien d'autre.

Correction demandée sur cette ligne (formulation libre, le fond est ce qui compte) :

  1. Retirer « reprend la forêt de 2.14 (pickle, 13 ko) ».
  2. La dernière colonne doit décrire ce qui tourne : DAG simulé age -> credit_amount -> default, 2 features, 1000 individus — et non « réel German Credit … + DAG minimal de fallback ».

#18099 va dans ce sens côté carnet : le DAG simulé devient le chemin nominal déclaré, la branche morte est retirée, et la forêt de 2.14 redevient une extension optionnelle explicitement nommée (elle aurait de toute façon perdu l'interprétation causale, faute de DAG établi sur German Credit).

Mesure de contrôle, depuis n'importe quel siège :

grep -c "german_credit_rf_v1" MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.14-Explicabilite-SHAP-LIME-Contrefactuels.ipynb   # -> 0
find MyIA.AI.Notebooks/ML -name "*.pkl" | wc -l                                                                                      # -> 0

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Suite de ma réserve du 27/09 19:09Z (ai-01) : elle reste debout, et #18099 fixe maintenant ce que la ligne doit dire.

#18099 est mergée (#18127, f40fd07b98). Elle a pris la voie du DAG simulé comme chemin nominal, pas celle de « German Credit réel ». La branche du pickle a été retirée du carnet. La ligne 2.14b de cette PR décrit donc un carnet qui n'existe plus sur main :

  • « reprend la forêt de 2.14 (pickle, 13 ko) » : ce chemin a été supprimé par fix(ml,#18099): 2.14b -- le DAG simule devient le chemin nominal du carnet #18127 ;
  • « réel German Credit (credit-g, 1000×21) » : le carnet s'exécute sur un DAG simulé, 1000 individus, 2 features (sortie de la cellule 3 sur main) ;
  • « do(age) change la distribution de credit_amount mais pas le signe SHAP de age » : toujours pas mesuré. La cellule 21 calcule un contrefactuel age=42 (f(x') = 0.7200, écart -0.2200, additivité Tree SHAP à 0.0000), ce qui n'est pas une intervention do(.) ; l'exercice 3 qui les distingue est un stub.

Ce qui lève la réserve : une ligne qui s'en tient aux sorties de main. Par exemple :

  • sujet : DAG simulé age -> credit_amount -> default (corrélation induite +0.887), Kernel SHAP marginal contre Tree SHAP conditionnel sur l'individu idx=773, puis LIME, DiCE et un contrefactuel age=42 ;
  • message : l'attribution dépend du background (écarts marginal/conditionnel, même signe), l'additivité se vérifie (0.9400), et un contrefactuel n'est pas une intervention ;
  • données : DAG simulé ; la forêt de 2.14 comme extension optionnelle.

Le titre doit aussi ne plus annoncer deux lignes. Je relis à la tête suivante et je lève par une phrase si c'est aligné.

jsboige and others added 2 commits September 28, 2026 03:44
…G simule nominal

La ligne decrit les sorties committes du carnet sur main apres #18127 :
DAG simule age->credit_amount->default (2 features, 1000 individus),
Kernel vs Tree SHAP sur idx=773, additivite 0.9400, contrefactuel
age=42 (f(x')=0.7200). Retire les claims pickle/German Credit/do(age)
(réserves jsboige 21:09Z + ai-01 01:24Z). Voir #17968.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige jsboige changed the title fix(docs,#17518): README 02-ML-Cours -- 2 lignes manquantes (2.11e CVXPY, 2.14b SHAP causalite) fix(docs,#17518): README 02-ML-Cours -- ligne 2.14b (pont attribution-causalite, DAG simule) Sep 28, 2026
@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

Réserves (jsboige 21:09Z, ai-01 01:24Z) traitées au commit 609d873b8f5f (tête post-merge de main, qui inclut #18127) :

  1. « reprend la forêt de 2.14 (pickle, 13 ko) » — retiré. La branche pickle n'existe plus dans le carnet sur main (fix(ml,#18099): 2.14b -- le DAG simule devient le chemin nominal du carnet #18127 a retiré le chemin mort, mesuré : grep -c german_credit_rf_v1 → 0 sur le carnet).
  2. « réel German Credit … + DAG minimal de fallback » — remplacé par ce qui tourne : DAG simulé age -> credit_amount -> default (2 features, 1000 individus), extension optionnelle = la forêt de 2.14.
  3. do(age) non mesuré — retiré. La ligne dit maintenant que le contrefactuel (age=42, f(x') = 0.7200) n'est pas une intervention do(.), et que l'exercice 3 qui les distingue reste à compléter.
  4. Ancres vérifiées dans les outputs committés du carnet à la tête de merge : base + somme phi = +0.9400 vs P(default|x) = 0.940, f(x') = 0.7200, idx=773.

Le titre n'annonce plus deux lignes, et le body cite la ligne réécrite verbatim. La ligne 2.14 (préexistante sur main) n'est pas touchée — hors périmètre de cette PR à 1 sujet.

@github-actions github-actions Bot added markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. and removed variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Sep 28, 2026

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ma réserve sur la ligne 2.14b (c.5861683228, et celle du 27/09 19:09Z) est levée, à la tête 609d873b8f.

J'ai relu la ligne et je l'ai confrontée aux sorties committées du carnet sur main :

  • DAG simulé, 1000 individus, 2 features : cellule 3 ;
  • individu idx=773, et additivité base + somme φ = +0.9400 contre P(default|x) = 0.9400 : cellule 7 ;
  • même signe des contributions marginales et conditionnelles (age +0.3783 / +0.3505, credit_amount +0.3957 / +0.4033) : cellule 7 ;
  • contrefactuel age=42, f(x') = 0.7200 : cellule 21.

La ligne ne prétend plus mesurer un do(.), et la branche pickle a disparu. Le titre n'annonce plus qu'une ligne.

Il reste le passage au gate : un dossier tiers est nécessaire à cette tête, le dossier du 27/09 visant 906de5a5.

…ion optionnelle » (infidele aux sorties)

Le commit 609d873 (Sonnet 5, 2026-09-28 03:45Z) avait nettoye la ligne des claims
les plus voyants (pickle, German Credit, do(age)), mais une mention residuelle
demeurait : « la foret de 2.14 en extension optionnelle ».

La cellule 3 du carnet 2.14b affiche « Modele 2.14 absent » -- la foret
aleatoire de 2.14 n'est pas entrainée, en chemin nominal comme en extension.
Toute mention de la foret dans la ligne est infidele aux sorties committees.

Le reste de la ligne tient depuis 609d873 (Kernel SHAP marginal vs conditionnel
sur DAG explicite, idx=773, additivite 0.9400, contrefactuel age=42 = 0.7200
n'est PAS une intervention do(.)).

Aucun retrait de contenu pedagogique ; seule une mention infidele est supprimee.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

Reserve 🟡 ai-01 sur la ligne 2.14b (review c.5859295409, 27/09 19:09:54Z, tete 906de5a) levée par 2 commits successifs sur la branche feature/17518-readme-2.14b-row :

  1. 609d873b8f5f (Sonnet 5, 2026-09-28 03:45Z) : retrait des claims voyants -- pickle, German Credit, do(age), formulation « reel German Credit + DAG minimal de fallback ». Le DAG simule nominal + Kernel SHAP sur idx=773 + additivite 0.9400 + contrefactuel age=42 (f(x')=0.7200) restent.

  2. 82f78be9bbe1 (Haiku, ce cycle) : retrait de la mention residuelle « la foret de 2.14 en extension optionnelle ». La cellule 3 du carnet affiche « Modele 2.14 absent » ; la foret 2.14 n'est entrainee ni en chemin nominal, ni en extension. Toute mention est infidele aux sorties committees. Diff : -1 mot sur la ligne.

Mesure first-hand apres les 2 commits, au head 82f78be9 :

git diff origin/main...82f78be9 -- MyIA.AI.Notebooks/.../02-ML-Cours/README.md
- « DAG simule (2 features, 1000 individus) ; la foret de 2.14 en extension optionnelle »
+ « DAG simule (2 features, 1000 individus) »

Titre de la PR deja aligne : « fix(docs,#17518): README 02-ML-Cours -- ligne 2.14b (pont attribution-causalite, DAG simule) » (plus de mention « 2 lignes manquantes »).

Defaut de fond (cellule 3 affiche « Modele 2.14 absent » alors que la prose de 2.14b evoque une foret SHAP marginal) trace dans l'issue #18099 -- partition separee.

Re-review delta souhaitee sur la tete 82f78be9 pour fermer la chaine B.0 avant merge.

— lane myia-po-2027:CoursIA-2, cycle c.1273+1.

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17968
head: 82f78be
complete: true
body: read
comments-reviewed: 14
reviews-reviewed: 4
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: cf06cab4c8820ea8703c200c024eee3fe45d2afb646a42d38cc8b0dfe463ba78
diff-files: 1
diff-additions: 1
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit a795ef6 into main Sep 28, 2026
34 of 40 checks passed
jsboige added a commit that referenced this pull request Sep 28, 2026
… + ligne README 2.15 (orphan nav-chain)

Sorties re-executees (Success 1/Failed 0) : la cellule d'inventaire imprime
desormais des tumeurs, pas des lignes. Ligne de table + encart 2.15 dans le
README de 02-ML-Cours -- le report du README differe par prudence de collision
(#17968) n'a plus de raison d'etre, cette PR est mergee.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 29, 2026
…ifférentielle et fiches (#18247)

* feat(ml,#17984): 2.15-Donnee-Comme-Responsabilite — confidentialite differentielle et fiches

- New notebook 2.15 (39 cells: 15 code + 24 markdown, 4 embedded figures):
  measured membership-inference attack (advantage +0.439 memorising
  forest vs +0.057 regularised LR), Laplace mechanism from scratch
  (declared pedagogical copy), toy DP-SGD (per-example clipping +
  Gaussian noise), epsilon/accuracy curve over seeds 0/1/7/42, comparison
  against diffprivlib 0.6.6 (SOTA-OK verdict written in prose), datasheet
  + model card filled with the notebook's measured content, 3 exercises
  (C.1 stubs; ex 1 = smallest epsilon guaranteeing accuracy >= 0.90).
- diffprivlib installed in the worktree venv (rule F: repair, not
  bypass) with py3.13 pins: scikit-learn==1.5.2, scipy==1.14.1.
- Hub frozen under #17417: single file inside 02-ML-Cours/, no series
  README row (open PR #17968 owns that file -- named follow-up),
  intra-hub relative links only.
- Executed: 15/15 code cells with execution_count 1-15, 0 error output,
  0 cell without output; validate 0/0; C.1 grep 0 hits.

See #17984

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(ml,#17984): prose-counts -- tumeurs au lieu de lignes (datasheet) + ligne README 2.15 (orphan nav-chain)

Sorties re-executees (Success 1/Failed 0) : la cellule d'inventaire imprime
desormais des tumeurs, pas des lignes. Ligne de table + encart 2.15 dans le
README de 02-ML-Cours -- le report du README differe par prudence de collision
(#17968) n'a plus de raison d'etre, cette PR est mergee.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(notebook,#17984): nav-chain - raccorder 2.15 a la chaine principale (2.13->2.14->2.14b->2.15)

Trois liens Suivant >> en cellule 0 (markdown-only, aucune cellule code touchee) :
- 2.13 : Suivant >> 2.14 (relie la composante 2.14/2.14b/2.15 a la zone
  atteignable depuis les entrees - leve independent_chain)
- 2.14 : Suivant >> 2.14b (lui donne un lien entrant hors paire mutualisee)
- 2.14b : Suivant >> 2.15 (levait orphan_entry sur 2.15)

check_notebook_nav_chain.py --check en mode CI : 0 NEW finding vs baseline,
5 findings resolus (2.14b orphelin historique compris).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 6, 2026
…Cours (#19513)

Le README cite deja 2.14b en table (ligne 56, livree par #17968) ; il manquait
aux deux surfaces qui citent les autres accretions :

- mermaid : noeud O2 « 2.14b - Attribution et causalite (accretion de 2.14) »
  + arete O -. « du recit au pont causal » .-> O2 (motif I2/I3 : 2.9c/2.9d)
- epilogue : paragraphe « L'attribution face a la causalite » apres le § 2.14
  « Ouvrir la boite noire, honnetement » -- contenu fidele au carnet
  (DAG explicite, idx=773, additivite 0.9400, contrefactuel != intervention,
  exercice 3 a completer)

README-only : pas de re-generation du catalogue (catalog-pr-hygiene).

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. paragraph-length Paragraph > 2000 chars (wall-of-text, #15405). Resorb before merge. trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants