Skip to content

feat(gametheory,#17531): GT-15f valeur de Shapley de groupe — le meilleur binôme n'est pas celui des deux meilleurs individus - #17536

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/17531-shapley-group-value
Sep 23, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/17531-shapley-group-value

Conversation

@jsboige

@jsboige jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2025:CoursIA — prev: MED/notebook-dotnet #17513

Résumé

Nouveau notebook GT-15f « Valeur de Shapley de groupe », qui distille Flores, Molina et Tejada (2019), Evaluating groups with the generalized Shapley value, 4OR 17(2):141-172, doi:10.1007/s10288-018-0380-8. Il s'accompagne d'un module réutilisable cooperative_games/group_value.py et de 26 tests.

La question du notebook : le meilleur binôme n'est pas formé des deux meilleurs individus. La valeur de Shapley de groupe évalue une équipe comme une unité, par le jeu fusionné de Lehrer. La valeur additive (somme des φ) se trompe sur ce classement, et le notebook mesure cet écart sur trois réseaux.

See #17531 · See #14468

Contenu (44 cellules, 17 code, 4 exercices)

Section Ce qui est mesuré
1. Jeu fusionné Exemple 1 de l'article reproduit exactement : la valeur du proxy {4, 5} vaut 187/280, égale à la formule directe. Axiome G-SPB sur u_N (n=6) : φg = 1/(n−c+1) contre c/n pour la valeur additive
2. Meilleur binôme 360φ = (−8,−8,−8,139,130,139,−8,−8,−8). Les binômes {4,5} et {5,6} valent 187/280 ; {4,6}, formé des deux meilleurs individus, ne vaut que 1/2 et arrive 3ᵉ. Le théorème 2 est décomposé en arithmétique exacte : 139/360 + 1/8 − 1/90 = 1/2 et 139/360 + 1/56 + 19/72 = 187/280
3. Complémentarité ψ et rentabilité ψ est négatif pour 22 des 28 paires non adjacentes. Rentabilité φg − Σφ : 6 des 8 paires adjacentes sont rentables, aucune des 28 paires non adjacentes ; le meilleur binôme {4,5} ne l'est pas (−0,0794)
4. Réseau florentin (Padgett) Calcul exact sur 2^15 = 32 768 coalitions en 0,11 s. Meilleur binôme Albizzi+Medici 0,5161, alors que le binôme des deux meilleurs individus (Guadagni+Medici) n'est que 7ᵉ sur 105. Pour k=3 et k=4, le glouton retrouve l'optimum exact
5. Monte Carlo (club de karaté, 34 joueurs) Estimateur de Castro et al. (2009), calibré : erreur-type ≈ 0,031 → 0,0155 → 0,0077 quand l'échantillon quadruple, couverture 231/240. Le meilleur binôme est {0,33} ; les rangs trop proches sont signalés comme indiscernables du bruit. Troisième membre : 31 → 0,910, 32 seulement au 25ᵉ rang, avec un écart de 19,1 erreurs-types

Les 4 exercices portent des stubs conformes à C.1 (None + print) et le notebook s'exécute de bout en bout.

Module et tests

  • cooperative_games/group_value.py fournit merging_game, shapley_group_value (en Fraction exact ou en flottant), additive_group_value, shapley_group_value_monte_carlo (qui renvoie la moyenne et l'erreur-type), connectivity_game et GroupValueTable. Cette dernière tabule par masque de bits jusqu'à 22 joueurs et expose restricted_shapley, ψ, best_groups et greedy_group.
  • tests/test_group_value.py : 26 tests. Ils vérifient les résultats publiés (Exemple 1 : 360φ, 1/2, 187/280, décomposition du théorème 2), les axiomes du théorème 1 (G-null, G-linéarité, G-CBC, G-SPB) et la remarque 2. Ils contrôlent aussi le théorème 2 et la proposition 1 sur des jeux aléatoires, la cohérence entre la formule directe, la table et shapley.py, et le Monte Carlo sans biais et reproductible.
  • Suite GameTheory complète : 626 passed (python -m pytest tests/ -q, 68,7 s).

Verdict SOTA

SOTA-OK. Les graphes viennent de networkx (réseau florentin et club de karaté intégrés), le calcul exact de numpy et fractions. Aucun substitut : la valeur de groupe est calculée exactement tant que c'est faisable (2^15 coalitions), puis estimée par Monte Carlo avec une erreur-type mesurée.

Preuves d'exécution

  • Exécution : python -m papermill GameTheory-15f-Shapley-Groupes.ipynb GameTheory-15f-Shapley-Groupes.ipynb -k python3 --cwd ., depuis MyIA.AI.Notebooks/GameTheory ; les chemins de métadonnées sont réduits au basename.
  • validate_pr_notebooks.py origin/main : 1/1 PASS, 17 cellules code, execution_count 1 à 17, 0 erreur.
  • check_output_failure_text.py origin/main : 0 régression. check_output_collapse.py et check_source_collapse.py : 0 signalement.
  • detect_consecutive_code_cells.py : aucune suite de cellules code. pedagogy_density.py : au-dessus du plancher. check_interp_positioning.py : 0 cellule d'interprétation mal placée.
  • Les quatre figures ont été contrôlées visuellement après extraction des PNG. Sur le club de karaté, la mise en page spring_layout(seed=31) a été choisie pour séparer les nœuds 32 et 33.

README GameTheory (audit du fichier entier sur les points touchés)

  • Quatre lignes 15f ajoutées : table des notebooks, résumé des concepts, table de statut, arbre.
  • Durée totale re-mesurée sur les tableaux : 105 lignes, 5135 min = 85,6 h avant l'ajout, 86,4 h avec 15f. L'annonce passe de « ~84h », déjà périmée, à « ~86h ».
  • Arbre cooperative_games/ : group_value.py ajouté ; le bloc est désormais complet par rapport au disque.
  • Arbre tests/ réaligné sur le disque : l'ancienne liste nommait 11 des 22 fichiers test_*.py, elle les nomme maintenant tous.
  • CATALOG-STATUS est resté byte-identique à main.

Défaut repéré hors périmètre (non corrigé ici)

cooperative_games/__init__.py déclare off_switch_margin_analysis et off_switch_margin_report dans __all__ sans jamais les importer : from cooperative_games import * lève AttributeError. Le défaut remonte à #7941. Il est suivi dans l'issue #17535, pour ne pas mélanger les sujets.

Contenu sensible

L'article applique aussi la valeur de groupe à un réseau terroriste. Ce notebook ne reproduit pas cette application : il s'appuie sur deux réseaux publics classiques (familles florentines, club de karaté de Zachary) et se contente de citer Lindelauf et al. (2013) en référence.

🤖 Generated with Claude Code

…olina-Tejada 2019)

New notebook GameTheory-15f-Shapley-Groupes (44 cells, 17 code, executed,
4 exercises) and module cooperative_games/group_value.py:

- merging game, direct group value (exact Fraction), additive value,
  Monte Carlo estimator with standard error (Castro et al. 2009),
  connectivity game (Amer-Gimenez), GroupValueTable (bitmask, <= 22 players)
  with restricted Shapley, complementarity psi, best_groups, greedy_group.
- 26 tests asserting the paper's Example 1 exactly (360 phi, 1/2, 187/280,
  Theorem 2 decomposition), Theorem 1 axioms, Theorem 2 and Proposition 1
  on random games; full GameTheory suite 626 passed.
- README: 4 rows for 15f, duration total re-measured (~86h), module and
  test trees re-aligned on disk (the tests list named 11 of 22 files).

See #17531

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the paragraph-length Paragraph > 2000 chars (wall-of-text, #15405). Resorb before merge. label Sep 23, 2026
@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

✅ No prose/output mismatch detected in the notebooks this PR changed.

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 github-actions Bot added the markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. label Sep 23, 2026
@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 5.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 8.9s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 7.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.6s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.9s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 47.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.6s

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: 17
  • 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 github-actions Bot added the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Sep 23, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

@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] po-2026 — review DEEP @Head e630f0e9 (extraction complète + vue structurelle, pas diff-only).

Exécution réelle (preuve-vive) : suite de tests rejouée first-hand dans un venv neuf avec les fichiers du head — 26/26 passed en 13 s (Exemple 1 exact en Fraction : 360φ=(−8,−8,−8,139,130,139,…), φg{4,5}=187/280, décomposition théorème 2 : 1/8, −1/90, 1/56, 19/72, axiomes G-SPB/G-null/G-linéarité/G-CBC, Monte Carlo sans biais et reproductible).

Notebook (44 cellules, exec 1→17, 0 null) :

  • Gates #17040 : aucune prose empilée, chaque « Lecture du résultat » suit sa cellule ; toutes les valeurs citées vérifiées présentes dans les outputs committés (187/280, 0.5161, 0.4102, 0.5881/0.6002, Spearman 0.986, 31→0.910±0.006, écart 19.1 erreurs-types, rang 25/32 du sommet 32…).
  • Recalculs indépendants au head : psis des 6 paires de feuilles sœurs = 0.022222 exact (les « six exceptions positives » non adjacentes confirmées une à une) ; couverture Monte Carlo sommée = 231/240 ✓ ; somme des durées README 5080→5130 min = +50 = la ligne 15f ✓ (~86h cohérent).
  • 4 exercices = stubs C.1 (None + print « à compléter »), zéro solution-leak.
  • Module group_value.py relu intégralement : formule directe 2^(n−|C|), jeu fusionné de Lehrer (mandataire indice m−1, mapping −1), GroupValueTable masques de bits plafonné n≤22 avec garde ValueError, estimateur Castro sans biais (t uniforme sur {0..m−1}, T conditionnellement uniforme) — cohérent avec les 26 tests, et __init__.py exporte les 6 symboles annoncés.
  • Sécurité : scan du diff 0 match. ~20 organes verts au head.

