Method
How a price becomes a probability you can check.
67,129 matches40 competitions2021-01-02 to 2026-10-16
Two halves, one dataset
The same 67,129 matches feed both. The value half asks whether the model can out-forecast the closing price; the answer is no, decisively, and that answer is what licenses the confidence half to treat the closing price as its best input rather than its opponent.
- Fetch. Results and closing odds for every competition covered, and current prices for the fixtures still to come, refreshed each day.
- De-vig. Consensus prices, power method. It removes margin from longshots rather than spreading it evenly, which halves the calibration error against the usual proportional scaling.
- Reprice the market. Fit a pair of Poisson means and a Dixon-Coles rho until the score matrix reproduces the quoted 1X2 and totals. Every market nobody quotes — BTTS, Over 1.5, team totals, handicaps — is then read off that same matrix, so the whole card is internally consistent.
- Fuse a model in, at 10%. Joint-MLE attack and defence with time decay, rated on goals and shots on target. Measured: 0.90 beats both 0.75 and pure market, paired by match at p = 2.3e-07.
- Calibrate. Isotonic regression, one curve per line — over 2.5, home over 1.5, over 9.5 corners — fitted only on earlier matches. It barely touches the market-anchored markets and does the most for corners, which have the least anchor.
- Check, then cap. Every market is trusted only as far as its own out-of-sample record supports.
What it cannot do
- No injuries, lineups, weather, motivation or fixture congestion. The model sees goals, shots on target and corners; the price sees everything else, which is most of why the price carries 90% of the weight.
- Corners have no price of their own. The market reaches them only through how open it expects the match to be, and they are trusted only as high as their own record supports.
- A team with no history in its division is carried almost entirely by the price, and is flagged on the card.
- The card is priced on the line of the day it is built, a day or two before kick-off, and everything above was checked on closing prices, which know more. Calibrating on the earlier prices instead was tried and bought nothing: they lean the same way, and only know less.
- Accumulator maths assumes independent fixtures. Legs from one match are not independent, which is why the tray warns when you tick two.
- Nothing here is a claim of profit.
Data
2021-01-02 to 2026-10-16. Closing prices throughout the history — the sharpest number a bookmaker publishes. Backtesting against opening prices flatters a model that is really just slower than the market. The card itself is priced on the current line.
| Competition | Matches | From | To |
|---|---|---|---|
| USA-MLS | 2,978 | Apr 2021 | Oct 2026 |
| ELC | 2,879 | Aug 2021 | Oct 2026 |
| EL2 | 2,874 | Aug 2021 | Oct 2026 |
| ENL | 2,869 | Aug 2021 | Oct 2026 |
| EL1 | 2,862 | Aug 2021 | Oct 2026 |
| SD | 2,409 | Aug 2021 | Oct 2026 |
| ARG-LIGAPROF | 2,404 | Jul 2021 | Oct 2026 |
| BRA-SERIEA | 2,311 | Jan 2021 | Oct 2026 |
| PD | 1,978 | Aug 2021 | Oct 2026 |
| MEX-LIGAMX | 1,968 | Jan 2021 | Oct 2026 |
| PL | 1,960 | Aug 2021 | Oct 2026 |
| SA | 1,960 | Aug 2021 | Oct 2026 |
| SB | 1,960 | Aug 2021 | Oct 2026 |
| ROU-SUPERLIG | 1,888 | Jan 2021 | Oct 2026 |
| JPN-J1LEAGUE | 1,846 | Feb 2021 | Oct 2026 |
| FL2 | 1,822 | Jul 2021 | Oct 2026 |
| TSL | 1,784 | Aug 2021 | Oct 2026 |
| POL-EKSTRAKL | 1,746 | Jan 2021 | Oct 2026 |
| FL1 | 1,732 | Aug 2021 | Oct 2026 |
| BJL | 1,619 | Jul 2021 | Oct 2026 |
| DED | 1,602 | Aug 2021 | Oct 2026 |
| PPL | 1,601 | Aug 2021 | Oct 2026 |
| BL2 | 1,593 | Jul 2021 | Oct 2026 |
| BL1 | 1,575 | Aug 2021 | Oct 2026 |
| CHN-SUPERLEA | 1,418 | Apr 2021 | Oct 2026 |
| SWE-ALLSVENS | 1,390 | Apr 2021 | Oct 2026 |
| NOR-ELITESER | 1,383 | May 2021 | Oct 2026 |
| RUS-PREMIERL | 1,236 | Feb 2021 | Aug 2026 |
| GSL | 1,231 | Sep 2021 | Oct 2026 |
| SWZ-SUPERLEA | 1,222 | Jan 2021 | Oct 2026 |
| SPL | 1,188 | Jul 2021 | Oct 2026 |
| AUT-BUNDESLI | 1,143 | Jan 2021 | Oct 2026 |
| DNK-SUPERLIG | 1,138 | Feb 2021 | Oct 2026 |
| IRL-PREMIERD | 1,072 | Mar 2021 | Oct 2026 |
| FIN-VEIKKAUS | 1,006 | Apr 2021 | Oct 2026 |
| SC3 | 950 | Jul 2021 | Oct 2026 |
| SC2 | 949 | Jul 2021 | Oct 2026 |
| SCH | 948 | Jul 2021 | Oct 2026 |
| ARG-COPADELA | 812 | Jan 2021 | May 2024 |
| SWZ-CHALLENG | 2 | May 2021 | May 2021 |