Files
tac-exp-dev/book/chapters/09-cost-turnover-frontier.md
T

49 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chapter 09 — The Cost/Turnover Frontier
Status: drafting. Claim inventory: see `README.md` ch. 09.
This chapter is the empirical core of the book's cost argument: **turnover, not signal, is the binding constraint.** Ch. 03 established the gross→net collapse on the reference. Ch. 08 showed the fix. This chapter quantifies the frontier — what turnover costs at 20bp round-trips and what the trade-off looks like when you cut it.
## The frontier on the clean lake
The 50-ETF panel, $1M book, 5bp open / 15bp close / $5 minimum. The same underlying signal (compact stochastic set, 5-seed ensemble, 5d label — IC 0.050, RankIC 0.066) expressed at different turnover levels:
| Construction | Turnover character | Cost drag | Net ann | Net IR | Source |
|--------------|--------------------|-----------|---------|--------|--------|
| daily topk10, n_drop 2 | daily forced replacement | ~9–10pp | −3.21% | −0.32 | exp 24 |
| daily topk10, n_drop 1 | daily, hold dropped name | ~5pp | +2.13% | +0.21 | exp 26 |
| **weekly recompute** | **weekly refresh** | **~1.1pp** | **+12.51%** | **+1.24** | **exp 39 (Q07)** |
| daily long-short top10/b10 | two-sided daily | ~9.7% of NAV | −8.38% | −0.83 | exp 41 (Q09) |
`PROVEN — EVIDENCE#015 (exp 26), #028 (exp 39), #030 (exp 41)`.
The n_drop 2→1 step (exp 26) already showed the mechanism with byte-identical signal metrics — the entire net gain was cost relief `(EVIDENCE#015)`. The weekly step (Q07) went further: same signal, same topk/n_drop, cadence only, and cost drag fell to ~1.1pp while net went to +12.51%.
## The long-short lesson
Q09 is the cleanest demonstration that cost, not signal, is the frontier: the long-short construction had a *positive* pre-cost excess (+6.57%, IR 0.656) — the signal genuinely separates longs from shorts — yet cost **$96,721 ≈ 9.7% of NAV** in ~150 days (2485 trades, fill rate 0.40) and net was −8.38%. `PROVEN — EVIDENCE#030 → exp 41`. A construction that spends ~10% of the book annually on two-sided turnover cannot be rescued by signal alone.
## Where the frontier bends
- **Cadence (proven).** Weekly recompute of a 5-day signal is the single biggest lever found: ~1.1pp drag, +12.51% net. `PROVEN — EVIDENCE#028 → exp 39`.
- **Dropped-name policy (proven).** n_drop 2→1 (hold, don't re-trade) bought ~5pp. `PROVEN — EVIDENCE#015 → exp 26`.
- **Sizing (weak).** Kelly-style sizing scaled exposure but did not change the turnover bill (Q06, +1.04% net). `PROVEN — EVIDENCE#027 → exp 38`.
- **Label horizon (counterintuitive).** Longer labels improve the *signal* monotonically (22d IC 0.097, RankIC 0.117) but *worsen net* under daily churn (Q05: −4.60%). The horizon gain is real but unmonetized. `PROVEN — EVIDENCE#026 → exp 37`. ~~`TODO(evidence-needed: long-horizon label at weekly cadence — the combination is untested and is the book's most promising open cell)`~~ — **ANSWERED:** Q12 (exp 44): 22d+weekly net −4.88% IR −0.566. Q21 (exp 51): 10d+weekly net +1.19% IR 0.148. Both below IR 0.5 acceptance. Weekly is a universal cost lever (~10pp improvement) but the5d label remains the sweet spot. `EVIDENCE#036/042`.
## Desk rules distilled from this chapter
1. Compute cost drag as a share of NAV before believing any net number; at 20bp round-trips, 1% NAV per quarter is easy to spend.
2. Rank construction changes by cost drag first: cadence > dropped-name policy > sizing > gates.
3. Report gross and net side by side in every experiment; a positive-gross/negative-net run is a turnover problem, not a signal verdict.
4. `TODO(evidence-needed: realized-cost comparison of the weekly construction against the 5bp/15bp/$5 model once it trades live)`
## Evidence cited in this chapter
| Tag | Source |
|-----|--------|
| `EVIDENCE#015` | exp 26, run `21afc6af…`, branch `exp/26-test-whether-reducing-topkdropout-daily` |
| `EVIDENCE#028` | exp 39 (Q07), run `eb38588c…`, branch `exp/39-q07-weekly-rebalance-recompute-topkdropo` |
| `EVIDENCE#030` | exp 41 (Q09), run `0647eadd…`, branch `exp/41-q09-long-short-market-neutral-long-top-1` |
| `EVIDENCE#026` | exp 37 (Q05), run `daad5042…`, branch `exp/37-q05-label22d-22d-forward-return-label-vs` |
| `EVIDENCE#027` | exp 38 (Q06), run `afca4b80…`, branch `exp/38-q06-kelly-sizing-score-magnitude-fractio` |
| `EVIDENCE#013` | exp 24, run `fe469a19…`, branch `exp/24-run-the-rankic-ensemble-in-mlflow-experi` |