Advanced guide · 6 min read
How to build a betting model (and why most don't beat the market)
Spreadsheet or Python, the idea is the same: estimate probabilities, compare them with the bookmaker's prices, bet where your number is higher. This guide walks through the steps honestly: where the data comes from, which features matter, how to check calibration, the backtesting traps that make almost every model look good, and how to measure it against closing prices. It ends with why, for most beginners, a method that needs no model is the more realistic start.
Updated 22 October 2026
Contents
What a betting model does
A betting model turns information (past results, shots, line-ups, prices) into a probability for each outcome. You only bet when your probability is clearly higher than the one implied by the price. That gap is your expected value:
EV per €1 = your probability × odds − 1
If your model gives a home win 50% and the bookmaker offers 2.20, the EV is 0.50 × 2.20 − 1 = +10%. The catch: this is only true if your 50% is right. If the true chance is 44%, the EV is 0.44 × 2.20 − 1 = −3.2%. Everything in this guide is about finding out which of the two you are dealing with.
Step 1: data
- Results and prices: football-data.co.uk offers free CSV files with results and pre-match prices from several bookmakers for many leagues, going back many seasons. That is enough for a first model.
- Shot data and expected goals: more informative than goals, but often licensed or only partly available for free. Check the terms of use before you scrape anything.
- Timestamps: note when each price was recorded. A model compared with closing prices tells you something different from one compared with prices from two days earlier.
Clean the data before modelling: promoted teams, renamed clubs, abandoned matches, and matches played behind closed doors all need deciding on.
Step 2: features and the model
Start simple. A good first model for football is the Poisson model: attack and defence strength per team, home advantage, more weight on recent matches. From there people add:
- rolling averages of expected goals for and against;
- rest days and fixture congestion;
- an Elo-style rating that updates after each match;
- the bookmaker's own price as an input (it contains a lot of information).
For the method, logistic regression or Poisson regression is a solid baseline. Machine learning (gradient boosting, neural networks) can help with many features, but it also overfits more easily. A complex model that is not clearly better than a simple one in out-of-sample tests is not better.
Step 3: calibration
Accuracy ("how often did the favourite of my model win") is the wrong yardstick for betting. What matters is calibration: of all the times your model says 40%, does the outcome happen about 40% of the time? Walsh and Joshi (2024) found that selecting models by calibration rather than accuracy produced much better betting returns in their NBA tests.
Two common measures:
- Brier score: the average of (probability − outcome)². A forecast of 0.60 for a win that happens scores (0.60 − 1)² = 0.16; if it doesn't happen, (0.60 − 0)² = 0.36. Lower is better.
- Log loss: −ln(probability given to what actually happened). It punishes confident mistakes hard: giving 5% to an outcome that happens costs −ln(0.05) ≈ 3.0.
For ordered football outcomes (home, draw, away) the ranked probability score is often used (Constantinou and Fenton, 2012). Always compare your score with the score of the bookmaker's margin-free prices on the same matches. If the market scores better, your model has no edge on average.
Step 4: backtesting without fooling yourself
A backtest replays your strategy on past matches. Almost every model looks profitable in a careless backtest. The three classic traps:
- Look-ahead bias: using information that was not available at the time of the bet. Examples: season-end averages used for a match in October, closing prices used as if you could have bet them, or a team rating calculated with later results.
- Overfitting: tuning the model until it fits the past perfectly. Bailey and colleagues (2014) show how quickly the best of many tested strategies looks good by chance alone.
- Unrealistic execution: assuming you get the best price at every bookmaker, with unlimited stakes, and no account limits.
With 1,000 bets at odds of about 2.00, the standard deviation of the return on stake is roughly 0.5 × 2.00 ÷ √1,000 ≈ 3.2 percentage points. If you test 50 variants of a strategy that each truly lose 3%, the best of them will typically show about −3% + 2.25 × 3.2% ≈ +4%, by luck alone.
The remedy: split the data by time. Build the model on older seasons, choose settings on a validation season, and test once on the most recent season you have not touched. Then go on paper-trading in real time before you risk money. Betting variance explains how many bets you need before a result means anything.
Step 5: measure against the closing line
Profit alone is a noisy signal. A faster test is closing line value (CLV): did you get a better price than the final price before kick-off? If you bet at 2.20 and the price closes at 2.00, your CLV is 2.20 ÷ 2.00 − 1 = +10%. Closing prices at sharp bookmakers are the best available estimate of the true probability, so a model that consistently beats them probably has an edge. One that consistently gets worse prices probably doesn't, even if it is up after 200 bets.
How realistic is success?
Be honest with yourself here. The research shows that it is possible, and that it is hard:
- Hubáček, Šourek and Železný (2019) reported a profit in their basketball tests mainly after deliberately decorrelating their model from the bookmaker's own prices, and their returns were small and varied a lot.
- Kaunitz, Zhong and Kreiner (2017) found a strategy that was profitable in simulation and in real betting, and their accounts were limited by several bookmakers within months.
- Market efficiency studies show that closing prices in major football leagues are hard to beat after the margin.
Even a good model meets practical limits: soft bookmakers restrict winning customers, and sharp ones offer prices that are already close to fair. A realistic expectation for a first model is a learning project, not an income.
The no-model alternative
For beginners there is a simpler starting point that needs no forecast at all: sure betting. Instead of claiming to know the probability better than the market, you use the fact that different bookmakers sometimes price the same match so differently that the best prices add up to less than 100%. You back every outcome, and the result of the match does not matter, as long as all bets stand at the planned odds.
Sure bets have their own risks (prices move, bets get voided, accounts get limited), and the margins are small. But you can check every number yourself before you bet. Value bets, which do rely on a probability estimate, are coming soon to ArbVantage; sure bets and middles are available today.
Frequently asked questions
How do I build my own betting model?
Collect results and prices, start with a simple model such as Poisson or logistic regression, check its calibration against the bookmaker's margin-free prices, backtest it on seasons you did not use to build it, and then paper-trade it while tracking closing line value.
Can I build a betting model in Excel?
Yes. A Poisson model with attack and defence ratings fits in a spreadsheet. Python or R make it easier to handle many seasons, test variants and avoid copy errors, but the method is the same.
What is the biggest mistake in backtesting a betting model?
Look-ahead bias and overfitting. Using information that was not available at the time of the bet, or testing many variants and keeping the best, makes almost any model look profitable on paper.
How many people succeed with their own betting model?
There are no reliable figures, but research shows it is hard. Even studies that found an edge reported small, volatile returns, and one research team had its accounts limited within months.
Is there a way to bet without a model?
Sure betting needs no forecast. It uses price differences between bookmakers and covers every outcome. It still carries risks such as price changes, voided bets and account limits.
Sources
- Hubáček, O., Šourek, G. and Železný, F. (2019): Exploiting sports-betting market using machine learning. International Journal of Forecasting 35(2), 783–796.
- Walsh, C. and Joshi, A. (2024): Machine learning for sports betting: should model selection be based on accuracy or calibration? Machine Learning with Applications 16, 100539.
- Kaunitz, L., Zhong, S. and Kreiner, J. (2017): Beating the bookies with their own numbers, and how the online sports betting market is rigged. arXiv:1710.02824
- Bailey, D. H., Borwein, J. M., López de Prado, M. and Zhu, Q. J. (2014): Pseudo-mathematics and financial charlatanism: the effects of backtest overfitting on out-of-sample performance. Notices of the American Mathematical Society 61(5), 458–471.
- Constantinou, A. C. and Fenton, N. E. (2012): Solving the problem of inadequate scoring rules for assessing probabilistic football forecast models. Journal of Quantitative Analysis in Sports 8(1).
- Dixon, M. J. and Coles, S. G. (1997): Modelling association football scores and inefficiencies in the football betting market. Journal of the Royal Statistical Society, Series C 46(2), 265–280.
- football-data.co.uk: results and odds data
As of October 2026. The figures in the examples are illustrations; the luck estimate assumes independent bets at odds of about 2.00.
Not betting, legal or tax advice. 18+. Betting involves risk and no profit is guaranteed: odds change, bets get voided and accounts get limited. Only bet money you can afford to lose. Our responsible gambling page lists free help, and the disclaimer applies.