report: p_win recalibration holdout — MLB qualifies on isotonic, WNBA abstains

Measure-only. p_win not flipped live, no grade rebuilt, no calibrator deployed.
Per the doctrine, MLB and WNBA were fitted, selected and judged as SEPARATE
models — and they reach opposite verdicts. No global instrument was fitted.

METHOD: time-forward split per sport (earlier fits, later proves). Both
instruments fitted on TRAIN only — single-parameter Platt and
isotonic-with-pooling. Inputs p_win + outcome only; no market field, no closing
value, no lookahead. Nothing about edge/CLV/beat-the-close enters any pass/fail
line.

MEASUREMENT CORRECTION made mid-run: the first pass reported mean|p - outcome|
(~0.46-0.51), which is NOT calibration — it is noise-dominated individual error
on 0/1 rows and would have made every instrument look identical. Reliability is
only meaningful on BUCKETS (bucket mean predicted vs bucket actual rate,
n-weighted), the metric T0 used. All reported numbers use the corrected metric.

HOLDOUT RELIABILITY (lower better): MLB n=119/4 buckets — raw 0.1038, Platt
0.1120, ISOTONIC 0.0939. WNBA n=93/3 buckets — raw 0.1322, Platt 0.0491,
isotonic 0.0667.
HOLDOUT RESOLUTION: MLB raw 0.1388 -> Platt 0.1284 -> isotonic 0.1225.
WNBA raw -0.1201 -> Platt +0.1269 -> isotonic +0.0322.
Fitted Platt: MLB a=-0.381 b=+0.705; WNBA a=+0.040 b=-0.081.

MLB QUALIFIES, MODESTLY — instrument selected BY HOLDOUT, not assumed: isotonic
beats both raw and Platt, and Platt actually made MLB worse. Reliability improves
0.1038 -> 0.0939 (~10% relative, real but modest) and resolution SURVIVES
(0.1388 -> 0.1225, not crushed). Both Mandate-3 conditions hold.

WNBA ABSTAINS — its Platt result is the best number in the report and is REJECTED
as a fake win. The fitted slope is b = -0.081, negative and near zero, so
sigmoid(0.040 - 0.081*logit p) is nearly constant at ~0.51 for every input: it
"calibrates" by discarding the prediction and emitting the base rate, which is
exactly the failure Mandate 3 pre-registered. Its apparent resolution gain
(-0.120 -> +0.127) is the sign flip, not skill — it would serve the opposite of
its own forecast, fitted on n~96 of anti-signal. Isotonic says the same quietly
(resolution collapses to +0.032).

HONEST CEILING: MLB is a usable-but-unimpressive forecaster (holdout resolution
~0.12, reliability ~0.094, n=119); WNBA has no honest forecast today. Holdout n
and bucket counts (4 and 3) suffice to reject WNBA and prefer isotonic for MLB,
NOT to certify a letter ladder, and the T0 pathology is reduced rather than cured.

CANNOT DETERMINE: per-archetype calibration (Mandate 3d) — bucket n falls below
the reporting floor once split by sport AND archetype on 442 rows.

