Every model version we have trained, with its out-of-time score against the closing market. A new version only ships if it earns its place here — more features never promote a model automatically.
| Model | Features | Trained | Holdout RPS | Market RPS | Gap vs market | Matches (n) | Calibration (ECE) |
|---|---|---|---|---|---|---|---|
| ensemble-v2lhClub | v2lh | 11 Oct 2026 | 0.2291 | — | — | 74 | 0.182 |
| ensemble-v2lhClubChampion | v2lh | 11 Oct 2026 | 0.2094 | — | — | 554 | 0.076 |
| btts-club-championClubChampion | v2 | 12 Oct 2026 | 0.2407 | — | — | 557 | 0.051 |
| ou25-club-championClubChampion | v2 | 12 Oct 2026 | 0.2442 | — | — | 557 | 0.094 |
| wc-baselineNational | baseline | 11 Oct 2026 | — | — | — | — | — |
Gap = holdout RPS − market RPS on the same matches. Negative means the model scored better than the closing line out-of-time; it turns green only when the significance test confirms it beat the market — a small gap on noise stays neutral. A version must clear this bar to be promoted; a blank gap means we have no out-of-time market comparison for it yet. Matches (n) is how many out-of-time matches sit behind the row's comparison — treat a gap on a handful of matches as noise, not signal.