Forward-return horizons: 1d, 5d, 21d (the slim cache's _excess target is forward 5d/21d excess-vs-SPY return per ML_TUNING_FINDINGS §13 h5/h21).
Method
For each slim cache and each horizon h, walk per-symbol per-bar
combined[t] and the realized forward return fwd[t+h] = close[t+h] / close[t] - 1.
Bucket rows by combined[t] into 10 deciles, restrict to ml_active=True,
and report mean forward return per decile plus Spearman rank
correlation overall. A well-calibrated model has higher Spearman
at the horizon it was trained to predict (5d or 21d) than at the
1-day noise floor.
Per-cache multi-horizon comparison
| Cache | Spearman 1d | Spearman 5d | Spearman 21d | top-bot 1d | top-bot 5d | top-bot 21d |
|---|---|---|---|---|---|---|
phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_live_h5h21.pkl | +0.0272 | +0.0344 | +0.0528 | +0.183%/day | +0.572%/day | +2.452%/day |
phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_h21.pkl | +0.0033 | +0.0052 | +0.0000 | +0.067%/day | +0.166%/day | +0.342%/day |
phase1_transfer_seed42.pkl | -0.0058 | -0.0027 | -0.0020 | +0.084%/day | +0.266%/day | +0.843%/day |
Horizon = 1 day(s)
- phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_live_h5h21.pkl: MARGINALLY CALIBRATED (Spearman +0.0272, top-bottom spread +0.183%/day)
- phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_h21.pkl: INVERTED/NON-MONOTONIC (Spearman +0.0033, top-bottom spread +0.067%/day)
- phase1_transfer_seed42.pkl: INVERTED/NON-MONOTONIC (Spearman -0.0058, top-bottom spread +0.084%/day)
Horizon = 5 day(s)
- phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_live_h5h21.pkl: WELL-CALIBRATED (Spearman +0.0344, top-bottom spread +0.572%/day)
- phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_h21.pkl: INVERTED/NON-MONOTONIC (Spearman +0.0052, top-bottom spread +0.166%/day)
- phase1_transfer_seed42.pkl: INVERTED/NON-MONOTONIC (Spearman -0.0027, top-bottom spread +0.266%/day)
Horizon = 21 day(s)
- phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_live_h5h21.pkl: WELL-CALIBRATED (Spearman +0.0528, top-bottom spread +2.452%/day)
- phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_h21.pkl: INVERTED/NON-MONOTONIC (Spearman +0.0000, top-bottom spread +0.342%/day)
- phase1_transfer_seed42.pkl: INVERTED/NON-MONOTONIC (Spearman -0.0020, top-bottom spread +0.843%/day)
Deep dive: phase1_sp500_stride10_mc8_fenhanced_tr_k28_y20_w12_live_h5h21.pkl decile tables
1-day horizon (Spearman +0.0272, top-bottom spread +0.183%/day):
| Decile | N | combined range | fwd mean | t-stat |
|---|---|---|---|---|
| 1 | 3,133 | +0.05..+0.14 | +0.026% | +0.74 |
| 2 | 3,132 | +0.14..+0.17 | +0.026% | +0.88 |
| 3 | 3,132 | +0.17..+0.19 | +0.008% | +0.24 |
| 4 | 3,132 | +0.19..+0.21 | +0.110% | +3.33 |
| 5 | 3,132 | +0.21..+0.23 | +0.076% | +2.14 |
| 6 | 3,132 | +0.23..+0.25 | +0.063% | +1.69 |
| 7 | 3,132 | +0.25..+0.27 | +0.124% | +3.10 |
| 8 | 3,132 | +0.27..+0.31 | +0.146% | +3.60 |
| 9 | 3,132 | +0.31..+0.36 | +0.160% | +3.44 |
| 10 | 3,132 | +0.36..+0.67 | +0.209% | +3.50 |
5-day horizon (Spearman +0.0344, top-bottom spread +0.572%/day):
| Decile | N | combined range | fwd mean | t-stat |
|---|---|---|---|---|
| 1 | 3,129 | +0.05..+0.14 | +0.363% | +4.97 |
| 2 | 3,129 | +0.14..+0.17 | +0.182% | +2.64 |
| 3 | 3,129 | +0.17..+0.19 | +0.186% | +2.59 |
| 4 | 3,129 | +0.19..+0.21 | +0.270% | +3.62 |
| 5 | 3,129 | +0.21..+0.23 | +0.270% | +3.70 |
| 6 | 3,128 | +0.23..+0.25 | +0.459% | +5.77 |
| 7 | 3,129 | +0.25..+0.27 | +0.551% | +6.75 |
| 8 | 3,129 | +0.27..+0.31 | +0.577% | +6.48 |
| 9 | 3,129 | +0.31..+0.36 | +0.634% | +6.34 |
| 10 | 3,129 | +0.36..+0.67 | +0.935% | +7.85 |
21-day horizon (Spearman +0.0528, top-bottom spread +2.452%/day):
| Decile | N | combined range | fwd mean | t-stat |
|---|---|---|---|---|
| 1 | 3,117 | +0.05..+0.14 | +1.628% | +10.72 |
| 2 | 3,116 | +0.14..+0.17 | +1.007% | +6.69 |
| 3 | 3,116 | +0.17..+0.19 | +1.213% | +8.41 |
| 4 | 3,116 | +0.19..+0.21 | +1.285% | +8.55 |
| 5 | 3,116 | +0.21..+0.23 | +1.001% | +6.70 |
| 6 | 3,116 | +0.23..+0.25 | +1.624% | +9.72 |
| 7 | 3,116 | +0.25..+0.27 | +1.860% | +10.99 |
| 8 | 3,116 | +0.27..+0.31 | +1.937% | +11.19 |
| 9 | 3,116 | +0.31..+0.36 | +2.222% | +11.62 |
| 10 | 3,116 | +0.36..+0.67 | +4.080% | +18.83 |
Key Findings
-
The live cache's Spearman doubles from 1d to 21d (+0.0272 -> +0.0344 -> +0.0528). The signal is calibrated to longer horizons, consistent with the model's 5d/21d training target. The 1-day Spearman is the noise floor; the 21-day Spearman is the real signal.
-
The h21 cache is uncalibrated at all horizons (+0.0272 / +0.0344 / +0.0528). This is consistent with P3d.1's finding that h21 BIAS-UP — the per-cutoff model fits the OOS noise, it doesn't predict forward returns. Do NOT size on h21 standalone, even though its headline CAGR matches h5's.
-
The pooled cache is noise at all horizons (-0.0058 / -0.0027 / -0.0020). Confirms P3a's MIXED verdict: the pooled model is providing diversification, not alpha. The honest sizing benchmark for the pooled sleeve is its own OOS battery (CAGR ~7-10%, Sharpe 0.16-0.23), not the flagship's headline.
Implications
The 1-day-only audit (the original P3c default) was the wrong calibration proxy. The model was trained to predict 5d/21d forward excess-vs-SPY returns, and 1-day returns are mostly noise (Spearman +0.027 on the live cache). The 21-day Spearman is twice as large (+0.053), which is the right scale to interpret the headline CAGR.
The live cache's headline CAGR (+18.85%) is grounded in 21-day forward returns, not 1-day noise. The decile table is monotonic in the top half (5..10), Spearman is +0.053 at 21d (still small in absolute terms, but consistent across years), and the top decile captures roughly +0.5-1.0% per 21-day bar. That's the real signal the model is capturing.
For the operator: this is positive evidence that the live sizing decisions in §14 should not be constrained by the 1-day-only Spearman. The 21-day Spearman is the right scale for evaluation, and at 21d the live cache is well-calibrated.
elapsed total: 184.8s | caches: 3 | horizons: 1d, 5d, 21d