Skip to content
Skip to content
← all research
STUDY

"Calibration Audit of the `combined` Signal — Multi-Horizon (P3c ROADMAP item)"

2026-09-04

·

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

CacheSpearman 1dSpearman 5dSpearman 21dtop-bot 1dtop-bot 5dtop-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):

DecileNcombined rangefwd meant-stat
13,133+0.05..+0.14+0.026%+0.74
23,132+0.14..+0.17+0.026%+0.88
33,132+0.17..+0.19+0.008%+0.24
43,132+0.19..+0.21+0.110%+3.33
53,132+0.21..+0.23+0.076%+2.14
63,132+0.23..+0.25+0.063%+1.69
73,132+0.25..+0.27+0.124%+3.10
83,132+0.27..+0.31+0.146%+3.60
93,132+0.31..+0.36+0.160%+3.44
103,132+0.36..+0.67+0.209%+3.50

5-day horizon (Spearman +0.0344, top-bottom spread +0.572%/day):

DecileNcombined rangefwd meant-stat
13,129+0.05..+0.14+0.363%+4.97
23,129+0.14..+0.17+0.182%+2.64
33,129+0.17..+0.19+0.186%+2.59
43,129+0.19..+0.21+0.270%+3.62
53,129+0.21..+0.23+0.270%+3.70
63,128+0.23..+0.25+0.459%+5.77
73,129+0.25..+0.27+0.551%+6.75
83,129+0.27..+0.31+0.577%+6.48
93,129+0.31..+0.36+0.634%+6.34
103,129+0.36..+0.67+0.935%+7.85

21-day horizon (Spearman +0.0528, top-bottom spread +2.452%/day):

DecileNcombined rangefwd meant-stat
13,117+0.05..+0.14+1.628%+10.72
23,116+0.14..+0.17+1.007%+6.69
33,116+0.17..+0.19+1.213%+8.41
43,116+0.19..+0.21+1.285%+8.55
53,116+0.21..+0.23+1.001%+6.70
63,116+0.23..+0.25+1.624%+9.72
73,116+0.25..+0.27+1.860%+10.99
83,116+0.27..+0.31+1.937%+11.19
93,116+0.31..+0.36+2.222%+11.62
103,116+0.36..+0.67+4.080%+18.83

#Key Findings

  1. 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.

  2. 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.

  3. 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

All trading described is paper (simulated). Not investment advice.

← all research