We get asked the same question all the time: "So how exactly do you predict a match?" The honest answer fits in five steps: collect the data, estimate expected goals, turn them into probabilities, check them against the market, then have the AI explain the result in plain English. Here is the full chain as it runs today, including the grey areas.
One principle sits above everything else: the numbers come from a deterministic statistical model, never from the AI. A language model is good at writing and bad at arithmetic: left to itself, it can produce a percentage that sounds right and isn't. So at Elofoot the model calculates, and the AI only writes.
The chain in five steps
- Data: match data, form, xG, standings, injuries and line-ups, synced and timestamped.
- Expected goals: how many goals each side should score in this match.
- Probabilities: the Poisson distribution turns expected goals into scorelines, then into 1X2, both teams to score and over/under.
- Market check: on big matches with a liquid prediction market, the market's view is blended in.
- Writing and serving: the AI writes the scenario from the computed figures; the prediction is checked again against the latest injuries and line-ups before it reaches you.
Step 1: the data
Everything starts with the data. Our main provider is API-Football, an established football data source. For each match we use:
- Recent form: results over the last five matches.
- Expected goals (xG) and advanced stats (shots, possession, corners) aggregated over recent matches, to measure performance beyond the scoreline.
- Standings: points, matches played, goal difference.
- Injuries and suspensions, plus line-ups: the confirmed XI when it is published (usually about an hour before kick-off), otherwise the probable XI built from the starters of the team's last five matches.
- Head-to-head history (H2H), used as context, never as the foundation.
Data is re-synced continuously and every piece is timestamped. A prediction is only regenerated when the underlying data changes, so it stays consistent with what is actually known.
Step 2: estimating expected goals
The heart of the model is one number per team: its expected goals in this match, often written λ (lambda).
- The starting point is the team's average xG. When a competition has no xG data, the model falls back on a neutral league baseline.
- A strength factor then shifts goals from one side to the other. It combines points per game (compared with a mid-table average), recent form (a run of five defeats lowers it by 15%, five wins raise it by 15%) and a division prior. The division prior matters for cup ties between leagues: five wins in the Championship are not five wins in the Premier League. Two teams from the same league get the same coefficient, so it cancels out and league matches are unaffected.
- For African national teams, where standings and xG are often missing, a level prior based on FIFA ranking tiers and recent CAF results stops the model from treating every AFCON qualifier as a coin toss.
- Home advantage adds roughly 12% to the home side's expected goals and takes the same share off the visitors'.
The strength factor only transfers goals between the two sides; it doesn't inflate the total. And the values are capped so the model never produces absurd distributions.
Step 3: from expected goals to probabilities
Goals are rare events, and the standard way to model rare events is the Poisson distribution (see our glossary entry). From each team's λ it gives the probability of scoring 0, 1, 2, 3… goals. Multiply the two teams' distributions and you get a grid with the probability of every scoreline, from 0-0 to 10-10. Everything else is read off that grid:
- 1X2 probabilities: sum of all home wins, all draws, all away wins. They always total exactly 100%, and no outcome is ever shown above 95%, because nothing in football is certain.
- The most likely score, plus alternative scores taken from the next most likely cells.
- Both teams to score and over/under 1.5, 2.5 and 3.5 goals.
A quick example. Two evenly matched sides with no xG data: the model gives the home side about 1.62 expected goals and the visitors about 1.03. The grid gives a home win at 51%, a draw at 25% and an away win at 24%. The most likely score is 1-1, at 11.8%, just ahead of 1-0 (11.5%). That is why even a well-calculated correct score is far from a sure thing (more in is a 100% sure correct score real?), and the whole calculation is broken down step by step in how to find a correct score.
For knockout matches, the probabilities are calculated over 90 minutes, so a genuine chance of a draw (and of extra time and penalties) is kept.
Step 4: checking against the market
On big matches, a real-money prediction market (Polymarket) often prices the result. When that market is liquid enough, its implied probabilities, with the operator's margin removed, are blended with the model's. A market where people put real money on the line is a strong signal, and it corrects the model where the model is blind (a manager under pressure, news the data hasn't caught yet). On the long tail of matches where no liquid market exists, the Poisson model stands on its own.
Safeguards apply: a market that is too thin is ignored, and the draw price is only used when enough money has been traded on it.
Step 5: the AI writes, the model decides
Only now does the AI step in. It receives the match data and the figures already calculated, and it writes:
- The main scenario: how the match should unfold and why, in plain English.
- The key factors: form, xG, absences, context, the decisive duel.
It does not produce the probabilities, the expected goals or the goals markets: those come from the model and are identical in every language. Even the probable scorers are chosen from a pool the server builds beforehand from available players (injured players and goalkeepers excluded), with probabilities calculated from each player's share of the team's xG and real output. If a piece of data is missing, it is not invented: it is simply not mentioned.
Each prediction therefore contains three scenarios: the main scenario (the most likely one, with its correct score and the 1X2 probabilities), visible to everyone, and two alternative correct scores with their probabilities, reserved for the Gold section, which also adds likely scorers and assisters, half-time, shots, xG and the goals projection.
Freshness, live mode and the track record
- Re-checked before display. A player can get injured after a prediction was generated. Each time an upcoming match's prediction is shown, the estimated scorers are checked against the current injury list and the line-ups published before kick-off, and any invalid pick is replaced. The predicted score itself doesn't move.
- Live mode. Run a prediction during a match and the starting point becomes the current score and minute: the final score is estimated as goals already scored + Poisson over the time remaining. A team leading 2-0 on 70 minutes doesn't have the same chances as at kick-off, and the numbers reflect that.
- A visible record. On team pages, recently played matches show the 1X2 prediction next to the real score, marked correct or missed. The misses stay visible: that's the point.
What you get, free and paid
- Free, no account: public predictions with 1X2 probabilities, form, xG and absences, on AI football predictions and today's predictions.
- Free at sign-up, no card needed: your first full prediction, with the most likely score and the written scenario.
- Paid plans (monthly, cancel any time): Pro at €14.99 a month for 100 predictions and unlimited Gold predictions (scorers, assisters, half-time, shots, xG, goals projection, alternative scores); Elite at €24.99 for 250 predictions, unlimited Gold and priority support. Current prices are always shown in the app.
What we refuse to do
- Guarantee a win. No serious prediction service can. If you see "98% win rate" somewhere, walk away.
- Let the AI make up a number. Every figure comes from the model or the data.
- Hide the misses. Predictions are timestamped and results are shown next to them.
- Pretend to know what we don't. A missing line-up or an unconfirmed injury is flagged, not guessed.
The limits we accept publicly
- The independence assumption. The basic Poisson model treats both teams' goals as independent. In reality, a team that's ahead slows down and a team that's behind pushes, so the simple model slightly underestimates some draws (0-0, 1-1). Corrected versions exist, such as the Dixon-Coles model.
- Small samples. Early in the season, or for national teams that play only a few times a year, averages are fragile.
- Thin data. On lightly covered competitions some stats are missing; the model falls back on neutral baselines and the prediction is less sharp.
- The unpredictable. A red card, a penalty or a goalkeeping error can change everything, and no model sees them coming.
If you want to understand the mistakes this chain is designed to avoid, read the 7 common mistakes in football predictions. Our goal isn't to be right every time. It's to be more useful, more transparent and easier to check than the alternatives.
Responsible gambling. Elofoot's predictions are statistical estimates, not certainties or betting advice. Betting is for adults only (18+ in the UK and most countries, older in some) and carries real risks: debt, dependency, isolation. Never stake money you need and never chase losses. If gambling stops being fun, talk to someone you trust or a local support service. In Great Britain, the National Gambling Helpline (run by GamCare) is free and open 24/7 on 0808 8020 133.