Phase 11 — five parallel agents
After Phase 8's partial verdict on per-stock z-score and Phase 9's news-channel audit, Phase 11 sent five parallel agents in five different directions. Each was a single-purpose attack on a residual leakage signal or a candidate feature direction.
11.A — linear baseline (L49)
Pure-linear LinearStrategy (1 layer, cross-sectionally de-meaned) at Nifty 50 with per-stock z-score + position-floor.
- Honest Sharpe = -0.347
static_featuresPASS (sharpe = +0.353)- First leakage-clean-on-
static_featuresverdict at Nifty 50 scale
Linear models structurally cannot construct the per-stock biases that MLPs use to fail the static_features test. shuffled_target still fails (2.76, vs 2-3 for MLP variants).
This is one of the two best-honest-result candidates on Best candidates.
11.B — permutation-invariance leakage test
Added the 6th leakage test: train on (features, returns), evaluate on (features with permuted ticker labels, returns). Sharpe should drop to noise.
Now part of the harness contract — see Methodology.
11.C — explicit gkg_neg_tone_t feature (L51)
L48 said news was a weak contrarian signal. 11.C tested the obvious next step: add gkg_neg_tone_t = -1 * gkg_avg_tone_t as an explicit feature so the model can use the sign directly.
Result: sharpe = -4.99, mean_pnl = -2.3e-3 — model goes deep contrarian and fails most leakage tests (static_features=5.14, shuffled_target=-3.92). L48 signal is real (corr=-0.02 to -0.10) but explicit feature lets the model overweight a small contrarian edge into noise-amplification territory. Use neg_tone with stronger regularisation or as a minority ingredient in a larger feature set, not as a dominant signal.
11.E — ticker dropout (L50)
ticker_dropout=0.3 during training (per-step random masking of ~30% tickers with re-de-mean) at Nifty 50 + per-stock z-score + position-floor.
sharpe = +6.29(L23 bug-suspect — too high to be honest)static_featuresPASS (-0.137)permutation_invariancePASS (+0.351)- 4 of 6 leakage tests pass — most-comprehensive leakage pass yet for an MLP at scale
The remaining failures (shuffled_target +3.18, Sharpe artifact) suggest the dropout-induced gradient noise inflates Sharpe even when ticker-identity leakage is removed. Tighter weight decay or smaller hidden size on top of dropout is the natural follow-up — which Phase 12 ran and refuted (L54).
11.F — sector demean (L52)
sector_demean preprocessing (lib.sectors.sector_demean applied to features BEFORE per-stock z-score) at Nifty 50 + position-floor.
sharpe = +2.09,mean_pnl = +1.07e-3shuffled_target = +4.93 FAIL(worse than baseline)static_features = +3.81 FAILpermutation_invariance PASS(+1.07)
Sector-demean alone does not fix the L43 leakage; it removes sector-mean structure but residual within-sector ticker identity still leaks. Combined sector_demean + ticker_dropout may be the next natural test — not yet run.
What it produced
L49 (linear baseline is the cleanest), L50 (dropout candidate looks promising — later refuted by L54), L51 (explicit neg-tone overshoots), L52 (sector-demean alone insufficient). Six leakage tests in series for the first time.