Lab · ML Experiments

ML — Pattern Discovery

Inverted workflow: find conditional edges in BTC data first, build strategies second.
61 experiments

ETF-Flow Residual Check (20d) — Genuine Lead or Slow Momentum?

Inconclusive
2026-06-23 etfauditmomentumresidualoverlappositioning
Hypothesis
The scout lead etf_flow_5d → fwd_20d (IC +0.096, 3/3 years) is the only positioning claim not yet residualized. If, after orthogonalization against trailing price momentum (5d+20d) AND on non-overlapping 20d blocks, an IC >= 0.08 with CI_low > 0 remains, it is a genuine orthogonal slow lead; otherwise it is slow momentum / overlap-inflated.
Verdict
**PARTIAL / TOO THIN** — residualized, IC +0.126 (CI_low +0.045) pooled remains, BUT non-overlapping only +0.171 (CI [-0.231,+0.564], n=30). Effective sample too small for a deploy verdict; bear regime still missing.
yearly_resid_ic
{'2024': 0.137, '2025': 0.071, '2026': 0.251}
CI_residual_pooled
[+0.0452, +0.2121]
IC_flow_nonoverlap
+0.1382
IC_residual_pooled
+0.1263
IC_flow_5d_to_fwd20
+0.1002
ic_drop_pct_residual
-26.0303
IC_momentum5_baseline
-0.0187
CI_residual_nonoverlap
[-0.2306, +0.5643]
IC_momentum20_baseline
+0.0240
IC_residual_nonoverlap
+0.1706
effective_n_nonoverlap
30
r2_flow_explained_by_momentum
+0.4563

ETF-Flow Residual Check (20d) — Genuine Lead or Slow Momentum?

2026-06-23 · status: inconclusive · 2.2s

Hypothesis: The scout lead etf_flow_5d → fwd_20d (IC +0.096, 3/3 years) is the only positioning claim not yet residualized. If, after orthogonalization against trailing price momentum (5d+20d) AND on non-overlapping 20d blocks, an IC >= 0.08 with CI_low > 0 remains, it is a genuine orthogonal slow lead; otherwise it is slow momentum / overlap-inflated.

Verdict: PARTIAL / TOO THIN — residualized, IC +0.126 (CI_low +0.045) pooled remains, BUT non-overlapping only +0.171 (CI [-0.231,+0.564], n=30). Effective sample too small for a deploy verdict; bear regime still missing.

Key metrics

metric value
IC_flow_5d_to_fwd20 +0.1002
IC_momentum5_baseline -0.0187
IC_momentum20_baseline +0.0240
IC_residual_pooled +0.1263
CI_residual_pooled [+0.0452, +0.2121]
IC_flow_nonoverlap +0.1382
IC_residual_nonoverlap +0.1706
CI_residual_nonoverlap [-0.2306, +0.5643]
effective_n_nonoverlap 30
r2_flow_explained_by_momentum +0.4563
ic_drop_pct_residual -26.0303
yearly_resid_ic {2024: 0.137, 2025: 0.071, 2026: 0.251}

1) Pooled ICs (overlapping 20d windows, n=585)

Relationship IC CI_low CI_high p
flow_5d → fwd_20 (scout replication) 0.1002 0.0188 0.1862 0.0153
flow_5d → trail_5 (confound: flow chases price) 0.4978 0.4275 0.5517 5.97e-38
trail_5 → fwd_20 (momentum baseline 5d) -0.0187 -0.1019 0.072 0.652
trail_20 → fwd_20 (momentum baseline 20d) 0.024 -0.0633 0.1115 0.563
flow_resid → fwd_20 (orthogonal to momentum) ★ 0.1263 0.0452 0.2121 0.00221
  • R² of flow_5d explained by trailing momentum: 45.6%

  • Residualization changes IC by -26.0% (+0.1002 → +0.1263)

2) Overlap-honest — non-overlapping 20d blocks

The overlapping sample n=585 is misleading: 20d windows overlap by ~95%. Disjoint blocks (every 20th day) → effectively n=30.

Signal IC_nonoverlap CI p n
flow_5d → fwd_20 0.1382 [-0.285, +0.521] 0.467 30
flow_resid → fwd_20 0.1706 [-0.231, +0.564] 0.367 30

3) Yearly IC (Spearman, in-sample per calendar year)

  • flow_5d → fwd_20: {2024: 0.04, 2025: 0.091, 2026: 0.126}

  • flow_resid → fwd_20: {2024: 0.137, 2025: 0.071, 2026: 0.251}

ic-comparison