How our football predictions are made
TipsQuant editorial team · Updated
Every number on this site comes from one statistical model and one settlement script. This page explains what that model does, in the order it does it, and then spends as long on what it cannot do. If you only read one section, read the last one.
The idea in one paragraph
Football scores behave, roughly, like counts of rare events. A team that creates chances at a steady rate will score zero, one, two or three goals with probabilities that follow a Poisson distribution around its expected goals. If you can estimate how many goals each side should score against the other, you can estimate the probability of every scoreline, and from the scorelines you can derive every market a bookmaker offers. That is the whole method. The rest is about estimating expected goals well and being honest about the error.
Attack and defence ratings
Each team in our data carries two numbers: an attack rating and a defence rating. A high attack rating means the team scores more than an average side in its competition would against the same opponents; a high defence rating means it concedes less. Each competition carries two numbers of its own, a scoring level and a home advantage, because a Bundesliga match and a Zambia Super League match do not have the same number of goals in them, and home advantage is not the same everywhere.
The expected goals for the home side in a match are built from its attack rating, the away side's defence rating, the competition's scoring level and the home advantage. The away side's expected goals use the mirror image without the home bonus. Those two expected goal figures are what the Poisson distribution works from.
Fitting the ratings
The ratings are not typed in. They are fitted on finished matches from roughly the last three seasons, by finding the set of attack and defence values that makes the actual results most likely. Recent matches count for more than old ones: a result loses about half its weight after eight months, so a team's rating follows its current form without swinging on one freak scoreline.
Teams that play in more than one competition link the leagues together. The Champions League, the Europa League, the Conference League, the CAF Champions League and the CAF Confederation Cup all put clubs from different domestic leagues on the same pitch, and those matches are what lets the model compare a Kenyan champion with a South African one on something better than guesswork. The connection is still thin for the African competitions, and the ratings there carry more uncertainty than the ratings in the big European leagues.
The Dixon–Coles adjustment
A plain Poisson model assumes the two teams' goals are independent. In real matches they are not quite: 0-0 and 1-1 draws happen slightly more often than the independent model predicts, and 1-0 and 0-1 slightly less. Mark Dixon and Stuart Coles published a correction for exactly those four scorelines in 1997, and the model applies it. The effect on an individual match is small, a point or two on the draw probability, but it is systematic, and draws are the market where small errors add up fastest.
From scorelines to markets
Once every scoreline has a probability, the markets fall out by addition. The home win probability is the sum of every scoreline where the home side scores more. Over 2.5 goals is the sum of every scoreline with three or more goals. Both teams to score is the sum of every scoreline where neither side has a zero. Double chance adds two of the three 1X2 outcomes together. The most likely correct scores are simply the scorelines with the highest individual probabilities, listed in order.
Because everything comes from the same grid of scorelines, the markets agree with each other: when the model expects few goals, its over 2.5 and both-teams-to-score numbers fall together. Hand-written tips are not always that consistent.
Blending with the odds
When bookmaker odds are available for a match, the model's probabilities are not used on their own. First the bookmaker's margin is removed from the odds so that the implied probabilities add up to 100%. Then the model's figure and the market's figure are averaged, half and half. The blended number is what appears in the tables.
We do this because the market knows things the model does not. Odds move on team news, on weather, on what informed bettors are doing with their money. A model that ignored all of that would be confident in the wrong places. A model that only copied the odds would add nothing. Half and half is a simple compromise, and we have kept it simple on purpose.
Fair odds and thresholds
Fair odds are one divided by the probability. A 50% outcome has fair odds of 2.00; a 25% outcome has fair odds of 4.00. The fair odds column is there so you can compare the model's view with the price in front of you. A bookmaker price above fair odds is, on paper, in your favour. Below it, you are paying a premium.
A tip is only printed when the probability clears the threshold for its market:
- Match winner: the favourite must reach at least 55%.
- Draw: at least 31%, and only when the two teams are close in rating.
- Over 2.5 goals: at least 60%. Under 2.5 goals: at least 62%.
- Both teams to score "yes": at least 58%. "No": at least 62%.
- Over 1.5 goals: at least 78%.
- Double chance: at least 80%.
Teams with fewer than eight matches in the data get no tips in any market. The thresholds mean the list is as long as the day deserves. Some days that is thirty rows; some days it is two.
Accumulators
The accumulator blocks on the home and weekend pages are built the same way every day. The model takes every tip with a probability of at least 70%, then searches for the combination that reaches the target total odds (2, 3 or 5) in the fewest legs, picking the most probable such combination. Fewer legs is a deliberate rule: an accumulator's chance of landing is the product of its legs, so each extra leg costs more than it pays. When there are not enough strong legs to reach the target, the block shows nothing rather than a weaker slip.
Logging and settlement
Every tip is written to a log before kick-off and frozen at kick-off. Nothing is added or edited afterwards. After the match the settlement script reads the final score at 90 minutes and marks the tip as a hit or a miss. Postponed and abandoned matches are void, and so are matches decided in extra time or on penalties, because the tip was about the regular match. The results are published on the track record page, hits and misses together, by market and by period.
Refresh cycle
The data is refreshed every morning East Africa Time: new results are added, the ratings are refitted and every table is rebuilt. A second refresh runs during the day to pick up late results and newly published odds. Standings and fixture lists update on the same cycle without anyone touching them.
What the model cannot see
This is the section that matters most. The model uses finished results and bookmaker odds. That is all. It does not know:
- Who is injured, suspended or rested. A team sheet without its best striker is invisible to the ratings and reaches the probabilities only if the odds move.
- Why a match matters. A relegation six-pointer and a dead rubber on the last day look identical in the data.
- The weather, the pitch or the travel. A long trip to an away fixture in the CAF Confederation Cup is just another match.
- Fixture congestion. The model sees the result of Wednesday's cup tie, not the tired legs on Saturday.
- Managerial changes. A new coach changes a team faster than an eight-month half-life can follow.
There are also limits in the data itself. Early in a season, every team has only a handful of matches at its new strength, and the ratings lean on last season. Promoted teams have no top-flight history at all, which is why the eight-match rule exists. The African leagues we cover have fewer linked matches to the rest of the data than the European ones, so their ratings are less certain and their tips should be held more loosely.
Finally, the model is a model. A 70% tip is expected to lose three times in ten, and over a few weeks those losses will cluster in ways that look like a slump. Any bet can lose. The track record page exists so that you can see the hits and misses for yourself, and the day pages, starting with the prediction for today, always show the probability next to the tip so you are never asked to trust a name. Our about page explains who maintains all this and how the site is funded.
Frequently asked questions
What is a Dixon–Coles model?
It is a Poisson goals model with a correction for low-scoring results. A plain Poisson model treats the two teams' goals as independent, which slightly misprices 0-0, 1-0, 0-1 and 1-1. Dixon and Coles proposed an adjustment for exactly those scorelines, and that is the version we use.
Why do you blend the model with bookmaker odds?
Because the odds contain information the model does not have, such as team news and the money of informed bettors. Blending half and half makes the probabilities more honest than either source alone. Where no odds exist, the model's own number is used.
Why does a team sometimes have no tips at all?
Teams with fewer than eight matches in our data get no tips, because the ratings for them are too uncertain. This affects newly promoted sides, clubs returning after a long absence and the first weeks of a new season in competitions we have only recently added.
Does the model know about injuries and line-ups?
No. It uses finished results and bookmaker odds only. An injury reaches the model indirectly if the odds move, and not at all if they do not. This is the single biggest limit of the method and the reason the tables should be read as a starting point.
How often are the ratings refitted?
Every morning, on all finished matches up to the previous night, and again during the day as new results arrive. The weighting means a result loses about half its influence after eight months, so the ratings follow form without over-reacting to one game.