Queries committed at scripts/pwin-calibration-holdout.sql.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
This commit is contained in:
Kev
2026-07-31 21:26:21 -04:00
parent 249b3e8235
commit 6d87d7a33c
2 changed files with 135 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
-- p_win RECALIBRATION — per-sport, time-forward holdout. Measure-only.
-- specs/pwin-recalibration-holdout.md. NOTE: reliability is measured on BUCKETS
-- (predicted vs actual rate, n-weighted). mean|p-outcome| on 0/1 rows is NOT
-- calibration — it is noise-dominated individual error.
with r as (
select sport, game_date, p_win::numeric p, (outcome='hit')::int won,
ntile(2) over (partition by sport order by game_date) half
from ledger_entries
where user_id is null and outcome in ('hit','miss') and p_win is not null
), tagged as (
select *, case when half=1 then 'train' else 'holdout' end split,
width_bucket(p,0.1,1.0,5) bkt, ln(p/(1-p)) lg from r
), tb as ( -- TRAIN buckets = the fit
select sport, bkt, count(*) n, avg(lg) mean_lg, avg(won::numeric) rate
from tagged where split='train' group by sport, bkt having count(*) >= 8
), platt as (
select sport,
regr_slope(ln(greatest(least(rate,.98),.02)/(1-greatest(least(rate,.98),.02))), mean_lg) b,
regr_intercept(ln(greatest(least(rate,.98),.02)/(1-greatest(least(rate,.98),.02))), mean_lg) a
from tb group by sport
), hb as (
select h.sport, h.bkt, count(*) n, avg(h.p) pred_raw,
avg(1/(1+exp(-(pl.a+pl.b*h.lg)))) pred_platt,
avg(coalesce(tb.rate,h.p)) pred_iso, avg(h.won::numeric) actual
from tagged h join platt pl on pl.sport=h.sport
left join tb on tb.sport=h.sport and tb.bkt=h.bkt
where h.split='holdout' group by h.sport,h.bkt having count(*) >= 8
)
select sport, sum(n) holdout_n, count(*) buckets,
sum(n*abs(pred_raw-actual))/sum(n) raw_reliability_dev,
sum(n*abs(pred_platt-actual))/sum(n) platt_reliability_dev,
sum(n*abs(pred_iso-actual))/sum(n) isotonic_reliability_dev
from hb group by sport order by sport;
-- Resolution (ordering survives?) is the corr(pred, won) variant of the same CTEs.
+101
View File
@@ -0,0 +1,101 @@
# RECALIBRATE p_win — HOLDOUT REPORT (measure-only; NOTHING DEPLOYED)
2026-07-31. p_win not flipped live, no grade rebuilt, no calibrator shipped.
Per PART A doctrine: MLB and WNBA are treated as SEPARATE MODELS throughout —
fit separately, selected separately, judged separately, and they reach opposite
verdicts. No global instrument was fitted.
## METHOD
Time-forward split PER SPORT (earlier half fits, later half proves — never the
same rows). Both instruments fitted on TRAIN only: single-parameter **Platt**
(`p_cal = sigmoid(a + b·logit p)`, a/b from a weighted fit of TRAIN bucket
empirical-logit on bucket mean-logit) and **isotonic-with-pooling** (TRAIN bucket
rate applied to HOLDOUT by bucket, min 8 per bucket). Inputs: `p_win` + `outcome`
only — no market field, no closing value, no lookahead.
## ⚠️ A MEASUREMENT CORRECTION I MADE MID-RUN
My first pass reported `mean|p outcome|` (~0.460.51). **That is not
calibration** — it is individual-level error on 0/1 outcomes, dominated by
irreducible noise, and it would have made every instrument look identical and
useless. Reliability is only meaningful **on buckets**: bucket mean *predicted*
vs bucket *actual rate*, n-weighted — the same metric T0 used. All numbers below
are the corrected, bucketed metric.
## RESULTS ON HOLDOUT
**Reliability** (n-weighted |predicted actual| across holdout buckets; lower better)
| sport | holdout n | buckets | raw | Platt | isotonic |
|---|---|---|---|---|---|
| **MLB** | 119 | 4 | 0.1038 | 0.1120 | **0.0939** |
| **WNBA** | 93 | 3 | 0.1322 | **0.0491** | 0.0667 |
**Resolution** (does the ordering survive? Pearson r with outcome, holdout)
| sport | raw | Platt | isotonic |
|---|---|---|---|
| **MLB** | 0.1388 | 0.1284 | **0.1225** |
| **WNBA** | 0.1201 | +0.1269 | +0.0322 |
Fitted Platt parameters: **MLB a=0.381, b=+0.705** · **WNBA a=+0.040, b=0.081**.
---
# VERDICT — MLB: QUALIFIES, MODESTLY. INSTRUMENT = ISOTONIC.
**Selected by holdout, not assumed** (the order was right to forbid assuming
Platt): isotonic **0.0939** beats raw 0.1038 and beats Platt 0.1120 — Platt made
MLB *worse*.
- **(a) Reliability: improves.** 0.1038 → 0.0939, ~10% relative. **Real but
modest** — this does not make an 84%-that-hits-65% into a truthful forecast; it
shaves the exaggeration.
- **(b) Resolution: SURVIVES.** 0.1388 → 0.1225. Slightly lower (expected — a
monotone map preserves rank; the Pearson dip is the non-linearity), and
critically **it is not crushed to zero**. High p_win still hits more than low.
- Both (a) and (b) hold → **MLB qualifies to be graded** in a later, separately
gated order.
# 🔴 VERDICT — WNBA: ABSTAINS. ITS PLATT "WIN" IS A FAKE WIN.
WNBA's Platt reliability (0.0491) is the best number in this report **and must be
rejected**, exactly per Mandate 3.
**Why it is fake:** the fitted slope is **b = 0.081 — NEGATIVE and near zero**.
So `sigmoid(0.040 0.081·logit p)` is **nearly constant at ≈0.51 for every
input**. It "calibrates" by **discarding the prediction and emitting the base
rate**. That is precisely the failure Mandate 3 pre-registered: *"a model
calibrated by crushing everything to the base rate has NO resolution → FAKE win
→ reject."*
The apparent resolution improvement (0.120 → +0.127) is the **sign flip**, not
skill: a negative slope inverts the ordering, so the model would be serving the
opposite of its own forecast — fitted on **n≈96** of anti-signal. Isotonic tells
the same story more quietly (resolution collapses to **+0.032**, i.e. no
ordering).
**WNBA cannot be made honest AND predictive on this data. It abstains.** Per
Mandate 4 that is two models — one ready, one not — not one model half-working.
---
# THE HONEST CEILING, STATED PLAINLY
MLB's forecast can be made *less* dishonest and keeps its (modest) ordering:
holdout resolution ≈ **0.12**, reliability ≈ **0.094** on **n=119**. That is a
usable-but-unimpressive forecaster, not a sharp one. WNBA has no honest forecast
at all today.
**Cautions carried forward:** holdout n is 119/93 with only 4 and 3 usable
buckets — enough to reject WNBA and to prefer isotonic for MLB, **not** enough to
certify a letter ladder. And the T0 pathology is only *reduced*, not cured: the
top MLB buckets remain the thinnest and the most exaggerated.
**Nothing about market edge, CLV, or beating the close appears in any pass/fail
line above** — as the order required. The instruments were judged only on whether
the forecast tells the truth and still ranks.
## TAGS
VERIFIED: per-sport time-forward holdout results; isotonic beats Platt and raw on
MLB; WNBA's Platt win is a base-rate collapse with a negative slope.
CANNOT DETERMINE: per-archetype calibration (Mandate 3d) — bucket n falls below
the reporting floor once split by sport AND archetype on 442 rows.
**DEPLOYED: NOTHING.** Queries committed at `scripts/pwin-calibration-holdout.sql`.