Derive the lineup K-rate free, and fingerprint the cap fix
Two premise corrections first. Pitcher stuff features have NOT proven solo through the gate -- every one was refused on sample (n=57 against 500). Four exceed the effect-size bar (arm angle -0.250, whiff +0.213, k rate +0.206, chase +0.195), which is why they are worth pursuing, but clearing one of three thresholds is not passing. And the carrier was not blocked only on the lineup input: that input was built and measured last session at 94.7% coverage. What blocks it is n, and n was being throttled by the grading cap. RUNG 1 IS DERIVED AND COSTS NOTHING. Opposing-team K-rate comes from joining the opposing roster to the batter k_pct values already in statcast_aggregates -- no new feed. The improvement this session is that it is PA-WEIGHTED: an unweighted roster mean counts a 12-PA callup the same as an everyday starter, which is not the lineup a pitcher faces. That change alone reversed the term's sign. Unweighted, the lineup term HURT the model (0.1738 -> 0.1285). PA-weighted, it HELPS (0.1738 -> 0.1953). Same hypothesis, same data -- the derivation was the problem, not the signal, which is the entire argument for deriving the best honest version before sourcing anything. Head-to-head is now +0.2592 with a CI of [-0.0167, +0.5645], very nearly excluding zero, at n=57. Within archetype, the two strata come out with OPPOSITE signs -- FLAME incremental -0.152, non-FLAME +0.145 -- and the pooled value (+0.077) sits between them, which is the shape a conditional effect makes and is invisible when pooled. That is what stratifying was for. But n is 20 and 24, the standard error on a correlation there is about 0.22, and the direction contradicts the theory that predicted a stronger effect for finesse arms. It is recorded as a structure to re-test, not as a finding. Rungs 2 and 3 are NOT triggered. A rung fails only once it has been fairly tested, and Rung 1 is n-blocked rather than failed. Sourcing confirmed lineups now would be paying for precision on top of a proxy we have not yet measured. THE RESULT THAT DECIDES THE TIMELINE: yesterday's cap raise is fingerprinted in production at 907 grades per snapshot, up from 334, with strikeouts going 6 to 17. That puts n>=500 for pitcher Ks about a week out instead of three months. Operational note: the manual internal snapshot endpoint now 524s at the Cloudflare edge because grading the full board exceeds 100s -- the run still completes server-side (this very snapshot was written by a 524'd request) and the cron is in-process, so a 524 there is not a failure. Nothing proven, nothing calibrated, nothing shipped. The counter remains anti-predictive on strikeouts at -0.064 and the skill model leads it by 0.26. 4,221 tests green (335 suites); web build exit 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9
This commit is contained in:
@@ -3,6 +3,27 @@
|
||||
## Last Updated
|
||||
2026-08-03
|
||||
|
||||
## Session 85 (2026-08-03) — Rung 1 derived free; the cap fix fingerprinted ✅
|
||||
Spec: `specs/lineup-k-rate-rung1.md`. 4,221 tests / 335 suites green, build exit
|
||||
0. Counter + batter cluster + pitcher engine byte-identical.
|
||||
- **CAP FIX VERIFIED IN PROD: 334 -> 907 grades/snapshot; strikeouts 6 -> 17.**
|
||||
n>=500 for Ks is ~a week out instead of ~3 months. NOTE: the manual internal
|
||||
snapshot endpoint now 524s at Cloudflare (>100s) but COMPLETES server-side.
|
||||
- **RUNG 1 DERIVED, zero new sourcing:** opposing-team K-rate from the roster
|
||||
joined to batter k_pct we already ingest, 94.7% coverage — now PA-WEIGHTED.
|
||||
That change flipped its contribution: unweighted HURT (0.174->0.129),
|
||||
PA-weighted HELPS (0.174->0.195). Head-to-head delta +0.259, CI
|
||||
[−0.0167,+0.5645] — nearly excluding zero, still INCONCLUSIVE at n=57.
|
||||
- **Within-archetype:** FLAME incremental −0.152, non-FLAME +0.145 — opposite
|
||||
signs, invisible when pooled (+0.077). But n=20/24 and the direction
|
||||
contradicts the theory. Structure to re-test, not a finding.
|
||||
- **Rungs 2/3 NOT triggered** — Rung 1 is n-blocked, not failed. Do not source
|
||||
confirmed lineups.
|
||||
- **Nothing proven, nothing calibrated, nothing shipped.** Counter is still
|
||||
anti-predictive on Ks (−0.064); skill model leads by 0.26.
|
||||
- **Next:** wait ~1 week for n>=500 + a statcast_history window, re-run, re-test
|
||||
the strata at ~200/stratum, and give arm_angle a registry entry + mechanism.
|
||||
|
||||
## Session 84 (2026-08-03) — Pitcher engine built; the cap was eating the board ✅
|
||||
Spec: `specs/pitcher-engine-strikeouts.md`. 4,221 tests / 335 suites green, build
|
||||
exit 0. Batter model + counter byte-identical (verified by diff).
|
||||
|
||||
Reference in New Issue
Block a user