Betting markets as forecasts
Betting odds are prices on uncertain outcomes, so they're a good place to test market efficiency with a lot of data. My day job is in sports trading, and I ran two tests on public football prices.
- Built with
- Python, NumPy, SciPy, pandas
- Data
- Football-Data.co.uk results and odds, 2000 to 2026
- Method
- Walk-forward Dixon–Coles model, returns by price band
Can a model beat the price?
I fitted the Dixon–Coles model to past Premier League and Championship results, refitted it every week on earlier matches only, and compared its forecasts with Bet365's on 2,660 matches from 2019/20 to 2025/26.
Bet365 was more accurate in all seven seasons, by 0.016 in log loss (95% interval 0.010 to 0.023). Averaging the model with Bet365 made Bet365 worse, so the model held nothing the price didn't already know.
Are all prices equally fair?
Backing every outcome in 235,796 matches, the loss grew with the odds: −0.5% at 1.01 to 1.25 and −40.6% at 13 or longer. That's the favourite-longshot bias, and it's the question I'd ask of any market: where is the mispricing, and is it big enough to cover the costs?