Navigation
DashboardProbesRealness Loop › Iter 11 · #9

iteration 11 · 2026-07-23 · P2 · laptop-drives-bigblack

🎲 #9 PBO / CSCV GROUNDED

Probability of Backtest Overfitting: if you pick the in-sample winner, does it stay a winner out-of-sample — or is it a coin flip? All seven §7 gates now pass, robust across 6 seeds. This supersedes the iter-10 checkpoint — the PBO-null calibration the operator descoped from #0 is closed.

7 / 7
§7 gates pass
null 0.51
exchangeable ≈ chance ✓
0.0 / 0.52
PBO: skill vs noise
6 seeds
all GROUNDED
Preflight (resource-only): load1 0.28 · 42 GiB available · si/so ~0 · ClickHouse active, readonly=2. 5c/5G/no-swap capped, single-thread BLAS.

The seven gates

Gate (§7 row 9)ResultTarget
Exchangeable null ≈ .50.514 (full within-block shuffle)[.42,.58]PASS
Overfit-noise high & firesmedian 0.516; fire@.2 = 0.967≥.45 & fires ≥.95PASS
Genuine-skill low & powermedian 0.0, power 1.0≤.10 & ≥.8PASS
AUC (skill vs noise)1.00≥.90PASS
Known-duplicate\|ΔPBO\| 0.005< .05PASS
Purge lifts PBO0.44 (0.00 → 0.44)≥ .25PASS
Harden — magnitude gate2 sub-cost + 3 supra-cost, all PBO 0pairing load-bearingPASS

Seed-robustness (verify-before-report): 6 seeds at K=100, all GROUNDED 7/7 — fire@.2 ∈ [.958,.983], null ∈ [.474,.514], purge ∈ [.43,.53], dup < .006.

Three structural fixes (found by attacking each number, not moving thresholds)

  1. Within-block-mean IC artifact (the load-bearing bug). Per-block IC was mean(a·b) on globally-zranked values; block-permutation preserves the non-zero block-means, so each cell ≈ μfeat(b)·μtarget(b) — a cross-block-correlated signal that pushed even the exchangeable null below chance. Fix: a within-block centered correlation.
  2. The chance null must be maximally exchangeable. A block-preserving permutation keeps 100-bar autocorrelation intact, and CSCV misreads persistence as pseudo-skill (null 0.34). A full within-block shuffle restores it to 0.51. The 0.34 is kept as a documented autocorrelation-sensitivity — the trial statistic must ride on the leakage-free #0 CPCV substrate.
  3. CSCV/PBO is a MANY-TRIALS estimator. K=6 was its biased regime (raising blocks S made it worse). K=100 (the real SFI matrix has 100+ trials) tightens the noise distribution so the finite-trial gates clear for every seed.

Two calibration decisions (documented, not p-hacked)

Operating-envelope finding. PBO is fooled by raw autocorrelation (block-perm null 0.34 << chance): an un-purged, autocorrelated performance series reads as "robust." The purge gate (lift 0.44) is the guard — and the reason #9 must consume #0's purged CPCV folds, never raw per-bar performance.