Decompose the rbi anomaly: it is lineup ROLE, and the counter is
out-resolved by a frequency table on three of four stats
PHASE 0 — the 14.51% is REAL. Re-derived with a paged pull asserted
against an exact count (rbi 7,930 == 7,930; hits 11,690; TB 12,086; runs
6,440), since this harness produced a false null three times tonight. rbi
resolution 0.03268 reproduces, deciles are monotone through the middle,
and 20 raw rows are in the artifact for hand audit.
CAVEAT GOVERNING EVERYTHING BELOW: the naive forecasts are leave-one-out
ON THE EVALUATION WINDOW, so they see the rows they are scored on while
the model is strictly point-in-time. They are upper bounds on available
resolution, not fair competitors, and every comparison is read that way.
PHASE 1 — the split:
stat MODEL (a)player-base (b)lineup-slot (c)within-stratum
rbi 0.03268 0.01167 0.03608 0.01908
hits 0.00252 0.00446 0.00100 0.00473
TB 0.00442 0.01331 0.03448 0.00607
runs 0.00130 0.00262 0.01156 0.01170
FINDING 1 — rbi's resolution is LINEUP ROLE almost exactly. Batting-order
slot alone resolves 0.03608 against the model's 0.03268. A single integer
accounts for the whole anomaly and slightly more. That is opportunity, not
skill -- the cleanup hitter bats with runners on. 36% is matched by player
identity alone. Within similar-base-rate strata the model still resolves
0.01908, 58% of its total and higher than any other stat's ENTIRE model
resolution, so genuine within-role discrimination exists on top.
FINDING 2 — on three of four stats the model is beaten by "he's a .270
hitter". Base-rate-only out-resolves the model 1.8x on hits, 3.0x on TB,
2.0x on runs. Even allowing for the window-peeking advantage, a 1.8-3.0x
gap is not explained by that alone: the served counter appears to DESTROY
discrimination relative to the player's own rate. rbi is the one stat
where the model beats the naive baseline.
FINDING 3 — lineup slot out-resolves the MODEL on three stats: TB 7.8x,
runs 8.9x, rbi 1.1x. Hits is the only stat where batting order carries
less, which is mechanically right -- a hit is a hit wherever you bat, but
runs, RBI and total bases all scale with opportunity.
PHASE 2 — all three worlds are partly true, in measured proportions.
World A ~90% true (slot covers rbi's entire resolution). World B ~36% true
for rbi, but the WHOLE story for hits/TB/runs where base rate alone wins.
World C true with a low ceiling: hits' total available spread resolution
is 0.00446, i.e. 1.8% of variance from a forecast that has seen the
answers.
PHASE 3 — the next arc is NOT "strengthen hits factors". Hits has the
lowest available resolution on the board and last order's wiring already
took it to 1.39% of a ~1.8% ceiling. Named first factor order for next
session: LINEUP SLOT / RISP OPPORTUNITY on rbi through the two-part gate --
input already ingested and prod-verified (S89), resolution measured not
hypothesised, causally-correct unit is plate appearances with runners on.
Measured availability is not a pass; it still faces the gate.
And higher-value than either: the counter being out-resolved by a
frequency table on three of four stats is a defect in the CHAMPION, not a
factor problem, and it costs nothing to test -- the recency blend and the
+/-0.03 / +/-0.015 nudges are three lines in probabilityEstimator.
The hits transmission win from 43f65d3 stands: the conduit is real and
permanent. This order changes only which stat has the most worth flowing
through it.
Diagnostic only -- no factor wired, no serving path changed, p_win
untouched, all frozen modules byte-identical. No Bonferroni slot.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
# The rbi anomaly, decomposed — the model is out-resolved by a batting-order integer
|
||||
|
||||
## PHASE 0 — the 14.51% is REAL
|
||||
|
||||
The figure came from the harness that produced a false null three times tonight,
|
||||
so it was re-derived with a paged pull **asserted against an exact count**:
|
||||
|
||||
| stat | exact rows | paged rows | scorable | resolution | share |
|
||||
|---|---|---|---|---|---|
|
||||
| rbi | 7,930 | 7,930 ✓ | 630 | **0.03268** | **14.51%** |
|
||||
| hits | 11,690 | 11,690 ✓ | 1,140 | 0.00252 | 1.03% |
|
||||
| total_bases | 12,086 | 12,086 ✓ | 1,050 | 0.00442 | 1.82% |
|
||||
| runs | 6,440 | 6,440 ✓ | 597 | 0.00130 | 0.56% |
|
||||
|
||||
**Reproduces exactly.** rbi deciles are monotone through the middle (0.552→0.577,
|
||||
0.646→0.691, 0.746→0.784) with a genuinely low bin at 0.13→0.122, and 20 raw
|
||||
rows are printed in the artifact for hand audit.
|
||||
|
||||
---
|
||||
|
||||
## The caveat that governs every number below
|
||||
|
||||
The naive forecasts are **leave-one-out on the evaluation window itself** — they
|
||||
see that player's performance in the very rows being scored, while the model is
|
||||
strictly point-in-time. They are therefore **upper bounds on available
|
||||
resolution, not fair competitors.** Every comparison is read that way.
|
||||
|
||||
---
|
||||
|
||||
## PHASE 1 — the three-way split
|
||||
|
||||
| stat | MODEL | (a) player base rate | (b) lineup slot | (c) within-stratum |
|
||||
|---|---|---|---|---|
|
||||
| **rbi** | **0.03268** | 0.01167 | **0.03608** | 0.01908 |
|
||||
| hits | 0.00252 | **0.00446** | 0.00100 | 0.00473 |
|
||||
| total_bases | 0.00442 | **0.01331** | **0.03448** | 0.00607 |
|
||||
| runs | 0.00130 | **0.00262** | **0.01156** | 0.01170 |
|
||||
|
||||
### Finding 1 — rbi's resolution is LINEUP ROLE, almost exactly
|
||||
|
||||
**Batting-order slot alone resolves 0.03608 against the model's 0.03268.** A
|
||||
single integer — where he hits in the order — accounts for the entire anomaly and
|
||||
slightly more. That is real predictive signal and it is **opportunity, not
|
||||
skill**: the cleanup hitter bats with runners on, the 8-hole hitter does not.
|
||||
|
||||
Player base rate alone gives 0.01167, so ~36% of the model's rbi resolution is
|
||||
matched by knowing only *who* is batting.
|
||||
|
||||
Within strata of similar-base-rate players the model still resolves **0.01908** —
|
||||
58% of its total, and **higher than any other stat's entire model resolution.**
|
||||
So rbi does carry genuine within-role discrimination on top of the role effect.
|
||||
|
||||
### Finding 2 — on three of four stats the model is beaten by "he's a .270 hitter"
|
||||
|
||||
| stat | model | player base rate alone | |
|
||||
|---|---|---|---|
|
||||
| hits | 0.00252 | **0.00446** | base-rate-only resolves **1.8×** the model |
|
||||
| total_bases | 0.00442 | **0.01331** | **3.0×** |
|
||||
| runs | 0.00130 | **0.00262** | **2.0×** |
|
||||
| rbi | **0.03268** | 0.01167 | model wins, 2.8× |
|
||||
|
||||
Even allowing that the naive forecast peeks at the window, a **1.8–3.0× gap is
|
||||
not explained by that advantage alone.** The served counter — a frequency over
|
||||
the line, blended with the last five games, nudged by opponent rank and home/away
|
||||
— appears to **destroy discrimination relative to the player's own rate.** The
|
||||
recency blend and the ±0.03/±0.015 nudges move predictions in ways that do not
|
||||
track outcomes.
|
||||
|
||||
**rbi is the one stat where the model beats the naive baseline.**
|
||||
|
||||
### Finding 3 — lineup slot out-resolves the model on THREE stats
|
||||
|
||||
| stat | model | slot alone |
|
||||
|---|---|---|
|
||||
| total_bases | 0.00442 | **0.03448** (7.8×) |
|
||||
| runs | 0.00130 | **0.01156** (8.9×) |
|
||||
| rbi | 0.03268 | **0.03608** (1.1×) |
|
||||
| hits | 0.00252 | 0.00100 (model wins) |
|
||||
|
||||
**Hits is the only stat where batting order carries less than the model** — which
|
||||
makes sense: a hit is a hit whether you bat first or ninth, but runs, RBI and
|
||||
total bases all scale with opportunity.
|
||||
|
||||
---
|
||||
|
||||
## PHASE 2 — which world
|
||||
|
||||
**All three are partly true, in measured proportions:**
|
||||
|
||||
- **WORLD A — rbi resolution is real and role-driven: ~90% TRUE.** Slot alone
|
||||
(0.03608) covers the model's entire rbi resolution. It is real, it is
|
||||
contextual rather than skill-based, and 58% survives within similar-player
|
||||
strata as genuine discrimination.
|
||||
- **WORLD B — base-rate-spread artefact: ~36% TRUE for rbi.** Player identity
|
||||
alone accounts for about a third. Not the main story for rbi — but for
|
||||
**hits, TB and runs it is the whole story and then some**, since base rate
|
||||
alone out-resolves the model on all three.
|
||||
- **WORLD C — hits is intrinsically compressed: TRUE, and the ceiling is low.**
|
||||
Total available spread resolution for hits is 0.00446 — **1.8% of variance even
|
||||
from a forecast that has seen the answers.** Perfect factors cannot make hits a
|
||||
high-resolution grade.
|
||||
|
||||
---
|
||||
|
||||
## PHASE 3 — the roadmap-deciding log
|
||||
|
||||
**The next arc is not "strengthen hits factors."** Hits has the lowest available
|
||||
resolution on the board (1.8% ceiling from an oracle-ish baseline) and last
|
||||
order's wiring already lifted it to 1.39% of a 1.8% ceiling. There is very little
|
||||
left there.
|
||||
|
||||
**Named first factor order for next session: LINEUP SLOT / RISP OPPORTUNITY on
|
||||
rbi**, through the two-part gate.
|
||||
|
||||
- The input is **already ingested and prod-verified** (`lineup_context` batting
|
||||
order, `hitter_opportunity` RISP share, S89).
|
||||
- Its resolution is **measured, not hypothesised**: 0.03608 slot-only on rbi,
|
||||
0.03448 on TB, 0.01156 on runs.
|
||||
- The causally-correct unit is **plate appearances with runners on**, which is
|
||||
what RISP share measures directly — the crude version is the slot integer.
|
||||
- It must clear the two-part gate like anything else. Measured availability is
|
||||
not a pass.
|
||||
|
||||
**Second, and higher-value than either:** the counter is out-resolved by a player
|
||||
frequency table on three of four stats. That is not a factor problem — it is a
|
||||
defect in the champion. **Diagnosing whether the recency blend and the
|
||||
±0.03/±0.015 nudges are destroying discrimination is the biggest single lever
|
||||
this decomposition found**, and it costs nothing to test: they are three lines in
|
||||
`probabilityEstimator`.
|
||||
|
||||
**The hits transmission win stands.** The conduit is real and permanent —
|
||||
sign-verified, 75% coverage. This order changes only *which stat* has the most
|
||||
worth flowing through it.
|
||||
|
||||
---
|
||||
|
||||
## Invariants
|
||||
|
||||
Diagnostic only. No factor wired, no serving path changed, no calibration refit,
|
||||
`p_win` untouched, all frozen modules byte-identical including the hits path from
|
||||
`43f65d3`. No Bonferroni slot — this is resolution accounting, not a causal claim.
|
||||
Reference in New Issue
Block a user