Skip to content

Add: densite Causal-Bridges DoWhy — interpretations + attendus, 3 notebooks sous plancher (See #13410) - #16343

Merged
jsboige merged 1 commit into
mainfrom
feat/13410-density-dowhy-tranche
Sep 16, 2026
Merged

jsboige merged 1 commit into
mainfrom
feat/13410-density-dowhy-tranche

Conversation

@jsboige

@jsboige jsboige commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-po-2026:CoursIA -- prev: DEEP/tooling #16283

Le livrable

#13410 tranche densité Probas/DecisionTheory/Causal-Bridges (rotation de famille R6) — les 3 notebooks DoWhy du dossier sous le plancher pedagogy_density 1200 c/cellule code, enrichis de 17 nouvelles cellules markdown + 1 extension de conclusion (interprétations ancrées sur les sorties réelles + attendus/anti-pièges des exercices) :

Notebook Densité avant Après Ajouts pédagogiques
DoWhy-3-Decouverte-de-Structure 945 1232 lecture de la matrice de corrélations (Z–Y 0.94 > M–Y 0.91 > X–Y 0.86 : la corrélation la plus forte relie une variable aval de Y — la matrice est symétrique et ne contient par construction aucune information de direction ; c'est ce déficit d'asymétrie que PC/GES/LiNGAM comblent, chacun par un mécanisme différent), lecture des extensions du CPDAG (même squelette + même v-structure ('C','Y','M') = équivalence de Markov en acte ; les estimands 0.81/0.22/1.05 sont tous cohérents avec les données — déficit d'information, pas d'échantillon), attendus/anti-pièges des 3 exercices (le CPDAG ne change pas quand n croît — l'ambiguïté est structurelle ; compromis alpha asymétrique : trop grand = arêtes parasites, trop petit = v-structure perdue et CPDAG plus ambigu ; l'instabilité inter-seeds de LiNGAM gaussien EST le diagnostic — moyenner des réponses incohérentes ne produit aucun DAG)
DoWhy-4-Sensibilite-Confounder-Cache 557 1203 la tranche profonde (13 cellules + 1 extension) : lecture de l'estimé naïf (IC [1.116, 1.202] exclut l'effet vrai 0.5 avec confiance — la précision statistique ne dit rien de la justesse causale, l'IC se contracte autour de 1.16 à n infini), lecture des trois nombres de la robustness value (0.677/0.665 = seuils, R² partiel 0.587 = l'échelle), verdict SURVIT (R² réel de U 0.493/0.427 < RV 0.677 — l'immunité chiffrée ET sa portée exacte : ce U-là, pas tous les U possibles), bascule κ (point de retournement κ*=1.55, croisement de l'effet vrai vers κ≈0.4 — la survie du signe n'est pas la survie de la magnitude, la zone honnête de reportage est un intervalle conditionnel), diagramme de bascule, monde B binaire (pourquoi l'épidémiologie parle en RR ; issue rare ⇒ OR≈RR et l'approximation se dégrade avec la banalisation), le piège API du contraste marginal (.value 0.041 ≠ RR 1.790 — deux quantités correctes à des questions différentes ; l'attribut lu doit être nommé dans le rapport), contours de bascule (distance à l'annulation en 2D, axes libres là où le κ unique était symétrique par hypothèse), verdict E-value ROBUSTE (2.98/2.04 vs benchmark C 1.16 = 2.57× ; la chaîne estimé > borne > benchmark et ce que toute inversion localise), paires appariées (m=193 discordantes, s=122 vs E=96.5 sous H0 — le coût en puissance et le bénéfice en lisibilité), bornes Rosenbaum (Γ*=1.33 : fragile alors que l'E-value disait robuste — deux adversaires différents, confondeur caché vs biais de sélection des paires), courbe de Rosenbaum (l'intervalle d'ignorance qui avale 0.05 ; à droite du croisement, seul le design décide, plus les données), attendus/anti-pièges des 3 exercices + extension de la conclusion (les trois cadres ne se contredisent pas : ils décrivent des adversaires différents — les reporter côte à côte est la pratique honnête)
DoWhy-5-Instrument-Faible 1189 1445 attendus/anti-pièges des 3 exercices (exclusion violée = un chiffre parfaitement formel et faux, sans erreur d'exécution — l'hypothèse testable produit un signal, l'invérifiable non ; F=6.71 < 10 mais F croît mécaniquement avec n à R² fixé — le seuil Staiger-Stock est calibré sur le biais à n modéré, pas un théorème, rapporter le R² premier étage à côté du F ; DAG incomplet : NON_IDENTIFIABLE est une réponse, et embellir le DAG jusqu'à obtenir un estimé = fabriquer la conclusion recherchée, lien direct avec DoWhy-3)

Invariant byte-identity (exception C.2 markdown-only)

  • Cellules code et outputs strictement identiques sur les 3 notebooks : fingerprint md5 (source + outputs + execution_count de chaque cellule code) comparé avant/après à l'intérieur des scripts d'insertion (assertion ×4 runs), et double vérification git : git diff -U0 \| grep -cE '"execution_count"\|"outputs"\|"cell_type": "code"' = 0 ligne touchée. Aucune re-exécution nécessaire (C.2, modifs uniquement markdown).
  • Les 3 lignes supprimées du diff = fermetures JSON du fichier + réécriture de la dernière entrée source de la cellule conclusion étendue (ajout du \n de fin), pas de perte de contenu.

Validation locale

  • pedagogy_density.py : 945 → 1232, 557 → 1203, 1189 → 1445 (le dossier Causal-Bridges passe de 3 à 0 notebooks DoWhy sous plancher ; sortie outil : « Below 1200 c/cell: 0 »).
  • detect_markdown_rendering.py --check : OK sur les 3 (no new ERROR-level violations).
  • Trio absent du twin registry (twin_pairs.d ne couvre aucun DoWhy — pas de rebaseline twin requis).
  • 3 exercices par notebook déjà en place (convention ≥ 3 respectée par l'existant — les attendus viennent les armer).

Coordination

See #13410 (epic densité — résiduel après cette tranche : ~422 notebooks sous plancher toutes familles).

🤖 Generated with Claude Code

… 3 notebooks sous plancher (See #13410)

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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 3
  • Code cells validated: 40
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 7.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 10.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 9.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 11.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 11.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.3s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 69.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 5.6s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

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

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.

@clusterManager-Myia clusterManager-Myia 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.

VERDICT: LGTM

[Hermes] Review first-hand au head 3945a537 (3 notebooks DoWhy fetchés via contents API, comparés à main). Aucune review préexistante sur ce SHA.

Vérifié ✓

  • Nature du diff : enrichissement markdown pur (14+3+1 = 18 cellules d'interprétation nouvelles, 20 cellules code inchangées) — conforme à l'intention #13410 (densité pedagogy_density sous plancher 1200 c/cellule code).
  • Ancrage des nombres sur outputs réels, re-vérifié nombre par nombre :
    • DoWhy-4 : les 11 valeurs citées ([1.116, 1.202] IC naïf, RV 0.677/0.665, R² partiel 0.587, R² de U 0.493/0.427, bascule 0.755→−0.043, κ* 1.55) toutes présentes dans les outputs.
    • DoWhy-3 : les trois estimands des extensions 0.812 / 0.219 / 1.046 — le markdown cite 0.81 / 0.22 / 1.05 (arrondi cohérent à 2 décimales), l'ancrage est réel. Le point pédagogique (3 extensions = 3 estimands incompatibles, déficit d'information et non d'échantillon) est correct.
    • DoWhy-5 : 3 nombres cités, 0 absent.
  • Exécutions réelles : metas papermill présentes et antérieures à l'ajout markdown (DoWhy-4 : 13/09 02:07, 34.2s ; DoWhy-3 : 13/09 01:35) — les outputs n'ont pas été retouchés, l'enrichissement est textuel par construction. DoWhy-5 sans meta papermill mais seule cellule ajoutée = 1 markdown, aucun code touché.
  • Sécurité : 0 motif secret sur les 3 fichiers.
  • Signal advisory « Prose/output review needed » : c'est précisément ce que cette review a fait à la main — les relations explicites citées sont SUPPORTED par les outputs. Rien de contradicted trouvé.
  • H.4 outputs PASS (3/3), Golden-Set 8/8, Grain tag présent ligne 1.

RAS de mon côté sur ce head. Le genre notebook-python et la lane myia-po-2026:CoursIA — c'est ma lane hôte : mentionné par transparence, l'objet (dossier Probas) est hors de mon périmètre de review habituel ML/SymbolicAI, aucune collision d'intérêt sur le contenu.

[Hermes hermes-pr-review, cycle :00 16/09, host c92df397a786]

@jsboige
jsboige merged commit d36d357 into main Sep 16, 2026
78 of 79 checks passed
jsboige added a commit that referenced this pull request Sep 16, 2026
… only

Les tranches de densite (#16007, #16012, #16021, #16343, #16352) ne
touchent jamais la baseline : elle est un snapshot Phase-1 ("burn down,
do not grow"), ses valeurs ne se retro-fitent pas. Restauration de la
version main.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 16, 2026
Les tranches de densite (#16007, #16012, #16021, #16343, #16352) ne
touchent jamais la baseline : elle est un snapshot Phase-1 ("burn down,
do not grow"), ses valeurs ne se retro-fitent pas. Restauration de la
version main.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 18, 2026
…ML-2/ML-3 Python (#16381)

* enrich(mlnet,#13410): tranche densite fondations scikit-learn ML-1/2/3 Python

ML-1 753->1209 (graine, lecture des 4 points, coefficients OLS, jeu de
test extrapolation, interpolation vs extrapolation, graphique, perfection
100% comme signal d'alerte, grammaire commune). ML-2 957->1231 (describe,
expansion one-hot 7->9, R2=1.0 sur-apprentissage). ML-3 882->1214 (donnees
lineaires, GBM vs OLS, biais-variance, classement AutoML). Markdown
uniquement (exception C.2), baseline scoped 3 cles.

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

* revert(mlnet,#13410): baseline edits — canon des tranches = notebooks only

Les tranches de densite (#16007, #16012, #16021, #16343, #16352) ne
touchent jamais la baseline : elle est un snapshot Phase-1 ("burn down,
do not grow"), ses valeurs ne se retro-fitent pas. Restauration de la
version main.

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

* fix(16381): rebaseline twin pairs ml-1/ml-2/ml-3 after markdown-only density tranche

Pairs attested: ML-1 Introduction, ML-2 Data&Features, ML-3 Entrainement&AutoML
(ML.NET/Python family).

Paraphyte-preservant verification (python-compare vs origin/main): all code
cells byte-identical (source + outputs + execution_count) — ML-1 13/13,
ML-2 9/9, ML-3 8/8; changes are markdown-only additions (+8/+3/+4 cells).

Command run per pair:
python scripts/notebook_tools/check_twin_parity.py --update --pair "<name>" --by "myia-po-2026:CoursIA"

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

* fix(ml,#16381): aligner moyennes 1 434 s / 4,4 km sur describe 1433.57 / 4.4125

Markdown-only fix (pas de re-exec, pas de cellule code touché) :
- moyennes : 1 722 s et 4,8 km -> 1 434 s et 4,4 km (arrondi describe)
- ecart-type : ~1 000 s -> ~958 s (aligne sur cellule describe plus haut)

Source de verite : cellule C describe 7.000000 8.000000 7.000000 8.000000
mean 1.428571 1.875000 1433.571429 4.412500

Tells : c.1175-L1 (markdown-only PR diff, pas hand-edit d'output) +
c.564 strict reponse nominative observation adjoint c.661 + c.974 strict
1 amend/cycle.

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

* fix(ml,#16381): rebaseline twin pair ML-2 Data&Features post-markdown drift fix

Suite au drift introduit par mon precedent commit `6f19facb2` (markdown
1 434s/4,4km aligne describe), le registre `twin_pairs.d/ml-2-data-features/`
attestait encore `content_python_sha: ee614a3f` (SHA pre-fix). Le
checker Twin parity voyait donc drift introduced vs le nouveau SHA
post-fix `912c8f54`, ce qui faisait echouer le check requis \#8057.

Nouvelle attestation YAML `0006-2026-09-18-myia-po-2026-CoursIA.yaml` :
- python_sha: 9f0afcb
- content_python_sha: 912c8f5490cb747d648bafa4f3a29b486974bb09dbec0b16ba5c2528ef00cad0

Fix substance : drift elimine (1 drift remaining = GameTheory-4c
NashExistence = DRIFT PRE-EXISTING non lie a cette PR cf rapport CI
`drift_introduced: 0 / drift_pre_existing: 1`).

Tells : c.641 ★★★ fondateur strict L5/L6 attester APRES hook pre-commit
(le precedent YAML 0005 datait du commit 9cc1af6, j'avais modifie
depuis sans --update). c.974 strict 1 amend/PR (substance uniquement,
pas body PR cette fois).

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

* fix(ml,#16381): clarifier vendor_id/payment_type dtype str (pandas 2.x)

Suite revue ai-01 c.665 — la cellule C6 (id 5bbb4809) du notebook ML-2-Data&Features-Python
disait 'vendor_id et payment_type sont de type object (chaines)' alors que la sortie
committée juste au-dessus affiche str (pandas 2.x). Le seul 'object' visible est le
dtype: de pied de la Series des dtypes, pas celui des colonnes.

Reformulation : 'de type texte (str dans la sortie ci-dessus, object dans l'ancienne
nomenclature pandas)' — la paranthese dit au lecteur où vérifier, sans casser le
message pedagogique sur le one-hot encoding qui suit.

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

* fix(ml,#16381): re-attester twin pair ML-2 post dtype str fix

Suite rebase-arm-DWELL c.665 : la modif markdown-only du notebook (object -> str)
a change le SHA du contenu. Tell c.641 ★★★ re-attestation twin parity
AFTER hook pre-commit.

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 22, 2026
…ncement / 09-Einstein / 10-Cryptarithmetic (#16379)

* enrich(z3,#13410): tranche densite SMT - lectures mesurees 08/09/10

08-Ordonnancement 735->1267 (NP-difficulte + bornes, anatomie du modele
7 vars / 6 disjonctives, lecture glouton 14h vs optimal 8h, lecture Gantt).
09-Einstein 1115->1228 (verification du temoin : 4 indices relus).
10-Cryptarithmetic 879->1290 (anatomie des retenues contre la solution,
temoin vs preuve, lecture DANGER). Markdown uniquement (exception C.2),
baseline scoped 3 cles.

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

* revert(z3,#13410): baseline edits — canon des tranches = notebooks only

Les tranches de densite (#16007, #16012, #16021, #16343, #16352) ne
touchent jamais la baseline : elle est un snapshot Phase-1 ("burn down,
do not grow"), ses valeurs ne se retro-fitent pas. Restauration de la
version main.

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

* fix(z3,#13410): repositionne 2 cellules Interpretation apres leur code (check_interp_positioning)

Einstein cell#7 et Cryptarithmetic cell#5 etaient parachutees entre
deux headers, sans code au-dessus dans leur section (incident PyMC-15
#10580). Deplacees juste apres le code qu'elles interpretent (l'affichage
du modele / le solveur SEND+MORE) : sources inchangees, ordre seul,
outputs intacts. check_interp_positioning --check : OK repo-wide.

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

---------

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants