From fafcab6f5db27339bc6c507072f94d29b3411816 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 30 Sep 2026 02:37:35 +0200 Subject: [PATCH] fix(prose,#17636): relay burst w5 c16 -- 2.11e-CVXPY + 2.14b-XAI-Shap, md-only Co-Authored-By: Claude Sonnet 4.6 (1M context) --- .../02-ML-Cours/2.11e-CVXPY-Optimisation.ipynb | 13 ++++++------- .../2.14b-XAI-Shap-Attribution-Causal-Bridge.ipynb | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.11e-CVXPY-Optimisation.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.11e-CVXPY-Optimisation.ipynb index 8f3fa746de..4d6a412985 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.11e-CVXPY-Optimisation.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.11e-CVXPY-Optimisation.ipynb @@ -18,7 +18,7 @@ "\n", "**Série 02-ML-Cours** (Data Science With Agents) — **Bloc B.7** de l'issue #16061 (*Optimisation convexe avancée from scratch*). Le Bloc A a construit les méthodes **from scratch** (proximal en `2.11b`, ADMM en `2.11d`), le début du Bloc B a pris le côté **SOTA bibliothèque** (`sklearn` en `2.11c`). Ce notebook prend le **troisième** chemin : la **modélisation déclarative**. On n'écrit plus l'algorithme du tout — on **écrit le problème**, et on choisit le solveur par son nom.\n", "\n", - "- la même formulation Lasso écrite en **une ligne** avec `cvxpy`, sur **le même problème** que `2.11b`/`2.11c` (seed 42), donc comparable nombre à nombre ;\n", + "- la même formulation Lasso écrite avec `cvxpy`, sur **le même problème** que `2.11b`/`2.11c` (seed 42), donc comparable nombre à nombre ;\n", "- ce que la couche de modélisation **fabrique** avant d'appeler le solveur : la reformulation canonique, lue sur les données réellement transmises ;\n", "- **un problème, plusieurs solveurs** — CLARABEL (point intérieur), SCS (premier ordre), OSQP (QP) : même optimum, tarifs différents ;\n", "- la **dualité lue dans les variables duales** : le certificat KKT des blocs A et B sort directement du solveur, sans le recoder ;\n", @@ -236,7 +236,7 @@ "tags": [] }, "source": [ - "### Lecture — une ligne de modèle, et une solution au sixième chiffre\n", + "### Lecture — un modèle déclaratif, et une solution au sixième chiffre\n", "\n", "`is_dcp()` rend `True` sur la formulation correcte **et** `False` sur la variante concave : la couche de modélisation ne résout pas seulement, elle **vérifie**. C'est une différence de nature avec le from scratch — là-bas, une erreur de signe se paie en itérations silencieuses ; ici, elle se paie à la compilation.\n", "\n", @@ -346,7 +346,7 @@ "\n", "Le vecteur de coût linéaire le confirme sans ambiguïté : ses **500 composantes non nulles valent toutes exactement $\\lambda$** — ce sont les variables d'épigraphe $t_j$, celles que la reformulation a introduites, et que le modélisateur n'a jamais écrites. La matrice $P$ est extrêmement creuse (200 non-nuls : le terme quadratique ne touche que les résidus), et $A$ l'est à 7 %.\n", "\n", - "C'est le contrat du déclaratif, énoncé honnêtement : **on paie en structure canonique ce qu'on économise en lignes de code**. Un modèle écrit en une ligne produit un problème 2,4 fois plus gros que le problème mathématique. Le from scratch n'a pas ce coût de traduction — mais il n'a pas non plus la garantie de convexité, ni le choix du solveur. C'est cet arbitrage que le $\\S9$ chiffre à l'échelle.\n" + "C'est le contrat du déclaratif, énoncé honnêtement : **on paie en structure canonique ce qu'on économise en lignes de code**. Un modèle déclaratif produit un problème 2,4 fois plus gros que le problème mathématique. Le from scratch n'a pas ce coût de traduction — mais il n'a pas non plus la garantie de convexité, ni le choix du solveur. C'est cet arbitrage que le $\\S9$ chiffre à l'échelle.\n" ] }, { @@ -628,7 +628,7 @@ "| Statut | optimal (certifié DCP) | certificat KKT | point fixe proximal | optimal |\n", "| Itérations | ~12 | ~82 epochs | 2000 (fixes) | warm start |\n", "\n", - "Ce que chaque colonne apporte, et qu'aucune autre ne remplace : le from scratch **explique** la mécanique (soft-threshold par coordonnée, point fixe proximal) ; `sklearn` **optimise** la boucle ; `cvxpy` **change le problème** qu'on peut écrire, pas seulement la vitesse à laquelle on le résout. Un group Lasso, une contrainte $\\|x\\|_1 \\le \\tau$, un objectif à trois termes : le from scratch demanderait trois algorithmes, le déclaratif demande trois lignes — c'est le sujet des exercices du $\\S11$.\n" + "Ce que chaque colonne apporte, et qu'aucune autre ne remplace : le from scratch **explique** la mécanique (soft-threshold par coordonnée, point fixe proximal) ; `sklearn` **optimise** la boucle ; `cvxpy` **change le problème** qu'on peut écrire, pas seulement la vitesse à laquelle on le résout. Un group Lasso, une contrainte $\\|x\\|_1 \\le \\tau$, un objectif à trois termes : le from scratch demanderait trois algorithmes, le déclaratif se contente de l'énoncé — c'est le sujet des exercices du $\\S11$.\n" ] }, { @@ -967,7 +967,7 @@ "- à $\\lambda_{\\max}$ exactement, l'écart à $f(0)$ est de l'ordre du bruit du solveur ($+10^{-7}$) et une coordonnée traîne encore à $3\\cdot10^{-4}$ : c'est le point de dégénérescence annoncé, où plusieurs points sont optimaux ;\n", "- au-delà ($1{,}001\\,\\lambda_{\\max}$), la coordonnée rendue vaut $1{,}4\\cdot10^{-6}$ — indistinguable de zéro, l'écart d'objectif étant retombé à $6\\cdot10^{-9}$ : c'est le seuil de comptage ($10^{-6}$) qui la fait encore apparaître, pas la solution.\n", "\n", - "La leçon de méthode est double. D'abord, un seuil se **calcule** ($\\|A^{\\top}b\\|_{\\infty}$, une ligne) plutôt que se chercher : la condition KKT le donne, le solveur ne fait que le confirmer. Ensuite, à la frontière d'un régime, **le comptage de non-nuls est un mauvais instrument** — c'est l'écart d'objectif qui départage une coordonnée vraie d'une coordonnée fantôme.\n" + "La leçon de méthode est double. D'abord, un seuil se **calcule** ($\\|A^{\\top}b\\|_{\\infty}$) plutôt que se chercher : la condition KKT le donne, le solveur ne fait que le confirmer. Ensuite, à la frontière d'un régime, **le comptage de non-nuls est un mauvais instrument** — c'est l'écart d'objectif qui départage une coordonnée vraie d'une coordonnée fantôme.\n" ] }, { @@ -1277,8 +1277,7 @@ "| Temps ($p=500$) | ~0,1-0,5 s | ~0,01 s | ~0,6 s |\n", "| Temps ($p=4000$) | ~0,2-2 s | ~0,3 s | plusieurs s |\n", "| Itérations | 82 epochs / 2000 / 500 | warm start | ~12-18 |\n", - "| Lignes de code | 15-25 | 1 | 2 |\n", - "| Coût du changement de problème | un nouvel algorithme | non couvert | une ligne |\n", + "| Coût du changement de problème | un nouvel algorithme | non couvert | réécrire l'énoncé |\n", "| Garantie de convexité | analyse manuelle | non | ruleset DCP |\n", "| Certificat dual | codé à la main | non exposé | lu dans les duales |\n" ] diff --git a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.14b-XAI-Shap-Attribution-Causal-Bridge.ipynb b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.14b-XAI-Shap-Attribution-Causal-Bridge.ipynb index d693a58be6..266621d9aa 100644 --- a/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.14b-XAI-Shap-Attribution-Causal-Bridge.ipynb +++ b/MyIA.AI.Notebooks/ML/DataScienceWithAgents/02-ML-Cours/2.14b-XAI-Shap-Attribution-Causal-Bridge.ipynb @@ -38,7 +38,7 @@ "\n", "- [2.14-Explicabilite-SHAP-LIME-Contrefactuels](2.14-Explicabilite-SHAP-LIME-Contrefactuels.ipynb) — la base XAI (SHAP Tree/Kernel, LIME, DiCE contrefactuels, acceptance 7/7)\n", "- [CausalBridges-01-Do-Calculus.ipynb](../../../Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb) — do-calculus Bareinboim-Pearl R-90, mediation counterfactuelle (P2 EPIC #16620)\n", - "- [CausalBridges-01-Do-Calculus.ipynb](../../../Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb) — do-calculus ≅ conditional Shapley (P4 EPIC #16620, 30→43 cellules)\n", + "- [CausalBridges-01-Do-Calculus.ipynb](../../../Probas/DecisionTheory/Causal-Bridges/CausalBridges-01-Do-Calculus.ipynb) — do-calculus ≅ conditional Shapley (P4 EPIC #16620)\n", "- [Causal-Bridges](../../../Probas/DecisionTheory/Causal-Bridges/README.md) — versant causal pur (DoWhy, contrefactuels sur DAG)\n", "\n", "**Acceptance** (8 critères du cadrage c.655 / #16669) :\n", @@ -49,7 +49,7 @@ "4. ≥ 1 visualisation LIME.\n", "5. ≥ 1 contrefactuel DiCE.\n", "6. Section 5 « Jonction Shap ↔ do-calculus (T9) » mesure l'ecart KernelShap vs conditional Shapley.\n", - "7. Section 6 « Ponts » renvoie aux 6 notebooks causaux.\n", + "7. Section 6 « Ponts » renvoie aux notebooks causaux.\n", "8. Section 7 « Note explicatif ≠ causal » cite R4 §3.3 + R3 §2.4." ] },