Reproducible research Pre-registered negative result

How much predictive signal is there in cricket beyond match state?

A calibrated, leakage-audited benchmark on 16,754 matches asks whether the two features practitioners reach for next — player identity and match-level conditions — add anything over a strong state model. Measured under an evaluation protocol fixed before the test split was ever read.


Where the recoverable per-ball signal comes from

t20 · nats above the marginal floor
match state — 92.8% · 0.0702 nats (test) player identity — 6.7% · 0.0050 (test) conditions — 0.5% · 0.0004 (validation)

Match state is saturating. A gradient-boosted model of within-match state captures almost all of the recoverable-above-marginal structure. The two obvious enrichments are the near-invisible slivers on the right — and neither clears the bar.

Player identity

Ambiguous
+0.31%

Empirical-Bayes shrunk batter + bowler effects on top of state. Real (the CI excludes zero) but below the 1% materiality bar — and it slightly worsens dot/boundary calibration.

ΔNLL −0.00504 [−0.00561, −0.00449] · 0.0073 bits/ball · test

Match conditions

Negligible
+0.024%

A strictly causal per-match latent (the estimate for ball t uses only prior balls of the same match). An order of magnitude smaller; frozen at validation before its one-time test evaluation.

0.0006 bits/ball · validation only · partial (C1)

The baseline ladder

State does the work

Per-ball outcome NLL on the test split (t20, 1,493 matches), lower is better, with 95% match-level paired-bootstrap intervals. (This is the paper's 11-class task; the companion win-probability leaderboard is binary, so its NLLs sit near 0.49 — a different scale, not a discrepancy.)

modeltest NLL95% CI
B0 — marginal1.685[1.679, 1.690]
B1 — bucketed table1.648[1.642, 1.653]
B2 — regularized logistic1.629[1.623, 1.634]
B3 — gradient-boosted state1.614[1.609, 1.620]

Why the numbers can be trusted

Adversarial to itself

The instrument was built to catch its own mistakes before it could flatter them.

16,754 matches · 4.75M deliveries 80/10/10 temporal split match-level paired bootstrap · 10k shuffled-identity + shuffled-target canaries calibration fit on val only evaluation protocol frozen pre-test test split touched once

How it's built

One pipeline, one source of truth

A deterministic state core feeds an evaluation harness; every figure, table, and leaderboard number is regenerated from a single JSON — byte-identically.

Cricsheet JSONball-by-ball
Deterministic state coreδ transition · quarantine
evalkit harnessladder · canaries · §6 rule
summary.json→ leaderboard · figures · paper

Reproducibility

Deterministic and hash-pinned

corpus
c08e4eba45ff7a71a51c4490cfe159a2ca34a7e5382bbc902041d147a11a6781
labels
e11bf9c83276d10871b401263c351d7e4d93da85183b3c1d141fefbdad20324f
seed
1337 end-to-end · bootstrap 90210
$ uv sync
$ uv run pytest -m "not corpus"
$ uv run python scripts/generate_figures.py # figures from summary.json