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:
Kev
2026-08-07 03:09:44 -04:00
parent 43f65d30cb
commit 65ca6493db
2 changed files with 325 additions and 0 deletions
+141
View File
@@ -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.83.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.