🎯 Déjà-vu Regime Classifier — k=5 KMeans

Iter 2 of déjà-vu strategy · 2026-05-07 · OOS 130 days (2026-02 → 2026-04)
Reuses 49-feature fingerprint, switches selection from cosine top-K to discrete cluster membership · advisory only · raw PnL no slippage

Headline: regime classifier beats analog matcher

moo_to_close aggregate Sharpe
+2.12
vs analog matcher -0.33 (was FAIL)
Sign-flip p-value
0.022
passes Apr 26 gate (< 0.05)
Selectivity ratio
401 signals vs 1991 in analog matcher

5 регимов — таксономия и интерпретация

R0 · n=73
Yields-up rally
dgs2+0.9 nfci+0.9 dgs10+0.8 arkk_5d+0.8 qqq_5d+0.8 spy_5d+0.8
Risk-on, ставки растут, growth тянет
R1 · n=21
Panic risk-off
vxx+2.2 vix+1.9 spy-1.8 xly-1.7 qqq-1.7 xlf-1.7 xlk-1.6
VIX spike, всё красное
R2 · n=89
Growth→energy rotation
arkk_1d-0.6 xle_minus_spy+0.5 arkk_minus_qqq-0.5 qqq-0.5 xly-0.5 xlk-0.5
Tech-fade при сильном XLE
R3 · n=1
Extreme melt-up
spy+8.8 qqq+8.4 xlk+7.9 xlc+7.7 (single outlier)
Один экстремальный день — бытовой outlier
R4 · n=97
Rates-easing
dgs2-0.8 nfci-0.7 dgs10-0.7 t10y2y+0.6 hyoas-0.6 vix-0.5 gld_5d+0.4
Ставки падают, кривая steepens, gold up

Per-regime OOS performance

RegimeDays fitOOS signals Mean PnLWin-rateVerdict
R0 Yields-up rally73 152+0.575%60% winner
R1 Panic risk-off21 40-0.298%32% model fails (mean-reversion bet, trend extends)
R2 Growth→energy rotation89 71-0.462%36% model fails (same dynamic)
R3 Extreme melt-up1 108+0.194%56% singleton, OK
R4 Rates-easing97 30+0.556%70% winner

Post-hoc filters (NOT for deploy — data-snooped)

FilterWindowN Sharpep-valueMeanWR
All clusters (honest)moo_to_close 223+2.120.022 +0.28%
Drop R2moo_to_close 176+3.710.0005
Drop R1+R2moo_to_close 156+4.270.0005 +0.61%62.8%
Only R0+R4moo_to_close 98+5.210.001 +0.85%63.3%
Drop R1+R2moo_to_1100 134+2.470.036 +0.23%56%

⚠ Эти фильтры идентифицированы пост-факт на OOS-выборке (HARKing). Sh 5.21 нельзя claim'ить как edge — требуется forward validation на отдельные 60 дней до deploy.

Сравнение: Analog matcher vs Regime classifier

Метрика Analog matcher (May 06) Regime classifier (May 07)
moo_to_1100 aggregate Sh 0.48 +1.17
moo_to_close aggregate Sh -0.33 ❌ +2.12 ✅
moo_to_close aggregate p 0.76 0.022
moo_to_close STRONG-tier Sh (p) 2.96 (0.023) -2.02 (small N=32)
moo_to_close best tier STRONG (Sh 2.96) WEAK (Sh 4.30 p=0.002)
Total signals 1991 401 (5× selectivity)
Interpretability low high (named regimes)

Caveats

Next steps

  1. Extend OOS to 6mo — нужен backfill futures_premarket_12m.parquet или drop futures features (drop ~7 фич, остаётся 42).
  2. Forward-validate R1+R2 block — paper-trade with cluster filter 60 days, проверить asymmetry persistence.
  3. Sensitivity sweep — k ∈ {4,5,6,7}, fit_pool ∈ {90,120,180}; убедиться Sh ≥ 2 не зависит от seed/k.
  4. Add regime tab to broker UI — показать today's cluster + regime label + per-regime signal table рядом с analog matcher.
  5. Если PASS на 6mo OOS: deploy паралельно с analog matcher — два сигнала ансамблем.

Generated 2026-05-07 · advisory only · raw PnL no slippage · 42/42 unit tests pass · NO production deploy