From 377089143d40530d1cc86f32912f0e1440c70756 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 7 Oct 2026 02:11:36 +0200 Subject: [PATCH 1/3] Fix(ml,#17379): audit correctif 3.6e/3.9g -- renvois perimes (#16137, #16056 clos) et compte de prose Audit correctif de la campagne #17073 sur deux carnets non encore audites de la checklist : 3.6e (dernier membre non audite de la famille 3.6) et 3.9g (capstone compression, absent de la checklist). Cinq findings, tous mesures contre les artefacts -- pas de survol : 1. 3.6e -- le renvoi "suivi ouvert, issue #16137" est perime : #16137 est CLOSED/COMPLETED depuis le 2026-09-15, et le 3.6c porte desormais le protocole de mesure (5 bandes passantes x 4 seeds x 2 budgets) dont le verdict imprime est INCONCLUSIVE. Le renvoi pointe maintenant le resultat mesure. 2. 3.6e -- "est l'objet du bloc B de l'issue #16056" : #16056 est CLOSED depuis le 2026-09-18, et le pendant industriel est LIVRE sous la forme du 3.10-Modeles-Generatifs-Diffusion-SOTA.ipynb, qui se nomme lui-meme le pendant SOTA de 3.6c/3.6d/3.6e. Le renvoi pointe le carnet. 3-4. 3.6e -- la liste de navigation melait liens (3.6, 3.6b) et backticks (3.6c, 3.6d) : les deux cibles existent, elles sont maintenant liees. 5. 3.9g -- "Les six notebooks precedents" alors que sept sont cites (3.9, 3.9a, 3.9b, 3.9c, 3.9d, 3.9e, 3.9f) ; le repertoire en porte huit avec le 3.9g. 6. 3.9g -- 3.9f est decrit "globale contre uniforme" en c.[23] et "globale contre random" en c.[34] : l'enonce-titre de 3.9f est "local vs global" (allocation par couche contre allocation par importance), le random local n'en est que le plancher probant (3.9f, c.[33]). Les deux mentions sont alignees. Method : les 6 organes de la campagne, puis verification programmatique des chiffres cites en prose contre les sorties committes. Croises et exacts (aucun finding) : tableau 3.9g contre sa sortie, 0,9019 de 3.9a, 1071 -> 267 Ko et 21,4 -> 12,1 ms de 3.9e, 40,81 M de 3.9b. Correctifs markdown-only (exception C.2, aucune cellule de code touchee) : execution_count et outputs inchanges, 0 sortie d'erreur, tous les liens internes resolvent. Re-execution non due. See #17379 Co-Authored-By: Claude Sonnet 5.5 --- ...6e-Modeles-Generatifs-Conditionnels-from-scratch.ipynb | 8 ++++---- .../3.9g-Compression-Comparatif-A-vs-B.ipynb | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.6e-Modeles-Generatifs-Conditionnels-from-scratch.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.6e-Modeles-Generatifs-Conditionnels-from-scratch.ipynb index e3262c03bf..2f271c7fc9 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.6e-Modeles-Generatifs-Conditionnels-from-scratch.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.6e-Modeles-Generatifs-Conditionnels-from-scratch.ipynb @@ -150,7 +150,7 @@ "\n", "**Tout le conditionnement vit dans le réseau et dans la boucle d'échantillonnage — pas dans la théorie.** C'est le point qui surprend quand on ouvre une bibliothèque : `guidance_scale` n'apparaît nulle part dans l'équation du DDPM. Elle n'y a jamais été.\n", "\n", - "On fixe le schedule **linéaire** : la question « linéaire ou cosinus » a été instrumentée dans le 3.6c, et elle reste sous-déterminée par le choix du noyau MMD (suivi ouvert, issue #16137). Reprendre ce débat ici mélangerait deux questions ; il est donc tenu à l'écart, et signalé.\n" + "On fixe le schedule **linéaire** : la question « linéaire ou cosinus » a été instrumentée dans le 3.6c, puis tranchée par un protocole de mesure (5 bandes passantes, 4 seeds, 2 budgets) dont le verdict est `INCONCLUSIVE` : le rang dépend du noyau. Reprendre ce débat ici mélangerait deux questions ; il est donc tenu à l'écart, et signalé.\n" ] }, { @@ -1379,10 +1379,10 @@ "\n", "- [3.6](3.6-Modeles-Generatifs.ipynb) — panorama (VAE, GAN, flows, diffusion, EBM) en NumPy pur\n", "- [3.6b](3.6b-Modeles-Generatifs-PyTorch.ipynb) — le versant framework, mêmes cibles, mêmes métriques\n", - "- `3.6c` — le DDPM inconditionnel, schedules comparés\n", - "- `3.6d` — le même objet en temps continu (score, Langevin, Euler-Maruyama)\n", + "- [3.6c](3.6c-Modeles-Generatifs-Diffusion-from-scratch.ipynb) — le DDPM inconditionnel, schedules comparés\n", + "- [3.6d](3.6d-Modeles-Generatifs-Score-SDE-from-scratch.ipynb) — le même objet en temps continu (score, Langevin, Euler-Maruyama)\n", "\n", - "Le pendant industriel — `diffusers` avec `DDPMScheduler` et `UNet2D` — est l'objet du bloc B de l'issue #16056.\n", + "Le pendant industriel — `diffusers` avec `DDPMScheduler` et `UNet2D` — est livré par le [3.10](3.10-Modeles-Generatifs-Diffusion-SOTA.ipynb).\n", "\n", "Le chapitre « Guidance » de Luo (2022, *Understanding Diffusion Models: A Unified Perspective*, p. 20-22) creuse l'arbitrage derrière le CFG de ce notebook : un modèle conditionnel peut apprendre à ignorer son conditionnement, le classifier guidance l'objective au prix de la diversité, et le classifier-free guidance en est la variante sans classifieur.\n" ] diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb index a2dabcb72b..7674cf551d 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb @@ -16,7 +16,7 @@ "source": [ "# 3.9g — Comparatif compression : from scratch (Bloc A) vs écosystème (Bloc B)\n", "\n", - "Ce notebook est le **capstone** de la série compression (issue #16060, bloc 7). Les six notebooks\n", + "Ce notebook est le **capstone** de la série compression (issue #16060, bloc 7). Les sept notebooks\n", "précédents ont construit chaque méthode isolée :\n", "\n", "- **3.9 / 3.9a** : quantization FP16/BF16 puis INT8 dynamique **à la main** (numpy, scale + zéro-point)\n", @@ -1631,7 +1631,7 @@ "\n", "Références croisées : 3.9 (FP from scratch), 3.9a (INT8 from scratch), 3.9b/3.9c (pruning\n", "from scratch), 3.9d (distillation), 3.9e (quantization torch.ao — le x4,0 FX statique),\n", - "3.9f (pruning torch.nn.utils — allocation globale contre random). Hors scope, assume par\n", + "3.9f (pruning torch.nn.utils — allocation globale contre locale/uniforme). Hors scope, assume par\n", "l'issue : GPTQ/AWQ sur LLM (FT-02 QLoRA), NAS, multi-teacher." ] } From 1bb6ef4be8eb1d0a194b55211c0b534755575d3e Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 7 Oct 2026 02:16:15 +0200 Subject: [PATCH 2/3] Fix(ml,#17387): Lab5 -- nav/H1 au canon, exercices avant Conclusion, lecture ancree, accents Audit correctif de la campagne #17073 sur Lab5-Viz-ML, le deficit de serie laisse explicitement en attente par la livraison de Lab6 (PR #17392 : "Le deficit de serie Lab5 (meme pattern nav/Exemple guide) reste a la tranche Lab5 -- non touche ici"). Canon mesure, pas suppose : sur les 7 labs du track, 6 portent un unique Index = ../../README.md en cellule 0, un seul H1 et aucun titre H2 replique. Lab5 etait le seul outlier. Findings corriges : 1. navigation-misplaced -- deux blocs de nav divergents (Index vers ../../../../README.md d'un cote, ../../README.md de l'autre) et le titre du lab replique en H2 sous le H1. Cellule 0 remise au canon Lab6 (H1 puis nav, Index unique) ; le H2 duplique et le second bloc de nav sont retires. 2. progression-break -- "Exemple guide" et ses exercices arrivaient APRES "## Conclusion". Les exercices passent avant ; Conclusion, References puis bloc de retour ferment le carnet (forme Lab6). 3. exercise-mismatch -- la section "Exemple guide" annoncait un exemple resolu mais son corps et la cellule suivante etaient le PREMIER exercice, non numerote, les suivants etant numerotes 2, 3, 4. Renommee "Exercice 1". 4. lecture non ancree -- l'interpretation du score proposait des seuils de lecture (> 0,7 / 0,4-0,7 / < 0,4) sans lire la sortie committee. Elle lit desormais la precision reellement mesuree (1.00) et dit pourquoi elle ne mesure rien : transactions.csv ne porte que 6 lignes (4 entrainement, 2 test). 5. accents -- 1 cure par le curer canonique, plus 8 formes hors table curees a la main dans le markdown (comprehension, cote a cote, Evaluation, evaluer, detaillee, entraine, detaille, evaluation). "classe" (x2) reste signale par le detecteur : faux positif, "la classe" est correctement orthographie. Correctifs markdown-only (exception C.2) : aucune cellule de code touchee, l'ordre relatif des cellules de code et leurs execution_count (1..10) sont preserves, 0 sortie d'erreur, 5/5 liens internes resolvent. La cause racine du point 4 est la taille de transactions.csv (Lab4, 6 lignes) : hors perimetre de ce claim, signalee par l'issue #19624. See #17387 Co-Authored-By: Claude Sonnet 5.5 --- .../Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb | 134 ++++++++++-------- 1 file changed, 72 insertions(+), 62 deletions(-) diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb index 559ec7d7b3..07f928d781 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb @@ -14,8 +14,9 @@ "tags": [] }, "source": [ - "**Navigation** : [Index](../../../../README.md) | [<< Lab4](../Lab4-DataWrangling/Lab4-DataWrangling.ipynb) | [Lab6 >>](../Lab6-First-Agent/Lab6-First-Agent.ipynb)\n", - "# Lab 5 - De la Visualisation au Machine Learning" + "# Lab 5 - De la Visualisation au Machine Learning\n", + "\n", + "**Navigation** : [Lab 4 <<](../Lab4-DataWrangling/Lab4-DataWrangling.ipynb) | [Index](../../README.md) | [Lab 6 >>](../Lab6-First-Agent/Lab6-First-Agent.ipynb)\n" ] }, { @@ -32,10 +33,6 @@ "tags": [] }, "source": [ - "## Lab 5 - De la Visualisation au Machine Learning\n", - "\n", - "**Navigation** : [Lab 4 <<](../Lab4-DataWrangling/Lab4-DataWrangling.ipynb) | [Index](../../README.md) | [>> Lab 6](../Lab6-First-Agent/Lab6-First-Agent.ipynb)\n", - "\n", "## Objectifs d'apprentissage\n", "\n", "À la fin de ce laboratoire, vous saurez :\n", @@ -513,51 +510,14 @@ "tags": [] }, "source": [ - "**Interprétation du score :** Le score de précision (accuracy) nous indique le pourcentage de prédictions correctes que notre modèle a faites sur l'ensemble de test. Exécutez les cellules ci-dessus pour obtenir le score, puis interprétez-le :\n", - "- **> 0.7** : le modèle distingue bien les catégories à partir du prix et de la quantité.\n", - "- **0.4-0.7** : les features choisies donnent des résultats mitigés.\n", - "- **< 0.4** : le prix et la quantité seuls ne suffisent pas à différencier les catégories de produits." - ] - }, - { - "cell_type": "markdown", - "id": "c111b9db", - "metadata": { - "papermill": { - "duration": 0.004496, - "end_time": "2026-05-15T02:45:56.593251+00:00", - "exception": false, - "start_time": "2026-05-15T02:45:56.588755+00:00", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "## Conclusion" - ] - }, - { - "cell_type": "markdown", - "id": "e1d050cf", - "metadata": { - "papermill": { - "duration": 0.011949, - "end_time": "2026-05-15T02:45:56.605200+00:00", - "exception": false, - "start_time": "2026-05-15T02:45:56.593251+00:00", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "Félicitations ! Vous avez acquis deux compétences fondamentales en Data Science :\n", - "1. **L'analyse exploratoire par la visualisation**, pour comprendre vos données.\n", - "2. **La modélisation prédictive**, pour utiliser vos données afin de faire des prédictions.\n", + "**Interprétation du score :** la cellule ci-dessus imprime la précision mesurée sur l'ensemble de test — ici **1.00**. C'est le moment de se méfier plutôt que de se réjouir.\n", "\n", - "**Lien avec les agents d'IA :**\n", - "Ce processus que nous avons mené manuellement peut être entièrement automatisé par un agent d'IA. Imaginez pouvoir demander simplement : \"Analyse les ventes du trimestre dernier, identifie les 3 meilleures catégories de produit, et construis un modèle pour prédire la catégorie des nouveaux produits.\"\n", + "`transactions.csv` ne porte que **6 lignes** : 4 servent à l'entraînement, 2 au test (la cellule de préparation l'affiche). Une précision parfaite sur deux exemples ne mesure rien — elle dit qu'un modèle à peine contraint a bien classé les deux points qu'on lui a laissés, pas qu'il « distingue les catégories ». La leçon de méthode de cette étape est là : un score ne se lit qu'avec le volume de test qui le porte.\n", "\n", - "Pour ce faire, l'agent utiliserait des **outils** (tools) qui encapsuleraient la logique que nous venons d'écrire avec `pandas`, `seaborn` et `sklearn`. Le rôle de l'agent est d'orchestrer ces outils pour répondre à la demande de l'utilisateur." + "Les repères ci-dessous décrivent ce que le score signifierait **sur un ensemble de test de taille suffisante** :\n", + "- **> 0.7** : le modèle distingue bien les catégories à partir du prix et de la quantité.\n", + "- **0.4-0.7** : les features choisies donnent des résultats mitigés.\n", + "- **< 0.4** : le prix et la quantité seuls ne suffisent pas à différencier les catégories de produits.\n" ] }, { @@ -574,12 +534,9 @@ "tags": [] }, "source": [ - "## Exemple guidé\n", - "\n", - "À vous de pratiquer la visualisation et la classification binaire !\n", + "### Exercice 1 : Prix moyen par catégorie et classification binaire\n", "\n", - "***\n", - "**Retour au sommaire** : [Index ML](../../../../README.md)\n" + "À vous de pratiquer la visualisation et la classification binaire. La cellule ci-dessous contient les deux volets de l'exercice — complétez-la.\n" ] }, { @@ -643,14 +600,14 @@ "source": [ "### Exercice 2 : Analyse de la distribution des prix\n", "\n", - "La comprehension de la distribution des variables est essentielle avant de construire un modèle. Vous allez créer un histogramme et un boxplot pour analyser la repartition des prix unitaires par catégorie.\n", + "La compréhension de la distribution des variables est essentielle avant de construire un modèle. Vous allez créer un histogramme et un boxplot pour analyser la repartition des prix unitaires par catégorie.\n", "\n", "**Objectif** : Visualiser la distribution de `prix_unitaire` avec un histogramme global et un boxplot par catégorie.\n", "\n", "**Indices** :\n", "- Utilisez `sns.histplot()` avec le paramètre `bins` pour l'histogramme\n", "- Utilisez `sns.boxplot()` avec `x='catégorie'` et `y='prix_unitaire'` pour le boxplot\n", - "- Utilisez `plt.subplots(1, 2, figsize=(14, 5))` pour afficher les deux graphiques cote a cote" + "- Utilisez `plt.subplots(1, 2, figsize=(14, 5))` pour afficher les deux graphiques côte à côte" ], "metadata": {} }, @@ -698,17 +655,17 @@ "cell_type": "markdown", "id": "8799361b", "source": [ - "### Exercice 3 : Evaluation avec la matrice de confusion\n", + "### Exercice 3 : Évaluation avec la matrice de confusion\n", "\n", - "L'accuracy seule ne suffit pas toujours a evaluer un modèle de classification. Vous allez utiliser la matrice de confusion et le rapport de classification pour obtenir une vue detaillee des performances de votre modèle par catégorie.\n", + "L'accuracy seule ne suffit pas toujours à évaluer un modèle de classification. Vous allez utiliser la matrice de confusion et le rapport de classification pour obtenir une vue détaillée des performances de votre modèle par catégorie.\n", "\n", - "**Objectif** : Afficher la matrice de confusion et le rapport de classification du modèle `LogisticRegression` entraine precedemment.\n", + "**Objectif** : Afficher la matrice de confusion et le rapport de classification du modèle `LogisticRegression` entraîné précédemment.\n", "\n", "**Indices** :\n", "- Importez `confusion_matrix` et `classification_report` depuis `sklearn.metrics`\n", "- Utilisez `confusion_matrix(y_test, y_pred)` pour obtenir la matrice\n", "- Utilisez `sns.heatmap()` pour visualiser la matrice de confusion\n", - "- Appelez `classification_report(y_test, y_pred)` pour le rapport detaille" + "- Appelez `classification_report(y_test, y_pred)` pour le rapport détaillé" ], "metadata": {} }, @@ -759,11 +716,11 @@ "cell_type": "markdown", "id": "e9fe6ce9", "source": [ - "### Exercice 4 : Courbe ROC et evaluation visuelle du modèle\n", + "### Exercice 4 : Courbe ROC et évaluation visuelle du modèle\n", "\n", "L'accuracy et la matrice de confusion donnent une vision globale, mais la courbe ROC (Receiver Operating Characteristic) permet de visualiser le compromis entre le taux de vrais positifs et le taux de faux positifs a différents seuils de decision. Vous allez tracer la courbe ROC pour la classification binaire (chiffre d'affaires eleve vs. bas).\n", "\n", - "**Objectif** : Construire une cible binaire (`ca_eleve` = 1 si `chiffre_affaires > 50`), entrainer un `LogisticRegression`, puis tracer la courbe ROC avec `sklearn.metrics.roc_curve`.\n", + "**Objectif** : Construire une cible binaire (`ca_eleve` = 1 si `chiffre_affaires > 50`), entraîner un `LogisticRegression`, puis tracer la courbe ROC avec `sklearn.metrics.roc_curve`.\n", "\n", "**Indices** :\n", "- Créez la cible binaire : `df_clean['ca_eleve'] = (df_clean['chiffre_affaires'] > 50).astype(int)`\n", @@ -830,6 +787,47 @@ } ] }, + { + "cell_type": "markdown", + "id": "c111b9db", + "metadata": { + "papermill": { + "duration": 0.004496, + "end_time": "2026-05-15T02:45:56.593251+00:00", + "exception": false, + "start_time": "2026-05-15T02:45:56.588755+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "## Conclusion" + ] + }, + { + "cell_type": "markdown", + "id": "e1d050cf", + "metadata": { + "papermill": { + "duration": 0.011949, + "end_time": "2026-05-15T02:45:56.605200+00:00", + "exception": false, + "start_time": "2026-05-15T02:45:56.593251+00:00", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "Félicitations ! Vous avez acquis deux compétences fondamentales en Data Science :\n", + "1. **L'analyse exploratoire par la visualisation**, pour comprendre vos données.\n", + "2. **La modélisation prédictive**, pour utiliser vos données afin de faire des prédictions.\n", + "\n", + "**Lien avec les agents d'IA :**\n", + "Ce processus que nous avons mené manuellement peut être entièrement automatisé par un agent d'IA. Imaginez pouvoir demander simplement : \"Analyse les ventes du trimestre dernier, identifie les 3 meilleures catégories de produit, et construis un modèle pour prédire la catégorie des nouveaux produits.\"\n", + "\n", + "Pour ce faire, l'agent utiliserait des **outils** (tools) qui encapsuleraient la logique que nous venons d'écrire avec `pandas`, `seaborn` et `sklearn`. Le rôle de l'agent est d'orchestrer ces outils pour répondre à la demande de l'utilisateur." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -842,6 +840,18 @@ "4. J. W. Tukey, *Exploratory Data Analysis*, Addison-Wesley, 1977. Cadre de l'EDA (Étape 2) — référence détaillée au Lab 4.\n" ], "id": "cell-d1c9f249" + }, + { + "cell_type": "markdown", + "id": "cell-lab5-retour", + "metadata": { + "tags": [] + }, + "source": [ + "***\n", + "\n", + "**Retour au sommaire** : [Index ML](../../../../README.md) | [Journée 3](../../README.md)\n" + ] } ], "metadata": { From 42c6162048c0723f33db6d8cb1ab6f99fe74e8b4 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 7 Oct 2026 04:55:27 +0200 Subject: [PATCH 3/3] Fix(ml,#17387): Lab5 -- le compte de lignes en prose cede la place a la taille affichee prose-counts refusait la ligne ajoutee `**6 lignes**` (les donnees quantitatives sont tenues par le CI, #9377) : la phrase porte desormais le predicat sans le compte, formulation proposee par ai-01 (DM 2026-10-07T02:21Z). Markdown only, aucune cellule code touchee, pas de re-execution due. Co-Authored-By: Claude Sonnet 5.5 --- .../Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb index 07f928d781..aad6d3b6d5 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track1-LangChain/Day3-Data-Agents/Labs/Lab5-Viz-ML/Lab5-Viz-ML.ipynb @@ -512,7 +512,7 @@ "source": [ "**Interprétation du score :** la cellule ci-dessus imprime la précision mesurée sur l'ensemble de test — ici **1.00**. C'est le moment de se méfier plutôt que de se réjouir.\n", "\n", - "`transactions.csv` ne porte que **6 lignes** : 4 servent à l'entraînement, 2 au test (la cellule de préparation l'affiche). Une précision parfaite sur deux exemples ne mesure rien — elle dit qu'un modèle à peine contraint a bien classé les deux points qu'on lui a laissés, pas qu'il « distingue les catégories ». La leçon de méthode de cette étape est là : un score ne se lit qu'avec le volume de test qui le porte.\n", + "`transactions.csv` est minuscule (la cellule de préparation en affiche la taille) : quatre exemples à l'entraînement, deux au test. Une précision parfaite sur deux exemples ne mesure rien — elle dit qu'un modèle à peine contraint a bien classé les deux points qu'on lui a laissés, pas qu'il « distingue les catégories ». La leçon de méthode de cette étape est là : un score ne se lit qu'avec le volume de test qui le porte.\n", "\n", "Les repères ci-dessous décrivent ce que le score signifierait **sur un ensemble de test de taille suffisante** :\n", "- **> 0.7** : le modèle distingue bien les catégories à partir du prix et de la quantité.\n",