Machine learning football predictions: does the algorithm matter?
Published
Almost every prediction site advertises machine learning football predictions, usually as “AI-powered” somewhere above the fold. The phrase is doing marketing work, not statistical work: it describes the shape of the code, not the quality of the output. A gradient-boosted tree and a nineteenth-century goal distribution are both perfectly capable of producing well-calibrated probabilities, and both are perfectly capable of producing nonsense. This article is about what actually changes when you swap one for the other — and about the far more important things that don’t change at all.
What machine learning football predictions actually are
Strip away the branding and there are two broad families.
Generative goal models — Poisson regression, Dixon-Coles, Elo-derived variants — model the thing that physically happens: goals. You estimate an attack and defence rating per team, convert those into an expected goal count for each side, and read off the probability of every scoreline (full explainer here). Markets come out of that grid by arithmetic.
Discriminative classifiers — logistic regression, random forests, gradient boosting (XGBoost, LightGBM, CatBoost), neural networks — skip the goals and learn a direct mapping from a row of features to a home/draw/away probability. You hand the algorithm whatever columns you have: recent points, goal difference, rest days, rating differentials, shot counts, venue, and it finds the pattern.
The second family is what people mean by machine learning. The first is what most of the field still runs on, including our model. The difference is real, but it is not the difference the marketing implies.
The two families are good at different things
A generative goal model gives you coherence for free. Because every market is derived from one scoreline grid, the 1X2 price, the Over/Under price and the both-teams-to-score price can never contradict each other. A classifier trained on match result says nothing about totals; if you want Over 2.5 as well, you train a second model, and nothing stops the two from implying incompatible views of the same fixture. Sites that predict each market independently give themselves away this way constantly.
A classifier, in exchange, will absorb anything you can put in a column. Rest days, travel distance, altitude, referee, competition stage, squad-value differentials — a goal model has to be re-derived to accept each of those, while a booster just takes another feature. Where the signal genuinely lives in messy interactions between many variables, tree ensembles are the better tool, and this is not in dispute.
The honest summary is that these are complementary, and the strongest setups tend to be hybrids: use a statistical rating system to produce a small number of high-quality features — team strength, home advantage, form-decayed ratings — and let a boosted model learn corrections on top. The rating system supplies structure; the learner supplies flexibility.
Why changing the algorithm buys less than you would expect
Here is the part the “AI-powered” badge obscures. Football’s outcome is dominated by irreducible randomness. A single deflection, a marginal offside call, a save that goes in off the post — none of these are learnable from historical features, because they are not patterns. They are noise, and they decide a large share of matches.
That puts a hard ceiling on any model, regardless of family. Even a perfectly specified model that knew each team’s true strength exactly would be wrong a great deal of the time, and its top-line accuracy would land somewhere in the low-to-mid 50s percent range on 1X2. Published comparisons of model families on league football reflect this: they cluster in a narrow band, and the spread between two feature sets fed to the same algorithm is routinely wider than the spread between two algorithms fed the same features.
There is also a data problem that cuts specifically against the flashier methods. A domestic league season produces a few hundred matches. Even five seasons across several leagues is a few tens of thousands of rows — a small dataset by the standards of the techniques being borrowed. Deep neural networks are built for regimes with orders of magnitude more data and far higher signal-to-noise; pointed at league football they tend to memorise rather than generalise, which is why tree ensembles usually outperform them here. “We use a neural network” is, if anything, weak evidence about a football model.
The failure modes get worse, not better
Flexibility is a liability when the truth is mostly noise, and the standard machine-learning pitfalls all bite harder in this domain:
- Overfitting. A model with enough capacity will happily learn that a particular club underperforms on a particular weekday. That relationship will not survive contact with new fixtures.
- Look-ahead leakage. Features must contain only what was knowable before kick-off. Season-aggregate statistics, final league position, or any figure computed over the whole dataset quietly smuggle the future into the past and inflate every backtest that uses them.
- Odds as a feature. Feeding bookmaker prices into the model is the most common leak of all. It works — market odds are the single most predictive column available — but the resulting system is no longer predicting matches. It is predicting the market, with a lag, and it can never beat the thing it is copying.
- Optimising accuracy instead of probability. Classifiers trained to maximise accuracy learn to suppress the draw, because the draw is rarely the single most likely outcome even when it carries a quarter of the probability mass. The result looks better on a hit-rate table and is worse at the only job that matters.
- Uncalibrated output. A tree ensemble’s class scores are not probabilities until you make them so. Skipping the calibration step produces confident-looking numbers that systematically overstate certainty.
Every one of these produces a model that performs beautifully in development and disappoints in production. None of them is detectable from the outside by reading the word “AI”.
Judge the output, not the acronym
Since the algorithm label tells you nothing, evaluate the only thing that can be checked: the probabilities themselves, out of sample, over a meaningful run of predictions.
The tools for this are unglamorous and decisive. A Brier score measures whether stated probabilities were close to what happened, and punishes confident errors far harder than hedged ones (how it is computed, with worked numbers). Log loss does something similar with a harsher tail. A calibration check asks whether the fixtures priced at 60% won about 60% of the time — a model can score respectably overall and still be badly overconfident in one band. And all of it has to be computed on predictions that were recorded before kick-off and graded without exception, misses included.
Applied honestly, this reduces the machine-learning question to its proper size. A model family is an implementation detail. Whether the numbers it emits mean what they claim is the entire question, and it is answerable only by a record that was published in advance and never edited afterwards.
That is the standard we hold ourselves to: our probabilities are stated before the match, graded automatically, and the results — favourable or not — live on the public track record. If a site advertises its algorithm but not its record, the algorithm is not the reason.