How the predictions work
FootyMath uses a statistical model of goals, not tipsters or opinions. This page explains the method, how it was tested and where it falls short.
Data
The model learns from 44,313 league results played since January 2020 in the 18 leagues on this site, plus every result of the current season as it comes in. Results and fixtures come from the SportAPI football data API. Cup matches and friendlies are left out: teams rotate in them and they follow different patterns.
The model
Each team gets an attacking and a defensive strength, estimated separately in each league from the last two and a half seasons. Goals alone are a noisy measure of strength, so the ratings use a blend: 30% actual goals and 70% shots on target converted into goals at the league's average rate. A team that keeps creating chances is rated well even through a run of missed finishes. Recent matches count more: a result from seven months ago weighs about half as much as one from last week. Home advantage is estimated per league.
For a match, the two teams' strengths give the expected number of goals for each side. From those, the model works out the probability of every scoreline from 0-0 to 8-8, adds them up into home win, draw and away win, and applies the Dixon-Coles correction for low-scoring results, which plain Poisson models get slightly wrong. The result is blended with an Elo rating, which reacts to recent results in a different way, and a final calibration step, learnt on the 2022-23 season and never re-tuned on later data, makes sure a 60% prediction comes true about 60% of the time.
Over 2.5 goals, both teams to score, double chance and the likely scores all come from the same scoreline probabilities.
How it was tested
The model predicted 21,272 league matches of our 18 leagues from July 2023 to October 2026, each one using only the matches played before it. It picked the right result in 50.9% of them (51.6% in the top European leagues), against 44.3% for always backing the home team. The full numbers, including how well the percentages match reality, are on the accuracy page.
Over 2.5 goals and both teams to score showed no edge over simple base rates in that test, so treat those two markets as information rather than tips.
Fair odds and confidence stars
Fair odds are 1 divided by the model probability: a 62% chance gives fair odds of 1.61. If a bookmaker offers more than the fair odds, the model rates the price as generous; less, and it rates it as short. Stars show how sure the model is: five stars at 70% or more, four at 60-70%, three at 50-60%, two at 40-50%, one below 40%. Top picks are matches where one outcome reaches 60%.
Updates and the track record
Probabilities are recalculated every hour as new results come in. At kick-off the last prediction is frozen and stored. After the match it is compared with the result on the accuracy page, so the record cannot be edited after the fact. A few matches from the days just before launch were predicted afterwards with the same walk-forward method; they are labelled as such and not counted in the live record.
Model changes
- 22 October 2026, model v2. Team ratings use shots on target as well as goals, and the result is blended with an Elo rating. On the same test (July 2023 - October 2026, our 18 leagues) the probabilities got clearly better: log-loss 0.9987 against 1.0060 for v1, correct results 50.9% against 50.6%. Predictions already made by v1 were not changed.
- 21 October 2026, model v1. Poisson attack and defence ratings with the Dixon-Coles correction and calibration.
Ideas we tested and did not adopt, because they did not improve the predictions: rest days between matches, a separate home advantage for every team, separate draw rates per league, capping big wins, and line-up absences.
What the model does not know
It does not see team news, injuries, suspensions, rotation, weather or motivation, and it has no betting odds. Treat the numbers as a starting point, not a verdict. The model is strongest in leagues with many seasons of data and weakest for newly promoted teams, teams new to our data and the first weeks of a season.