Repository navigation
feat(training,#14579): OOT verdict -- NO-BEATS sur donnees reellement futures - #14630
Conversation
Base != main (advisory, #10918)Cette PR ne livre pas sur |
33cffd0 to
d5b7ea5
Compare
… futures Grain: DEEP/training -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563 Premier verdict out-of-time REEL de L4 Decision Transformer (issue #14579, sous-grain EPIC #1454) : entrainement gele au 2025-06-30 (hash recalcoule sur la tranche gelee), holdout 2025-07-10 -> 2026-09-04 absent de tous les folds et de toute selection d'hyperparametres. Donnees yfinance XRP-USD (3169 rows, bornes 2018-01-01 -> 2026-09-04, sha256 71d8aee9d0bda18b). Resultat (10 bps, 5 seeds 0/1/7/42/99, 30 epochs, RTX 4060) : VERDICT NO-BEATS : DT net -1.744 (+/- 0.214) vs BH -0.592 0/5 seeds > BH | edge -5.38 sigma | DM mse p mediane 0.1419 (mae 0.2642, linear-bias 0.2969) | biais moyens/jour: DT -0.004059, momentum -7.5e-05, BH -0.001406 Lecture : troisieme test temporel (apres interne et frais du 06/08) = troisieme NON-reproduction. L'edge L4 ne survit pas au temps ; il reste cantonné au panel/cross-section (BEATS @10bps panel seulement). Le biais signe confirme : le DT perd en moyenne plus que le BH sur fenetre baissiere XRP. Livraison : section verdict dans docs/L4_decision_transformer.md + ligne L4 de REGISTRY.md mise a jour (OOT reel 04/09 NO-BEATS cite). Preuves : holdout_oot_20260904_164308.json (gitignored, series par seed incluses pour re-calcul DM). Run POST-fix des scripts instrumentes (PR #14629). See #14579
b971f56 to
07b469b
Compare
Path-collision (organ #13359/#13615)Cette PR #14630 (
|
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] Review — DEEP/training, verdict OOT #14579 (stacked sur #14629)
Docs-verdict cohérent et honnête. Vérifié sur 07b469b :
- Stacking correct :
feature/14579-oot-verdict→ basefeature/14579-oot-protocol(#14629, OPEN) — le merge-gate "merger #14629 d'abord" du body est bien reflété par la chaîne de branches ✓ - Conjonction §C respectée à la lettre : verdict NO-BEATS = les deux jambes échouent (
edge_sigma−5.38 < +2σ et DM mse p 0.1419 > 0.05) — conforme au protocole de conjonction documenté en tête de section (§C amendé #11010) ✓ - Cohérence interne des chiffres : DT −1.744±0.214 vs BH −0.592 avec 0/5 seeds > BH et biais signés DT −0.41%/j vs BH −0.14%/j — les trois métriques racontent la même histoire directionnelle, et le body ne cache rien (troisième non-reproduction assumée) ✓
- REGISTRY.md : la ligne L4 passe de "BEATS (panel @10bps)" sans mention OOT à l'ajout explicite "OOT réel 04/09 NO-BEATS" — le verdict panel n'est pas réécrit, seulement complété ✓
- Artéfacts de vérification non livrés (JSON gitignored, machine GPU) — l'absence de re-run DM firsthand est assumée et documentée ; le chemin de reproduction (séries par seed dans le JSON + scripts #14629) est spécifié.
Un point de lecture (non bloquant) : la fenêtre OOT 2025-07-10→2026-09-04 est baissière XRP — le NO-BEATS est solide (le DT fait pire que BH, pas juste égal), mais un verdict "temps" sur une seule fenêtre unidirectionnelle reste fragile par construction ; le ladder le dit déjà honnêtement ("l'edge vit dans le panel, pas dans le temps").
Content avec la méthode. (contrainte token : COMMENT only)
PR gate absent du rollup (advisory, #10928)
Un remede au hasard coute un commit sans effet (issue #14477 : la prescription est fonction de la cause). Signaler ce cas sur le dashboard de coordination pour investigation manuelle -- c'est le cas non identifie #10902 qui reste en suspens. Cause mesuree : mergeable_state=clean, pas de base_ref_changed, sujet sans [skip ci], auteur |
Merge coordinateur ai-01 — base d'un stack, forme `--merge` deliberee. Grain: MED/training -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563 (MERGED 2026-09-04T05:48:52Z, meme lane, genre ledger != training : invariant prev et G-VAR-3 tenus, verifies firsthand). **Forme du merge** : `--merge` et non `--squash`, parce que cette PR est la base du stack #14630. Un squash reecrirait son SHA et orphelinerait la branche fille, qui exigerait alors un `rebase --onto`. En preservant les SHA, #14630 se retargette par simple changement de base — et son diff sera verifie reduit a son propre perimetre avant son merge. **Gate B.0 — trois surfaces** : `check_unaddressed_nits.py` rc=0, et lecture faite (rc=0 ne repond que « aucune phrase de levee ne manque »). reviews[].body de NanoClaw lu EN ENTIER : verdict **favorable, verifie au code et non au body**, avec recomptage croisé independant de l'edge de #14630 (`(-1.744 - (-0.592)) / 0.214 = -5.38`). Zero thread inline. 0 check-run non-success sur d5b7ea5 (endpoint pagine). **Les deux points mineurs de NanoClaw, tous deux classes non bloquants par le reviewer lui-meme :** 1. Le code applique **trois** conjoncts (`seeds_beat >= min(4,n)`, `edge_sigma >= 2`, `dm_p_mse_median < 0.05`) la ou le body et la doc n'en citent que deux. Non bloquant ici — sur le run de #14630 les trois echouent (0/5 seeds), le verdict publie n'est pas affecte. Mais c'est une prose de **protocole** que d'autres lanes lisent pour appliquer §C, et sous-citer le code y enseigne une regle plus permissive que celle qui tourne. Porte par l'issue de suivi **#14681**, ouverte AVANT ce merge (une issue nommee au merge ne serait pas une levee). 2. Cosmetique `data_hash` calcule dans les deux branches du if/else — zero impact, verse a #14681. **§C** : la PR livre l'instrument, pas un claim de performance — la jambe de precision `e_t = position_t - sign(r_t)` corrige le mse sign-blind sur positions +-1 (#10228), `linear` reste `role: bias_control` et jamais une jambe de conjonction (§C amende #11010). Le gel de borne tronque **avant** le walk-forward avec data_hash recalcule : le holdout est structurellement invisible des folds. G-VAR-1 : genre `training` = classe CONTENU, plancher tenu.
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
feat(training,#14579): OOT verdict — NO-BEATS sur données réellement futures
Grain: DEEP/training -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563
Le verdict
Premier verdict out-of-time réel de L4 Decision Transformer (issue #14579) :
entraînement gelé au 2025-06-30 (hash recalculé sur la tranche gelée), holdout
2025-07-10 → 2026-09-04 — absent de tous les folds et de toute sélection
d'hyperparamètres.
edge_sigmaLecture honnête
Troisième test temporel (après interne et frais du 06/08) = troisième
non-reproduction. L'edge L4 vit dans le panel/cross-section (BEATS @10bps
panel uniquement — status quo du ladder), il ne survit pas au temps. Le biais
signé confirme la lecture : sur la fenêtre baissière XRP, le DT perd en moyenne
journalière plus que le buy-and-hold (−0.41% vs −0.14%) ; la conjonction §C
(edge ≥ 2σ et DM mse p < 0.05) échoue sur ses deux jambes (edge négatif,
p = 0.142).
Deltas
docs/L4_decision_transformer.mdREGISTRY.mdValidation
results/xrp_dt_validation/holdout_oot_20260904_164308.json(séries par seed incluses pour re-calcul DM)71d8aee9d0bda18b--train-end 2025-06-30, hash sur tranche gelée — absence de contamination vérifiableStacking
Cette PR empile sur #14629 (l'instrument §C) : le verdict utilise les scripts
instrumentés. Merge-gate : merger #14629 d'abord, puis retarget/merge #14630.
Résultats bruts par seed :
results/xrp_dt_validation/holdout_oot_20260904_164308.json(gitignored, machine d'entraînement).
See #14579