Track record
How the models have done on matches they hadn't seen
Two engines, evaluated separately. The research model's results don't validate the app engine, and the other way round.
Archived reference model
Reference research model · pitchcast-research-v1
Run by the owner in Python on OpenFootball CC0 data. Settings (180-day half-life, ridge 12, low-score correction on) were chosen on 2024-25; 2025-26 stayed untouched until the final test. Refit: first calendar day of each month; exclude all training matches on or after cutoff, predict targets on or after cutoff.
| Model | Matches | Log loss | Brier | Acc. |
|---|---|---|---|---|
| Research model (selected) | 380 | 1.0374 | 0.6248 | 47.6% |
| League base rate | 380 | 1.0829 | 0.6554 | 42.6% |
| Slow decay, no low-score correction | 380 | 1.0363 | 0.6238 | 47.4% |
| Same model, no home advantage | 380 | 1.0470 | 0.6317 | 45.8% |
Held-out 2025-26, 380 matches. The slow-decay variant without the low-score correction scores slightly better here, so we make no claim that faster form weighting or the correction helps in general. Reported 6 Oct 2026, 16:41 UTC by owner (reference research model, Python).
Server engine used for new runs
Pitchcast app engine · pc-dc-1.0.0
The xG-assisted model blends historical chance quality with goals. Its 75% xG weight was selected on 2024/25 before evaluating the later seasons. Across 440 later-season matches, accuracy rose from 46.8% to 48.4%; log loss improved from 1.0485 to 1.0453. The gain is modest: the 95% week-bootstrap interval for the log-loss change includes zero. This is retrospective testing, not proof of future accuracy.
Executed 6 Oct 2026, 16:42 UTC · data through 2026-09-20
| Model | Matches | Log loss | Brier | Acc. |
|---|---|---|---|---|
| Elo | 430 | 1.0405 | 0.6243 | 47.4% |
| Plain Poisson | 430 | 1.0510 | 0.6332 | 47.9% |
| League base rate | 430 | 1.0853 | 0.6572 | 41.9% |
| Pitchcast DC (tuned) | 430 | 1.0488 | 0.6321 | 47.0% |
By season
2024/25 (tuning season)
| Model | Log loss | Brier | Acc. |
|---|---|---|---|
| Elo | 0.9945 | 0.5923 | 53.2% |
| Plain Poisson | 0.9881 | 0.5906 | 52.4% |
| League base rate | 1.0847 | 0.6581 | 40.8% |
| Pitchcast DC | 0.9776 | 0.5844 | 52.4% |
2025/26 (later-season test)
| Model | Log loss | Brier | Acc. |
|---|---|---|---|
| Elo | 1.0382 | 0.6228 | 47.9% |
| Plain Poisson | 1.0494 | 0.6322 | 47.9% |
| League base rate | 1.0822 | 0.6550 | 42.6% |
| Pitchcast DC | 1.0500 | 0.6331 | 47.4% |
2026/27 (later-season test)
| Model | Log loss | Brier | Acc. |
|---|---|---|---|
| Elo | 1.0579 | 0.6357 | 44.0% |
| Plain Poisson | 1.0628 | 0.6410 | 48.0% |
| League base rate | 1.1092 | 0.6737 | 36.0% |
| Pitchcast DC | 1.0400 | 0.6242 | 44.0% |
2026/27 contains only a few rounds — treat it as noisy.
Calibration
All home, draw and away probabilities from later-season test matches, in 10% bins. Well calibrated means on the diagonal. Small bins are noisy.
| Bin | n | Pred. | Obs. |
|---|---|---|---|
| 0–10% | 68 | 5.2 | 14.7 |
| 10–20% | 108 | 15.2 | 14.8 |
| 20–30% | 566 | 24.5 | 27.7 |
| 30–40% | 157 | 35.2 | 36.9 |
| 40–50% | 136 | 45.0 | 37.5 |
| 50–60% | 128 | 54.7 | 49.2 |
| 60–70% | 91 | 64.4 | 56.0 |
| 70–80% | 36 | 73.3 | 66.7 |
| 80–90% | 0 | — | — |
| 90–100% | 0 | — | — |
Definitions & protocol
Log loss — Mean negative natural log of the probability assigned to the observed result.
Brier — Multiclass Brier = mean over matches of Σ over {H,D,A} of (p − o)²; range 0 (perfect) to 2.
Accuracy — share of matches where the most likely outcome happened. Secondary: it ignores confidence.
Data — Premier League + Championship regular-season results from OpenFootball (CC0) commit e6744429ee395bc86f247348c6184bb08d4eb361, 2021/22 onward.
Tuned settings — decay ξ = 0.001/day, ridge = 0.05, window = 365 days.
Baselines — Elo: K=20, home +60, untuned; plain Poisson: no decay or low-score correction, two-season window; base rate: trailing PL home/draw/away frequencies.
Player data — None used — no player, injury or lineup information enters historical or live predictions.
Odds — No bookmaker odds benchmark: timing/licence for production use not established.