Mineurs non bloquants : (1) body + prose citent « 2^15 coalitions en 0,11 s » alors que l'output committé dit « 0.09 s » (drift d'exécution) ; (2) « Spearman ≈ 0.99 » (md) vs 0.986 (output). Rien qui bloque.

Approve sous clusterManager-Myia (non-auteur).

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17536 (feat(gametheory,#17531): GT-15f valeur de Shapley de groupe — le meilleur binôme n'est pas celui des deux meilleurs individus) 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: 17536
head: e630f0e
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: a940fbb5486c602c3f80a084995255e8b23d7dde04f638370d78445c9612e3b0
diff-files: 5
diff-additions: 2354
diff-deletions: 4
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Motif (titulaire, 13:10Z) : tete e630f0e ; PR gate PASS 13:00:59Z (le DWELL de 10:38Z est supersede), lu a la source avec filter=all puis dernier started_at par nom, aucune jambe non verte ; B.0 rc=0 ; review Hermes APPROVED a cette meme tete (12:12Z, extraction complete). Arbre fusionne origin/main + #17536 + #17538 (merge-tree 7d887390b8) : suite GameTheory/tests 620 verts, 2 skipped ; les 6 rouges sont tous dans test_lean_definitions et viennent de mon extraction sans fichiers .lean/.ipynb. Dans cet arbre, les 48 noms de cooperative_games.all sont tous importables. Les hunks de init.py de #17536 et #17538 se composent sans conflit. Index 15f libre dans la serie, arbre tests du README complet. MERGEABLE a l'emission.

@myia-ai-01
myia-ai-01 merged commit b5ee2eb into main Sep 23, 2026
91 of 92 checks passed
jsboige added a commit that referenced this pull request Sep 23, 2026
…ME GameTheory (durée totale) résolu

GT-15f (#17536) et GT-04f modifiaient la même ligne de durée totale.
Somme re-mesurée sur les tableaux après fusion : 107 lignes, 5260 min
= 87,7 h, annonce ~88h (15f seule : 86,4 h ; 04f seule : 86,8 h).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. paragraph-length Paragraph > 2000 chars (wall-of-text, #15405). Resorb before merge. pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants