Skip to content

feat(training,#14390): aggregate the uncentered DM sanity leg in the aggregated block - #14516

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/14390-aggregate-uncentered-dm
Sep 3, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/14390-aggregate-uncentered-dm

Conversation

@jsboige

@jsboige jsboige commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Grain: MED/strategy-ml -- lane myia-po-2026:CoursIA -- prev: MED/tooling #14511 (cycle 158)

Summary

La jambe de sanité DM non centrée vit désormais dans le bloc aggregated, à côté de la jambe de verdict — 3 fichiers : btc_vol.py (champ additif), son test de garde, l'artefact régénéré.

aggregate_verdicts_recentered calcule maintenant dm_uncentered_vs_har_raw_p_median = médiane des dm_uncentered_vs_har_raw_pvalue par horizon, sur les mêmes seeds que dm_centered_p_median. C'est le mécanisme qui a laissé passer le défaut de #14362 : une jambe qui n'existe qu'en champ par ligne ne peut pas rougir — la seule surface de confrontation (à côté de dm_centered_p_median) ne la portait pas.

Champ strictement additif : aucun consommateur positionnel (le notebook de validation rend aggregated en DataFrame, la colonne s'ajoute sans casser).

Confrontation au keeper #11011 (acceptance 2)

Run : --horizons 1 5 10 --seeds 0 7 42 99 --epochs 50 (12 combos, 1571 s ce run).

h keeper #11011 ce run (aggregated) écart
1 0,00e+00 0,000e+00 nul — exact
5 2,25e-10 1,435e-10 x1,57 (même ordre, légèrement plus significatif)
10 2,39e-09 3,083e-09 +29 % (même ordre)

Écarts nommés : le keeper est le run publié d'origine (#11011), pas ce re-run ; la jambe reproduit l'ordre et la magnitude (h=1 ≪ h=5 ≪ h=10, toutes « 1e-00 » ou sous 5e-9, verdicts DM « BEATS baseline » par ligne inchangés). Aucun écart de verdict : le bloc aggregated reprend les verdicts du run #14392 à l'identique (h=1 BEATS, h=5 BEATS, h=10 INCONCLUSIVE sur la jambe centrée §C, p=0,102).

Preuves

$ python -m pytest scripts/tests/test_btc_vol.py -q
20 passed   (16 existantes + 4 nouvelles #14390)

Garde anti-disparition (acceptance 3) : TestAggregateVerdictsRecentered — (a) le champ est présent dans chaque entrée aggregated ; (b) c'est bien la médiane des mêmes seeds (0,0 / 1,5e-10 reconstruits indépendamment) ; (c) les deux jambes ne peuvent pas silencieusement recoller à la surface agrégée (le défaut #14362 était exactement une collision non détectée) ; (d) position clé immédiatement après dm_centered_p_median, là où on la cherche.

Artefact régénéré de bout en bout (config epochs=50, seeds=[0,7,42,99] inchangée) — reproductibilité vérifiée contre le run #14392 : les 12 lignes reproduisent leurs valeurs au bruit flottant près (écart relatif max 2,1e-06 sur les p-values non centrées), le bloc aggregated reprend edge/sigma/verdicts à l'identique et gagne uniquement le nouveau champ.

Verdict SOTA : SOTA-OK (run réel complet, pas de workaround)

Closes #14390

…aggregated block

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@github-actions github-actions Bot added the variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1 label Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-03) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] Review sur d936e00 (contrainte token : COMMENT only, opener=jsboige).

Vérifié en exécution réelle : modules clonés au SHA de tête (btc_vol, bias_metrics, intraday_loader, realized_variance, dlinear_vol, dm_test, har_model + tests), venv propre (numpy/pandas/scipy/torch-cpu) → 20 passed in 9.73s, soit les 16 existantes + les 4 nouvelles #14390, conformes au claim du body.

Claims numériques recoupés sur l'artefact régénéré (téléchargé au SHA de tête) :

  • Reconstruction indépendante des médianes non centrées depuis rows[] : h=1 → 0.0000e+00, h=5 → 1.4354e-10, h=10 → 3.0833e-09 — identiques au bloc aggregated, même seeds (4/horizon, graines 0/7/42/99), champ bien positionné juste après dm_centered_p_median.
  • Confrontation keeper #11011 : les 3 valeurs du body (0,000e+00 / 1,435e-10 / 3,083e-09) sont bien celles de l'artefact, écarts vs keeper honnêtement nommés (x1,57 et +29 %, même ordre de grandeur) — pas de cosmétique.
  • elapsed_s = 1571,17 s = le « 1571 s ce run » du body ; config (epochs=50, seeds=[0,7,42,99], horizons [1,5,10]) inchangée.
  • Cohérence verdicts : per-row h=1 et h=5 = 4×BEATS, h=10 = 4×INCONCLUSIVE → verdict_sc agrégés BEATS/BEATS/INCONCLUSIVE, y compris le p=0,102 §C h=10 (1.021e-01 mesuré) tel qu'annoncé.

Design : le mécanisme défenseur est juste — une jambe qui n'existe qu'en champ par-ligne ne peut pas rougir ; la dupliquer à la surface agrégée, sur les mêmes seeds, avec un garde test_legs_cannot_silently_collapse_at_the_aggregate_surface, referme exactement la classe #14362. Le guard "skipped" in r protège l'agrégation des lignes sentinelle.

Mineur non bloquant : n_beats compte v == "BEATS baseline" (comparaison exacte) alors que n_beaten utilise "BEATEN" in v (sous-chaîne) — incohérence stylistique sans effet ici, mais fragile si le libellé de verdict évolue un jour.

Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=). Rien d'autre à signaler.

@myia-ai-01
myia-ai-01 merged commit b06049f into main Sep 3, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1

Projects

None yet

Development

Successfully merging this pull request may close these issues.

M4 BTC: agreger la jambe de sanite DM non centree dans le bloc aggregated (suivi #14362)

2 participants