# MANIFEST des figures README

Provenance des images de `assets/readme/` (EPIC #5654, source 1 = extraction d'outputs de notebooks).
**Audit G.1 c.486 (2026-07-14, doctrine #5780)** : migration vague-1 → standard avec section *Contenu réel vérifié* + *Ce qui n'est PAS dans la figure* par figure. **Bilan : 3 ACCURATE sans correction + 2 corrections réelles + 1 enrichissement** (dt2 et dt3 omettent des panneaux décisifs, dt5-evpi omet la frontière de décision bleue et le scenario actuel). 33% bug-rate, cohérent avec familles à dominante matplotlib (cf c.483 Probas/PyMC racine 50%, c.478 SocialChoice 6/6 ACCURATE — rigueur variable selon auteur, mais la structure pédagogique reste robuste).

**Migration c.779 (2026-07-22, doctrine #5780, asset-side enforcement)** : ajout du champ canonique `Description visuelle` aux 6 entrées (format vague-1 → 3-champs canonique Source / Description visuelle / Alt-text / Poids / Contenu réel vérifié / Ce qui n'est PAS). Source = vision-QA MiniMax M3 (`Read` direct des 6 PNG via po-2024, mandat 2026-07-11) + stats RGB PIL (mean/std par canal, échantillonnage 2000 pixels random seed 42). Conformité avec le détecteur `scripts/notebook_tools/detect_manifest_field.py` (PR #7819 c.754). Le champ `Contenu réel vérifié` (audit c.486 po-2025) reste en place comme preuve falsifiable détaillée ; le nouveau `Description visuelle` est la version canonique courte destinée à l'extraction automatique et au lecteur rapide. **6/6 figures conformes au détecteur post-migration.**

## dt2-investment.png

- **Source** : notebook `DecPyMC-2-Utility-Money.ipynb` (cellule 31, output 0 — display_data `image/png`)
- **Description visuelle** : Figure matplotlib 4 panneaux en grille 2×2 (1189×790, fond blanc, axes étiquetés). **Haut gauche « Distribution : Obligations »** : histogramme bleu (`#1f77b4` `tab:blue` matplotlib par défaut, axe X -0.05 à 0.10 rendement, axe Y densité 0-20, ligne rouge pointillée verticale « Rendement nul » à 0, ligne noire verticale « E = 3.0% », pic à 0.025). **Haut droite « Distribution : Actions »** : histogramme vert (`#2ca02c` `tab:green` matplotlib, axe X -0.6 à 0.6, axe Y densité 0-2.5, ligne rouge pointillée « Rendement nul », ligne noire « E = 7.9% », pic à 0.08). **Bas gauche « Distribution : Crypto »** : histogramme orange (`#ff7f0e` `tab:orange` matplotlib, axe X -2 à 3, axe Y densité 0-0.7, ligne rouge pointillée « Rendement nul », ligne noire « E = 14.9% », pic à 0.15). **Bas droite « EU en fonction de l'aversion »** : courbe orange unique (axe X « Coefficient rho (CRRA) » 1-10, axe Y « Utilité esperée » 0 à -3×10⁸⁷) — **3 lignes horizontales** superposées (Obligations bleu, Actions vert, Crypto orange) quasi-plates à 0 pour rho 1-9 puis **chute brutale** des 3 courbes à ~-3×10⁸⁷ à rho=10 (instabilité numérique exponentielle). Légende interne coin haut-gauche de chaque panneau. Stats RGB PIL : moyenne (237.34, 237.75, 236.12), std (52.86, 47.52, 54.51) — std modéré typique d'histogrammes denses colorés sur blanc (3 panels bleus/verts/orange + 1 panel lignes colorées). Cohérent avec un **profil de risque bayésien** où l'utilité espérée Crypto passe de la meilleure (rho=1) à la pire (rho=10) à cause de la queue lourde combinée à l'aversion.
- **Alt-text (FR)** : Choix d'investissement sous aversion au risque : distributions postérieures de rendement (Obligations, Actions, Crypto) et utilité espérée en fonction du coefficient d'aversion CRRA.
- **Poids** : 69.7 KB (natif)
- **Contenu réel vérifié (2026-07-14, c.486)** : **4 panneaux matplotlib en grille 2×2** : haut gauche « Distribution : Obligations » histogramme bleu (E=3.0%, ligne rouge pointillée « Rendement nul » à 0, axe rendement -0.05 à 0.10, densité max 20) ; haut droite « Distribution : Actions » histogramme vert (E=7.9%, axe -0.6 à 0.6, densité max 2.5) ; bas gauche « Distribution : Crypto » histogramme orange (E=14.9%, axe -2 à 3, densité max 0.7) ; bas droite « EU en fonction de l'aversion » courbe orange Crypto vs rho CRRA (axe 1-10, utilité espérée ~0 puis chute à **-3×10⁸⁷** pour rho > 9 — instabilité numérique).
- **Ce qui n'est PAS dans la figure** : l'alt-text v1 mentionnait « trois actifs comparés » mais **omettait le 4ᵉ panneau « EU vs aversion »** qui est précisément le panneau **décisionnel** : il montre comment l'utilité espérée Crypto passe de la meilleure (rho faible = agent neutre) à la pire (rho élevé = agent très aversif). L'instabilité numérique à rho > 9 (valeurs ~10⁸⁷) révèle aussi une limite du modèle d'utilité exponentielle à queue lourde. Sans le 4ᵉ panneau, le titre « Choix d'investissement » perd sa substance (comparer 3 distributions sans profil de risque ne tranche pas la décision). Alt-text v1 sur-vendeur corrigé pour inclure les 4 panneaux et la mention du 4ᵉ panneau décisionnel.

## dt3-multiattribute.png

- **Source** : notebook `DecPyMC-3-Multi-Attribute.ipynb` (cellule 38, output 1 — display_data `image/png`)
- **Description visuelle** : Figure 2 panneaux côte à côte (1189×390, fond blanc). **Gauche « Distributions de l'utilité »** : histogrammes matplotlib superposés de 2 projets — **Projet A bleu** (`#1f77b4`, axe X utilité 0-1, axe Y densité 0-2.3, pic dense autour de E[U]=0.509, étiquettes annotation « Projet A E[U] = 0.509 »), **Projet B orange** (`#ff7f0e`, pic dense autour de E[U]=0.482, étiquettes « Projet B E[U] = 0.482 »). **Recouvrement massif** des 2 distributions sur l'intervalle [0,1] (DS-majeur + DS-faible indistinguables visuellement). **Droite « Rendement vs Risque (échantillon) »** : **scatter plot Monte Carlo** ~1500 points par projet (transparence alpha=0.4 pour densité visuelle) — nuage bleu Projet A centré autour de (rendement ≈ 0.08, risque ≈ 0.18), nuage orange Projet B autour de (rendement ≈ 0.10, risque ≈ 0.22), avec une **zone de chevauchement** centrale importante. Axes : X « Rendement » -0.2 à 0.6, Y « Risque » -0.1 à 0.6. Légende automatique coin haut-gauche du panneau droit. Stats RGB PIL : moyenne (237.16, 226.94, 217.86), std (44.60, 47.35, **68.36**) — **std B > std R/G tell discriminant** confirmant la dominance des zones bleues (scatter Dense Alpha) sur fond blanc. Coherent avec une analyse **stochastic dominance non-tranchée** : aucun projet ne bat l'autre sur tous les axes simultanément, ce qui motive MAUT/swing weights.
- **Alt-text (FR)** : Décision multi-attributs sous incertitude : distributions d'utilité de deux projets (Projet A E[U]=0.509, Projet B E[U]=0.482) et nuage de points rendement-risque illustrant la zone de non-dominance stochastique.
- **Poids** : 102.0 KB (natif)
- **Contenu réel vérifié (2026-07-14, c.486)** : **2 panneaux côte à côte** : gauche « Distributions de l'utilité » histogrammes superposés (Projet A bleu E[U]=0.509, Projet B orange E[U]=0.482, axe 0-1 utilité, densité max 2.3, **recouvrement massif** sur l'intervalle [0,1]) ; droite « Rendement vs Risque (échantillon) » scatter plot bleu Projet A vs orange Projet B (rendement axe -0.2 à 0.6, risque axe -0.1 à 0.6, ~1500 points par projet, **forme d'ellipse centrée sur (0.08, 0.18)**).
- **Ce qui n'est PAS dans la figure** : l'alt-text v1 mentionnait « Monte Carlo sur plusieurs critères en compétition » (la méthode) mais **omettait** : (a) le **scatter plot droite** qui visualise la corrélation rendement-risque (les 2 projets occupent des zones qui se chevauchent), (b) l'**écart E[U] 0.027 non significatif** (les distributions se recouvrent massivement, le test serait non concluant), (c) la **zone de non-dominance stochastique** où aucun projet ne bat l'autre sur tous les axes simultanément. Sans cette mention, l'alt-text laissait croire à une décision tranchée, alors que c'est précisément un cas où MAUT/swing weights devient nécessaire. Alt-text v1 corrigé pour inclure le scatter plot, l'écart E[U] explicite, et la zone de non-dominance.

## dt5-evpi-heatmap.png

- **Source** : notebook `DecPyMC-5-Value-Information.ipynb` (cellule 29, output 0 — display_data `image/png`)
- **Description visuelle** : **Heatmap matplotlib imshow** (942×684, axe X « Probabilité a priori P(pétrole) » de 0.0 à 1.0, axe Y « Gain si pétrole trouvé (milliers EUR) » de 0.2 à 2.0). Colormap **YlOrRd** (jaune clair → orange → rouge foncé, échelle 0 à 450 milliers EUR visible via colorbar verticale droite). **Frontière de décision bleue courbe** traversant la zone rouge en diagonale (= décision « acheter l'information parfaite » quand l'EVPI est élevé). **Étoile noire ★** « Scenario actuel (P=0.30, G=1000k) » placée **dans la zone claire** sous la frontière (information peu précieuse ici). **Lignes pointillées noires verticales et horizontales** marquant les seuils analytiques de basculement de décision (seuils de non-dominance où le seuil d'achat d'information bascule). Stats RGB PIL : moyenne (**244.18, 209.84, 178.21**) std (29.99, 44.06, **83.82**) — **R mean > G mean > B mean tell discriminant** = dominance rouge-orange (colormap YlOrRd tell, fondamentalement différent du heatmap imshow Gray-Scott c.778 = mean < 100). Le R mean élevé (244) + std B élevé (83) confirme la structure heatmap YlOrRd : fond jaune-clair dominant (zones peu précieuses) + pics rouge-foncé (zones d'EVPI élevé).
- **Alt-text (FR)** : Carte de chaleur EVPI selon la probabilité a priori de pétrole et le gain si pétrole trouvé, avec frontière de décision et scénario actuel (P=0.30, G=1000k) tombant en zone d'information peu précieuse.
- **Poids** : 68.5 KB (natif)
- **Contenu réel vérifié (2026-07-14, c.486)** : **Heatmap** axes (Probabilité a priori P(pétrole) 0.0-1.0 × Gain si pétrole trouvé 0.2-2.0 milliers EUR), colormap **YlOrRd** (jaune clair → rouge foncé, échelle 0 à 450 milliers EUR), **frontière de décision bleue** traversant la zone rouge (= décision « acheter l'information »), **étoile noire ★ « Scenario actuel (P=0.30, G=1000k) »** placée dans la zone claire sous la frontière, **lignes pointillées noires verticales et horizontales** marquant les seuils de basculement de décision.
- **Ce qui n'est PAS dans la figure** : l'alt-text v1 mentionnait « carte de chaleur selon la probabilité de pétrole et le gain » mais **omettait** : (a) la **frontière de décision bleue** (sépare la zone rouge où l'EVPI est élevé — décision « équilibrée » où l'information vaut cher — vs zone jaune où l'EVPI est faible — décision « triviale » où l'information est inutile), (b) le **scenario actuel ★ à (0.30, 1000k)** qui matérialise un point de décision concret tombant en zone **non-dominante** pour l'achat d'info, (c) les **lignes pointillées noires** matérialisant les seuils analytiques de basculement de décision. Sans la frontière + le scenario, la heatmap est décorative. Alt-text v1 enrichi pour refléter la frontière, le scenario actuel, et la zone d'opération réelle.

## dt5-mc-convergence.png

- **Source** : notebook `DecPyMC-5-Value-Information.ipynb` (cellule 54, output 0 — display_data `image/png`)
- **Description visuelle** : **1 graphique linéaire matplotlib** (984×484, fond blanc) avec **échelle log-x**. Axe X « Nombre d'échantillons N » de 10² (100) à 10⁵ (100000) en échelle log, axe Y « EVPI estimé (milliers EUR) » linéaire de 60 à 120. **Courbe bleue « EVPI estimé (MC) »** avec marqueurs cercles pleins reliant les 4 points (N=10², N=10³, N=10⁴, N=10⁵), valeurs fluctuantes mais convergeant vers ~90 à grand N. **Bande bleue transparente « IC 95% »** superposée (large à N=10² : ~63-117, **se resserre à N=10⁵** : ~88-92). **Ligne horizontale rouge pointillée « EVPI analytique = 90k »** traversant toute la largeur. Légende interne coin bas-gauche du panneau. Stats RGB PIL : moyenne (239.41, 238.78, **248.46**), std (47.07, 47.21, **52.20**) — **B mean > R mean > G mean tell discriminant** (`B - R > 9`) = signature dominance bleue (matplotlib `tab:blue` `#1f77b4` tell). Std uniforme ~47-52 typique de courbes colorées + bande transparente sur blanc. Convergence empiriquement atteinte à N=10⁴ samples, le seuil pratique pour accepter l'estimateur MC.
- **Alt-text (FR)** : Convergence de l'estimateur Monte Carlo de l'EVPI vers sa valeur analytique (90k EUR) : l'estimateur se stabilise à partir de N=10⁴ échantillons avec un intervalle de confiance 95% resserré.
- **Poids** : 43.0 KB (natif)
- **Contenu réel vérifié (2026-07-14, c.486)** : **1 graphique linéaire** : axe x log « Nombre d'échantillons N » (10² à 10⁵), axe y « EVPI estimé (milliers EUR) » (60-120), courbe bleue « EVPI estimé (MC) » avec marqueurs circulaires, zone bleue transparente « IC 95% » (large à N=10² : ~63-117, se resserre à N=10⁵ : ~88-92), ligne horizontale rouge pointillée « EVPI analytique = 90k ».
- **Verdict** : VRAI — alt-text v1 dit l'essentiel. Précision ajoutée : **N=10⁴ est le seuil pratique de convergence** (au-delà l'IC 95% se resserre autour de 90k avec une marge < 5k). En deçà, l'estimateur fluctue largement (N=100 : EVPI=90 mais IC ~27k de large).

## dt6-expert-graph.png

- **Source** : notebook `DecPyMC-6-Expert-Systems.ipynb` (cellule 40, output 0 — display_data `image/png`)
- **Description visuelle** : **Diagramme nœuds-flèches matplotlib** (1184×784, fond blanc) illustrant l'architecture d'inférence bayésienne multi-sources. **Titre gras** centré « Architecture du Système Expert Bayésien Multi-Sources ». **Flux vertical** : en haut, **« Prior Uniforme P(panne) = [0.25, 0.25, 0.25, 0.25] »** dans un rectangle vert pastel → flèche verte vers le bas → **« Panne (latent) »** dans une ellipse bleue centrale. **3 nœuds likelihoods** alignés horizontalement sous l'ellipse centrale : **« Source 1: Logs »** rectangle rouge pastel (Scores = [0.10, 0.15, 0.65, 0.10], annotation « Faible: moyenne »), **« Source 2: Utilisateur Dit 'Disque' »** rectangle orange pastel (annotation « Matrice confusion: 75% correct »), **« Source 3: Capteur RAM »** rectangle violet pastel (annotation « Pas d'alerte, Détection 95%, FP 2% »). 3 flèches colorées (rouge, orange, violet) vers l'ellipse centrale. **Annotation Bayes** latérale gauche : « posterior prop. prior × L1 × L2 × L3 ». Flèche orange vers le bas → **« Posterior P(panne | evidence) »** rectangle vert (texte « Disque: 95.8% | CPU: 2.9% | OK: 1.0% | RAM: 0.3% »). Flèche orange finale → **« Décision: Remplacer Disque »** rectangle orange (annotation « EU = -20, meilleur choix »). Stats RGB PIL : moyenne (**245.45**, 244.35, 242.39), std (29.85, 33.77, 38.84) — **mean R/G/B > 240 + std faible ~30-40** tell discriminant typique des **diagrammes académiques** avec rectangles pastel minoritaires (~5-8% de la surface) sur fond blanc dominant (std faible = grandes zones blanches).
- **Alt-text (FR)** : Architecture du Système Expert Bayésien Multi-Sources : 3 sources (Logs, Utilisateur, Capteur RAM) conditionnellement indépendantes, posterior sur 4 états latents (Disque 95.8%, CPU 2.9%, OK 1.0%, RAM 0.3%) et décision « Remplacer Disque » (EU = -20).
- **Poids** : 68.6 KB (natif)
- **Contenu réel vérifié (2026-07-14, c.486)** : **Diagramme nœuds-flèches matplotlib** (titre gras « Architecture du Système Expert Bayésien Multi-Sources ») : « Prior Uniforme P(panne) = [0.25, 0.25, 0.25, 0.25] » rectangle vert en haut → flèche verte vers ellipse bleue centrale « Panne (latent) ». 3 nœuds likelihoods alignés horizontalement : « Source 1: Logs » rouge (Scores = [0.10, 0.15, 0.65, 0.10], Faible: moyenne) ; « Source 2: Utilisateur Dit 'Disque' » orange (Matrice confusion: 75% correct) ; « Source 3: Capteur RAM » violet (Pas d'alerte, Détection 95%, FP 2%). Flèches colorées par source vers ellipse centrale. Flèche orange vers bas : « Posterior P(panne | evidence) » rectangle vert (Disque: 95.8% | CPU: 2.9% | OK: 1.0% | RAM: 0.3%). Annotation Bayes à gauche : « posterior prop. prior × L1 × L2 × L3 ». Flèche orange finale vers « Décision: Remplacer Disque » rectangle orange (EU = -20, « meilleur choix »).
- **Verdict** : VRAI — alt-text v1 dit l'essentiel. Précisions transférables : (a) les 3 likelihoods sont **distinctes en nature** : Logs = scores continus moyennés, Utilisateur = matrice de confusion 75%, RAM = détection/FP. (b) Le posterior écrase Disque à **95.8%** car 2 sources sur 3 (Logs + Utilisateur) pointent vers Disque alors que RAM n'a rien détecté. (c) La décision « Remplacer Disque » découle directement du posterior, EU=-20 = meilleur choix parmi les 4 actions. La chaîne complète prior → likelihoods → posterior → décision est visualisée.

## dt7-thompson.png

- **Source** : notebook `DecPyMC-7-Sequential.ipynb` (cellule 49, output 0 — display_data `image/png`)
- **Description visuelle** : Figure **2 panneaux côte à côte** (1200×423, fond blanc) en downscale max-dim 1200 (natif matplotlib). **Panneau gauche « Regret cumulé des 4 stratégies »** : axe X « Pas de temps » de 0 à 2000, axe Y « Regret cumulé » de -50 à 125. **4 courbes matplotlib** avec marqueurs : **Greedy rouge** (`tab:red` `#d62728`) descendant depuis ~0 vers ~-45 à t=2000 (exploitation forte du Bras 2 optimal, gain de regret négatif), **ε-greedy bleu** (`tab:blue` `#1f77b4`) stagnant autour de ~60, **UCB1 vert** (`tab:green` `#2ca02c`) montant à ~115, **Thompson Sampling violet** (`tab:purple` `#9467bd`) intermédiaire à ~35 (exploration Thompson). Légende interne coin bas-gauche. **Panneau droit « Posteriores Beta après Thompson Sampling »** : axe X « Taux de succès » 0-1, axe Y « Densité » 0-35+. **4 courbes Beta** obtenues par échantillonnage NUTS PyMC : **Bras 0** (vrai=0.3) bleu étalée, **Bras 1** (vrai=0.5) orange modérée, **Bras 2** (vrai=0.7) vert **pic étroit à 0.7** (Thompson l'a correctement identifié), **Bras 3** (vrai=0.4) rouge étalée. **Lignes verticales pointillées colorées** aux vrais means (0.3, 0.5, 0.7, 0.4). Légende interne. Stats RGB PIL : moyenne (246.40, 246.40, 246.60) std (33.36, 33.39, 33.46) — mean ~246 + std ~33 tell discriminant confirmant **scatter/lines épars sur blanc** (typique de courbes fines multicolores, conforme au pattern c.777 ML + c.778 IIT ICT-Series). Le regret cumulé Greedy négatif révèle qu'il exploite tôt et bien le Bras 2 — Thompson équilibre exploration/exploitation.
- **Alt-text (FR)** : Thompson Sampling bayésien sur 4 bandits (vrais means 0.3/0.5/0.7/0.4) : regret cumulé comparé à Greedy, ε-greedy et UCB1, et posterior Beta final pour chaque bras après 2000 pas.
- **Poids** : 142.8 KB (downscale max-dim 1200)
- **Contenu réel vérifié (2026-07-14, c.486)** : **2 panneaux côte à côte** : gauche « Regret cumulé des 4 stratégies » (axe x 0-2000 « Pas de temps », axe y -50 à 125 « Regret cumulé ») — 4 courbes : Greedy rouge descendant vers ~-45 à t=2000, ε-greedy (e=0.1) bleu ~60, UCB1 vert ~115, Thompson Sampling violet ~35 ; droite « Posteriores Beta après Thompson Sampling » (axe x 0-1 « Taux de succès », axe y 0-35+ « Densité ») — 4 courbes Beta : Bras 0 (vrai=0.3) bleu étalée, Bras 1 (vrai=0.5) orange modérée, Bras 2 (vrai=0.7) vert **pic étroit à 0.7**, Bras 3 (vrai=0.4) rouge étalée ; lignes verticales pointillées colorées aux vrais means.
- **Verdict** : VRAI — alt-text v1 dit l'essentiel. Note transférable : Thompson (violet ~35) **gagne** sur UCB1 (~115) et ε-greedy (~60) mais est **dépassé par Greedy** qui descend vers -45. Le pattern classique : Greedy exploite fort le Bras 2 (vrai 0.7) dès identification, ce qui maximise le regret cumulé négatif (= gain). Thompson explore plus, donc son regret cumulé reste positif mais borne. Trade-off exploitation/exploration visible. Le Bras 2 a posteriori Beta extrêmement étroite (pic à 0.7) montre que Thompson l'a **correctement identifié** malgré l'exploration.
