Skip to content

feat(ml-training,#14942): PatchTST vs iTransformer — head-to-head sur log-RV BTC - #14948

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/h2h-patchtst-itransformer
Sep 6, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/h2h-patchtst-itransformer

Conversation

@jsboige

@jsboige jsboige commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Grain: MED/training — lane myia-po-2026:CoursIA-2 — prev: MED/notebook-dotnet #14933

Closes #14942 (voir See #1454, See #14081, See #14860)

Livrable

Harnais tête-à-tête PatchTST vs iTransformer sur le log-RV BTC journalier,
contre le contexte HAR débiaisé. C'est la jambe que #14081 (PatchTST, MERGED)
et #14860 (iTransformer, PR #14924) laissent toutes deux ouverte : chacune
mesure un modèle contre HAR, aucune ne mesure les deux architectures l'une
contre l'autre sur support aligné.

Pourquoi un nouveau harnais

Les deux wrappers existants (btc_patchtst.py sur main, btc_itransformer.py
sur la branche OPEN #14924) sont structurellement identiques — seuls la classe
de modèle et le pas d'entraînement par fold diffèrent. Le harnais les dé-duplique :
un seul walk_forward_logrv(...) générique, paramétré par un build_model,
fait courir les deux architectures sur le même protocole. Toute différence
mesurée est donc architecturale, pas de plomberie.

Acceptance #14942

# Point État
1 Harnais btc_patchtst_itransformer_head2head.py réutilisant les modules existants FAIT
2 --dry-run sur log-RV synthétique (CPU, 1 seed, 1 horizon, modèle minuscule) FAIT
3 Sweep réel : 4 seeds × 3 horizons × 5 folds × 2 modèles, payload JSON FAIT
4 Tests (pytest, non-GPU) couvrant la logique de tête-à-tête FAIT (18 passed)
5 PR dédiée, genre MED/training, tag Grain: conforme FAIT

Protocole (identique aux deux jambes)

Walk-forward expansif 5 folds (har_model._make_split_indices) ;
normalisation sur la fold d'entraînement seule, validation = queue des
séquences d'entraînement seule, état best-validation restauré avant inférence
test. La fold de test n'entre jamais dans le fitting, la normalisation ni la
sélection. Cible = log-RV futur moyen sur h jours ; h ∈ {1, 5, 10} ;
seeds ∈ {0, 1, 7, 42}.

Tête-à-tête : inner-join des prédictions PatchTST et iTransformer par
timestamp (garde de cohérence de cible), puis DM sur erreurs centrées
(loss_fn="mse", différentiel de variance) et MSE = biais² + variance pour
chaque modèle, var_ratio, edge.

Verdict agrégé — 0 BEATS / 0 NO BEATS / 3 INCONCLUSIVE

Deux architectures ne se départagent statistiquement sur le log-RV BTC
journalier (2278 jours RV, BTC-USD Bitstamp) : aucune n'atteint la conjonction
pr-review section C (edge ≥ 2σ cross-seed ET dm_p_median < 0.05).

Per-horizon (4 seeds chacun, 5-fold walk-forward) :

h mean_edge edge_std 2σ seuil DM p (med) n_PatchTST n_iTransf n_INC verdict
1 +2.99% 0.97 ±1.93 0.333 0 0 4 INCONCLUSIVE
5 +6.61% 3.37 ±6.74 0.131 1 0 3 INCONCLUSIVE
10 +5.71% 5.69 ±11.39 0.140 2 0 2 INCONCLUSIVE

Interprétation honnête : à h=1 l'edge dépasse 2σ (+2.99% vs ±1.93) mais le
DM p reste 0.333 — l'avantage PatchTST est mince et non significatif. À h=5/h=10
l'edge est positif mais sous 2σ et le DM p (0.13 / 0.14) ne passe pas le seuil.
Le var_ratio PatchTST/iTransformer < 1 partout confirme une variance légèrement
plus faible
de PatchTST, mais l'effet n'est ni robuste ni significatif. Verdict
honnête : inconclusif, pas de domination claire d'une architecture sur l'autre.

Contexte : les deux modèles restent au-dessus du HAR débiaisé (PatchTST
MSE vs HAR débiaisé : h=1 0.897 vs 0.844 · h=5 0.502 vs 0.418 · h=10 0.457 vs
0.389) — reproduit le finding de #14860 : les deux architectures profondes
échouent contre un HAR simple une fois le biais retiré, et ne diffèrent pas
significativement l'une de l'autre.

Rapport de biais par modèle (jamais corrigé sur le test)

h biais PatchTST (mean e) biais iTransformer (mean e)
1 −0.0221 +0.0145
5 +0.0244 −0.0109
10 +0.0468 −0.0086

Le biais des deux modèles est petit et d'amplitude comparable (|bias| ≲ 0.05
en log-RV) face à des MSE de l'ordre de 0.5-0.9 : l'edge de PatchTST n'est pas
porté par un biais favorable — il vient d'une variance légèrement plus faible
(var_ratio < 1), et c'est exactement la jambe de précision que le contrôle
conjonctif exige.

Tests

tests/test_btc_head2head.py — 18 tests, CPU pur :

  • TestModelBuilders : les deux builders produisent [B, pred_len] pour n_vars=1.
  • TestEvaluateComboDecomposition : MSE = biais² + variance (identité), edge/var_ratio signés.
  • TestAlignTwoModels : inner-join par timestamp + garde target mismatch → ValueError.
  • TestExpandingSplits / TestTrainOnlyNormalization : géométrie, normalisation train-only.
  • TestWalkForwardLogrv : bornes de fold, compte de prédictions, sonde de fuite
    (muter la région de test ne bouge pas les stats de la fold 0).
  • TestAggregateVerdicts : BEATS / NO BEATS (dominance) / INCONCLUSIVE / groupée par horizon.
  • TestDryRunEndToEnd : run_pipeline sur log-RV synthétique écrit un JSON valide.
18 passed in 11.54s

Notes

Le payload JSON (résultats du sweep réel) est gitignoré (**/scripts/results/) :
les chiffres du verdict vivent dans ce body, pas dans un fichier commité. Le
fichier est au chemin
MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/results/btc_head2head_patchtst_itransformer.json.

…ss + tests

Single generic walk_forward_logrv parameterized by build_model runs both
architectures on the identical protocol (5-fold expanding walk-forward,
train-only normalization, train-tail validation, best-val restore, MSE=bias^2+var,
DM on centered errors). Reuses PatchTSTModel/iTransformerModel from main; does
NOT add btc_itransformer.py (avoids collision with #14924).

18 pytest tests (CPU) cover model builders, decomposition identity, two-model
alignment guard, walk-forward no-leakage probe, aggregation verdicts, dry-run.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

training(#1454): head-to-head PatchTST vs iTransformer sur log-RV BTC debiaise -- la jambe que #14081 et #14860 laissent ouverte

2 participants