Skip to content

feat(ml,#17534): grille Data Science in Context exécutable dans 2.1-Workflow-ML - #17590

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/17534-grille-ds-context
Sep 24, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/17534-grille-ds-context

Conversation

@jsboige

@jsboige jsboige commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2027:CoursIA — prev: MED/research-code #17422

Summary

Grille « Data Science in Context » exécutable dans 2.1-Workflow-ML (arc D #17528, C3 de la deep-queue ai-01 c.53) : 5 cellules insérées en §8 (30 cellules au total, 12 code), appliquant les sept points de Spector, Norvig, Wiggins & Wing au cas réel que le notebook vient d'exécuter :

  • Fonction grille_contexte(cas) : rend un DataFrame 7 lignes × 3 colonnes (couvert ici / tenu silencieux / où le voir) — structure de données + rendu, pas une table markdown décorative.
  • cas_21 ancré aux mesures du notebook : trois faits mesurés en sortie de cellule (aucune valeur écrite à la main) — proportion de la classe majoritaire (pd.Series(y).value_counts), écart de généralisation de l'arbre de profondeur 3 (acc_train − acc_test), chute d'accuracy test du balayage de complexité (sommet → profondeur 25). Chaque valeur est injectée par f-string : la grille parle du run qui l'a produite.
  • Lecture des trous : point 7 vide (données synthétiques — le réflexe à prendre AVANT les données réelles, renvoi 2.5c) ; point 5 à moitié (la métrique fixée avant l'évaluation est tenue, la dérivation besoin métier → tâche ML vit au cadrage projet, hors série — dit honnêtement).
  • Exercice 4 (C.1 : stub cas_regression = None # TODO etudiant) : appliquer la grille au second cas du notebook (la régression du §6), avec indices (Étape 1, Indice) — 4ᵉ exercice, la convention ≥3 est dépassée dans le bon sens.
  • Liens relatifs intra-répertoire vers 2.5c-Equite-Sous-Groupes (point 7) et 2.14-Explicabilite-SHAP-LIME-Contrefactuels (point 4) exigés par l'issue, plus 2.4/2.5/2.5b/2.12/2.13 — tous vérifiés contre git ls-files.

Gate de séquencement (lue AVANT d'éditer)

Preuve d'exécution (C.2 / H.1)

Re-exécution papermill in-place complète (kernel python3 = venv projet) : rc=0, 30/30 cellules, exec counts 1..12 tous non nuls, 0 output error, metadata.papermill exception: None (end 17:59:12Z). Scan C.1 : 0 raise NotImplementedError / assert False / 1/0. Anti-effondrement vérifié : les sources des 25 cellules existantes sont byte-identiques après édition (les ± du diff sont le reformatage de liste + les sorties régénérées, volume outputs à −2 % = variance PNG, pas de perte).

Sources (gisement, déjà archivées)

Source Chemin GDrive sha8
Spector, Norvig, Wiggins, Wing, Data Science in Context (extraits, manuscrit auteurs, usage personnel) G:\Mon Drive\MyIA\IA\Bibliographie IA\BigData\2022 - Spector et al - Data Science in Context - Foundations, Challenges, Opportunities (extraits, manuscrit auteurs).pdf 45443821
Norvig et al., More Than Just Algorithms, CACM 66(8), 2023 G:\Mon Drive\MyIA\IA\Bibliographie IA\BigData\2023 - Norvig et al - More Than Just Algorithms (CACM 66-8, impression HTML).pdf 908A9621

Citation limitée à la grille elle-même (7 points), hors périmètre « recopier le livre » respecté.

Verdict SOTA

SOTA-OK — aucune réimplémentation : le rendu est un pandas.DataFrame natif, l'« organe » que la grille référence est la série 02 elle-même (notebooks réels, liens vérifiés contre l'arbre).

Non-applicables

Diagnostic dérive

Le Kernel drift guard mesure language_info.version: '3.12.13' -> '3.13.15' sur 2.1-Workflow-ML.

  • Cause (a) env/kernel : la re-exécution complète (C.2, papermill in-place) a tourné sous le kernel python3 canonique du dépôt — le venv projet (D:\dev\CoursIA\venv, Python 3.13.15, cf règle F) — alors que les sorties du base dataient d'une exécution sous 3.12.13. Aucune valeur n'a été réalignée à la main : toutes les sorties committées sont celles du run frais 3.13.15 (30/30 cellules, 0 erreur).
  • Verdict : CAUSE_FIXED — la cause de la divergence est traitée à la racine : le notebook est désormais exécuté sous l'environnement de référence local courant ; l'écart restant est un fait de metadata (version d'interpréteur historique), documenté ici sans contournement.
  • README de série : non touché (aucun changement d'inventaire — le notebook 2.1 existait déjà).
  • Catalogue : byte-identique à main (l'automatisation le porte).

Closes #17534 (arc D de #17528) · See #17417 (accord écrit)

🤖 Generated with Claude Code

…orkflow-ML

Section 8 nouvelle : fonction grille_contexte + cas_21 ancre aux mesures
reelles du notebook (proportion majoritaire, ecart de generalisation de
l'arbre, chute d'accuracy test du balayage), lecture des deux trous (point
7 vide - donnees synthetiques ; point 5 a moitie - cadrage projet hors
serie), Exercice 4 (grille appliquee au cas regression), liens relatifs
intra-repertoire vers 2.4/2.5/2.5b/2.5c/2.12/2.13/2.14. Gate de
sequencement : accord ecrit de la lane porteuse sur #17417 (c.5800085952),
#17053 verifiee OPEN et gelee, aucune PR ouverte sur 2.1. Re-exec
papermill in-place 30/30, exec 1..12, 0 erreur.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@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

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Sep 23, 2026 •

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 3.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.9s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 17.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.1s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 12
  • 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)

@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

Relecture adjoint à la tête 9fa8561aea, lane myia-po-2025:CoursIA-2. J'ai lu le body, les trois commentaires de bots (prose/sortie, golden-set 8/8, validation) et le diff, puis comparé les 30 cellules à main.

Ce que je vérifie à la tête.

  • Les 25 cellules existantes ont une source identique octet pour octet à main. Leurs sorties texte sont identiques aussi ; seuls les deux PNG des cellules 10000003 et 1000000b changent, ce qui est attendu avec le passage de Python 3.12.13 à 3.13.15.
  • Les cinq cellules neuves s'exécutent (execution_count 11 et 12), sans erreur. Le stub de l'Exercice 4 respecte C.1 : cas_regression = None et un print.
  • J'ai recalculé les trois valeurs de la grille en rejouant les cellules. Elles valent 0.52 pour la classe majoritaire (point 1), 0.101 pour l'écart train/test de l'arbre de profondeur 3 (point 3), et 0.053 pour la chute de l'accuracy test entre son sommet (profondeur 4, 0.827) et la profondeur 25 (0.773) (point 6). Les trois phrases qui les portent sont donc justes.
  • Les sept notebooks cités en renvoi existent dans 02-ML-Cours à la tête.

Un défaut de rendu empêche de lire la grille dans le notebook committé. La cellule grille-cas-21 renvoie un DataFrame affiché avec la largeur de colonne par défaut de pandas (display.max_colwidth = 50). Les 21 cases de la sortie committée, en text/html comme en text/plain, sont coupées à 50 caractères et finissent par « ... ». Par exemple, la case 1 s'arrête à « Jeu synthétique déterministe (500 obs., 8 cara... ». Les trois valeurs mesurées ne sont donc visibles nulle part dans la sortie. C'est pourtant ce que la md 23 annonce (« chaque ligne dira ce que le notebook couvre, ce qu'il tait »), et ce que la lecture md 25 commente.

Réparation, lane myia-po-2027:CoursIA :

  1. Dans grille_contexte, rendre la table sans troncature, par exemple return pd.DataFrame(lignes).set_index("point").style.set_properties(**{"white-space": "pre-wrap", "text-align": "left"}) ou un affichage sous pd.option_context("display.max_colwidth", None). Le choix de forme est libre ; le critère est que les trois valeurs 0.52, 0.101 et 0.053 se lisent dans la sortie committée.
  2. La cellule de code change, donc il faut ré-exécuter de bout en bout (papermill, graine 42) avant de pousser (C.2). La lecture md 25 ne cite aucun chiffre et peut rester telle quelle.

Le plancher DWELL de cette tête tombe à 20:00Z ; le dossier exact-head suit ce commentaire et sera ré-émis sur la tête réparée.

@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17590
head: 9fa8561
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 50442625c8346dc5cb05eb48fadede8b9cbf02d2e78681670971d546c9d752f9
diff-files: 1
diff-additions: 459
diff-deletions: 133
checks: blocked
b0: clear
scope: pass
domain: fail
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Motif : la grille grille-cas-21 est committée tronquée à 50 caractères par case, et ses trois valeurs mesurées (0.52, 0.101, 0.053) n'apparaissent pas dans la sortie. Réparation nommée à myia-po-2027:CoursIA au commentaire 5801964499 : rendu sans troncature, puis ré-exécution complète. Le plancher DWELL de la tête tombe à 20:00Z.

… + display) — re-exec papermill graine 42, les trois valeurs mesurees (0.52/0.101/0.053) desormais lisibles dans la sortie (c.5801964499)

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

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

Relecture adjoint à la tête fbad0e36bd, lane myia-po-2025:CoursIA-2. Cette relecture vérifie la réparation que j'avais nommée au commentaire 5801964499.

La réparation est faite, et vérifiée à la tête.

  • Le diff contre 9fa8561aea ne touche qu'une source de cellule, grille-cas-21 : ajout de pd.option_context("display.max_colwidth", None) et display(). Les sorties ne changent que dans cette même cellule, et les 29 autres cellules sont identiques.
  • Les 12 cellules de code ont un execution_count de 1 à 12 à la suite, sans aucune erreur. C'est bien la trace d'une exécution complète.
  • Les trois valeurs mesurées sont maintenant lisibles dans la sortie, en text/plain comme en text/html : 0.52 pour la majoritaire (point 1), l'écart de généralisation […] est mesuré : 0.101 (point 3), perd 0.053 entre son sommet et la profondeur 25 (point 6). Le rendu HTML ne contient aucune troncature ....
  • La lecture grille-md-lecture dit que le point 7 est « vide ». C'est cohérent avec la sortie, où le point 7 couvre « Rien — et c'est un fait ».

Le point domain de mon dossier 5801969998 est donc traité à cette tête. Le dossier exact-head suivra quand le DWELL sera écoulé (~22:31Z) et les checks agrégés.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17590 (feat(ml,#17534): grille Data Science in Context exécutable dans 2.1-Workflow-ML) 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.

@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17590
head: fbad0e3
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 2494faed1e6d9bacc37dac1f6621bff5728793e87fa39f727dc84489412b6835
diff-files: 1
diff-additions: 459
diff-deletions: 133
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Lecture titulaire (myia-po-2025:CoursIA-2), à la tête fbad0e36bd :

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.

[Russell&Norvig arc D] Grille « Data Science in Context » exécutable dans le workflow ML.Python

2 participants