Harness and diagnostics share _filter_liquid_breadth_week_rich. Recompute shows unconditional liquid fip IC -0.017 (mask binds 97%); mom-conditional -0.088/t-4.58 stands. Document +0.0575 as orphaned.
5.5 KiB
Broad-universe fip_id IC research (Phase B)
Status: unconditional fip closed; mom-conditional lead confirmed on single-sourced path.
Production impact: none. Display card remains context-only.
Scope
- Research only — production universe, gate, scanner, schedule unchanged.
- Snapshot:
research.sqlite(~4,650 tickers = prod + nasdaq_all extend). - Liquid mask: top 1,500 by point-in-time 63d median $vol, price ≥ $5/week.
Caveats
- Survivorship bias (today’s constituents, history backfilled).
- IEX volume undercount → relative $vol rank only.
- Pool skew: Nasdaq-heavy; missing pure NYSE mid-caps.
- Do not mix multi-signal tables across universe baselines.
Fingerprint (505-name prod)
| Expected | Observed | |
|---|---|---|
| mean IC | −0.045 | −0.045 |
| t-stat | −2.9 | −2.91 |
| weeks / N / reliable | ≥12 / ~500 / true | 35 / 497.7 / true |
Pass. Formula + pipeline trustworthy.
Discrepancy (must not be papered over)
| Source | fip IC (liquid ~1500) | t |
|---|---|---|
Report fip-breadth-20260718-211440-breadth.json |
+0.0575 | +5.12 |
| Single-sourced recompute (2026-07-19) | −0.0168 | −1.85 |
That is a sign disagreement on the same intended quantity. Method rule: the number you cannot reconcile is the number you cannot use.
What we did
- Single-sourced the mask — diagnostics call harness
_signal_series+_filter_liquid_breadth_week_richonly (no parallel mask). - Documented avg_cross_section semantics — always post-mask IC sample size.
- Logged pre-mask stats so “did top-N bind?” is answerable.
Authoritative unconditional liquid fip (post-reconciliation)
| metric | value |
|---|---|
| mean_ic | −0.0168 |
| ic_t_stat | −1.85 |
| weeks | 35 |
| avg_cross_section (post-mask) | 1471.2 |
| avg_raw_pool | 3214.4 |
| avg_eligible_pre_mask | 2338.4 |
| mask_binds_pct | 97.1% |
| reliable | true |
Mask binds hard (eligible ≫ 1500). The hypothesis that “1471 meant the mask never bound / unmasked +5σ” is false.
Harness _signal_evaluation vs manual IC through the same filter: exact match (−0.0168 / −1.85).
Verdict on the orphan
The +0.0575 / t +5.12 row is orphaned. Do not cite it. Root cause of that single run is not fully forensic-reconstructed (no dual dump from the original process remains), but every single-sourced recompute on this snapshot lands near −0.017, and the tier blend (≈800×−0.035 + ≈670×+0.014)/1471 ≈ −0.013 is internally consistent with that number—not with +0.058.
Iron rule unconditional: still not green (|IC| 0.017 < 0.03), and now with the correct mild-negative sign.
Artifact: reports/fip-reconcile-20260719-000520.json
Compositional story (supported)
fip_id = sign(PRET)×(%neg−%pos) pools:
- Continuous winners → want negative IC
- Continuous bleeders → want positive IC
| check | IC | t | read |
|---|---|---|---|
| Prod-universe subset inside liquid | −0.044 | −2.88 | Matches fingerprint → compositional, not regime change |
| Tier 1–800 (senior) | −0.035 | −2.99 | Winner leg |
| Tier 801–1500 (junior) | +0.014 | +1.25 | More bleeder / junk weight |
| Lagged membership (prior-week $vol) | −0.010 | −0.93 | Same sign as same-week; not a +5σ leak artifact |
Do not log “on Nasdaq, jumpy paths outperform.” That would mythologize an orphaned +0.06.
Platform-relevant test: momentum-conditional fip
Among liquid top-1500, keep mom_12_1 ≥ P80 (~294 names/week):
| metric | value |
|---|---|
| mean_ic | −0.0879 |
| ic_t_stat | −4.58 |
| ic_positive_pct | 22.9% |
| weeks | 35 |
| reliable | true |
Computed on the same single-sourced path as the authoritative −0.017. This is the paper’s claim and the only version a gate could consume.
| Decision | |
|---|---|
| Unconditional fip | Closed for production |
| Mom-conditional fip | Alive as book-tilt candidate only — book sim before any gate talk |
| Display card | Stays |
| Production change | None |
Vol-tilt / residual-mom warning (any future breadth move)
| signal (liquid, single-sourced) | IC | t |
|---|---|---|
| vol_6m | −0.048 | −1.4 |
| mom_12_1 | +0.046 | +1.9 |
| mom_12_1_resid | +0.029 | +1.3 |
High-vol names tend to underperform on this pool relative to a clean S&P-like book. Production 80/20 high-vol tilt was validated on S&P-like names. If the universe ever broadens in production, re-validate that tilt first — it can flip from mildly helpful to harmful. Raw momentum also looks stronger than SPY residualization here (noisier fit for small caps).
How to re-run (research branch only)
.\.venv\Scripts\python.exe scripts\run_fip_breadth_diagnostics.py `
--research-snapshot backtest_snapshots\research.sqlite `
--prod-snapshot backtest_snapshots\prod.sqlite `
--workers 6 --allow-spawn
Bottom line
- Formal iron-rule screen: not green either before or after reconciliation.
- +0.0575 / +5.12 is orphaned — authoritative unconditional liquid fip is −0.017 / −1.9; mask binds (~97%).
- Compositional tug-of-war is the right story; jumpiness premium is not.
- Mom-conditional −0.088 / −4.6 stands on the single-sourced path → optional next research step is a book A/B, not a gate wire-in.
- Log any future reader who sees both numbers: trust the reconcile artifact, not the orphaned breadth headline.