Prediction methodology

How we calculate the odds of winning

An open model. An open record. Open restrictions.

What are our predictions?

For every upcoming match in our predictioning centre LigaToday published four probability-based predictions before kick-off:

  • Final result (1X2): the probabilities of a home win, a draw and an away win, totalling 100%.
  • Both teams to score (BTTS): the probability that each team will score at least one goal.
  • Over / Under 2.5 goals: the probability that the match will end with a total of 3 or more goals.
  • Most likely exact result: the single result with the highest probability according to the model.

Each probability is shown alongside the prediction. We never publish a „pick“ without the corresponding probability – so that you can judge our confidence for yourself.

The free model: ELO + Poisson

The free prediction you see for every match (with a green border and labelled “Free prediction”) is our own development, which combines two well-researched concepts from sports analytics:

1. Teams’ ELO ratings

Each team has a numerical strength rating. After each completed match, the ratings of both teams are updated according to the result and the difference in their ratings before the match. Strong teams that beat weak ones gain a little; weak teams that beat strong ones gain a lot. The K-factor controls how quickly the ratings react to new results; we use a higher K for new teams and reduce it as they play more matches.

The difference in ratings between two teams corresponds to a base probability of victory according to the standard logistic ELO curve. A team with a 100-point ELO advantage has a base probability of around 64% of winning on neutral ground.

2. The Poisson model for goals

Based on the ELO database, the expected goals for each team are drawn from a Poisson distribution, the mean of which is derived from the league average (for the current season), modulated by attacking/defensive odds derived from the difference in ratings and adjusted for home advantage. The convolution of the two Poisson distributions yields a complete probability matrix for all possible results (0–0, 1–0, 1–1, …). From this matrix, we sum the relevant cells to derive:

  • 1X2 – the sum of the possible outcomes where the home team’s goals > / = / < the away team’s goals
  • BTS – the sum of the results in which both teams have scored at least once
  • Over 2.5 – the sum of the results where the total number of goals is ≥ 3
  • Correct result – the cell with the highest probability (argmax)

What we are showing is the entire probability matrix, not an opinion on it. There is no manual intervention in the values.

Pro AI prediction: the new model (XGBoost)

The Pro AI prediction that you see at the top of every match (with a gradient blue-purple-pink border and a “Pro AI prediction” badge) is a separate model trained on thousands of completed matches. This is not an extension of ELO + Poisson, but a parallel, independent implementation.

Algorithm

Pro AI uses XGBoost, gradient-boosted decision trees, which are currently the gold standard in sports analytics. This is the same class of algorithm that the world’s leading statistical predictions services use to predict football results, because it captures non-linear interactions (for example, “less than 3 days” rest + a long journey + an increased number of players with injuries) in a way that a logistic curve cannot.

We build three separate XGBoost models for each match:

  • 1X2 model: multi-class classification (softmax probabilities for home win / draw / away win).
  • BTTS model: binary classification (yes/no).
  • Over 2.5 model: binary classification (yes/no).

Each model has 500 trees, a depth of 3, a learning rate of 0.04 and L2 regularisation of 2.0. These hyperparameters were fixed following preliminary experiments in which they were tuned based on the holdout log-loss.

23 input variables (instead of 2)

Whilst the free model relies primarily on the ELO difference and the Poisson mean for the league, Pro AI takes into account 23 pre-match indicators for each prediction:

  • Security ratings: an internally calculated Elo rating for each team (K=20, home advantage bonus +60), plus the Elo-based probability of victory.
  • Form over the last 5 and 10 matches: points (Win = 3, Draw = 1, Loss = 0), calculated separately for each team.
  • Goals for / against in the last 10 matches: average per match, plus the difference in attack and defence between the two teams.
  • Fitness on the pitch: home team’s home form, away team’s away form (last 5 matches in the relevant competition).
  • Days off: from the last match to the next one, limited to 30 days.
  • Head-to-head matches: the last 5 matches between the two teams (wins for each side and draws).

Calibration and validation

The accuracy shown at the bottom of the Pro AI card for each league is calculated by 5-fold stratified cross-validation (StratifiedKFold). This means that every match on which we measure accuracy is evaluated by a model that has NOT seen that match during training. This is a fair, non-optimistic assessment, not merely the result of training.

For completed matches in the archive, we publish the out-of-fold prediction (the green or red square labelled “Prediction correct / incorrect” with the final result below the confidence bar). This way, you can see not only what the model currently predicts, but also what it predicted beforehand and whether it was correct.

Explainability: the four key factors

Below the main bar, the Pro AI chart displays the four variables with the greatest weighting for that particular prediction, in the “Why the model thinks this” field. The weighting is calculated as significance of the variable × normalised value For this match, a brief approximation of SHAP. This turns the “black box” model into something you can scrutinise with your own eyes.

Update

Pro AI is retrained every night at 03:30 UTC using the full archive of completed matches. Predictions for upcoming matches over the next 7 days are recalculated every hour. Accuracy by league is updated every night at 04:00 UTC.

Difference: old versus new

The two models operate in parallel on every match page. We haven’t deleted the old one – it remains as an impartial second opinion. This is why it matters, and here’s how they differ:

Aspect Free (ELO + Poisson) Pro AI (XGBoost)
Algorithm Logistic Elo curve + Poisson convolution Gradient-boosted decision trees (3 models)
Input signals Elo difference, league average, home advantage 23 variables, including form, goals for and against, head-to-head matches, rest periods, and form by pitch surface
Non-linear interactions No (it’s all a closed form) Yes (trees automatically generate intersection points)
Calibration Analytical (from the Poisson matrix) 5-fold stratified cross-validation
Explainability The complete probability matrix for the results Top 4 factors for predictions + honest accuracy by league
Update In real time, after every match has finished (Elo update) Overnight update (03:30 UTC) + hourly predictions
Suitable for A quick overview, transparency in the maths Accuracy, situations involving subtle signals (form + rest + injuries)

Which one is more accurate?

In short: it depends on the league and the volume of data we have. Pro AI is currently operating on a training window of around 6 months (a total of 2,837 completed matches). For well-covered leagues, Pro AI shows 1X2 accuracy ranging from 50% to 67% (top leagues where we have more than 150 matches in the dataset). For leagues with fewer matches in the archive, accuracy drops to between 38 and 42%, because the model does not have enough examples to learn the local patterns. The free Elo + Poisson model is more stable on sparse data because it has less scope for error.

That’s why we show accuracy by league, rather than an overall figure. This way, you can see honestly how much you can trust Pro AI for that particular league.

Why do we keep both?

  • An independent second voice: if both models predict the same outcome, the level of certainty increases. If they disagree, the situation is more complex than it appears.
  • Different failure modes: A Poisson model may systematically underperform in leagues with extremely high goal-scoring rates. XGBoost may make errors in matches that appear similar to previous ones but are in fact new (new manager, new team). When the models differ significantly, this serves as a warning that something is out of the norm.
  • No hidden changes: We haven’t “built on top of” the free model to create something new behind your back. The old one remains as it always has. The new one is an addition.

Variables used by the model

  • Current ELO rating for each team (the strongest single variable).
  • Recent form: a team’s last 5 matches. Form is factored in implicitly in the ELO update, rather than as a separate weighted variable.
  • Home advantage: a league adjustment to the home side’s expected goals, recalibrated at the start of each new season.
  • Goalless draw in the league: the average number of goals per match for the current season of the respective competition, used as the basis for the Poisson model.
  • National / international flag: International matches (friendlies, qualifiers, World Cup) use a separate pool of ratings because club and national strength are not directly comparable.

Variables that we deliberately do not use

  • Bookmakers’ odds. We do not reverse-engineer market probabilities. Our predictions are based solely on match data – which is precisely what makes them comparable (and assessable) against the market. Since August 2026, we have been displaying market odds on the match pages as informational data (with no affiliate links), alongside the model’s probabilities – but these are never used as inputs for the model itself.
  • Information on injuries. Having line-ups available would improve our predictions, but our process does not yet have a reliable source of injury data. This is a known limitation (see below).
  • Time. The effects are small and spurious at the population level.
  • The coach’s identity. We monitor content managers, but we do not use them as a variable in the model.

When is the model updated?

  • ELO ratings are updated after every completed match as soon as the final whistle is recorded in our data feed (usually within ~60 seconds).
  • Goalless draw in the league (Poisson distribution) is recalculated daily based on the matches that have been completed in the current season.
  • K-factors and constants for home advantage are revised at the start of each major season and after every international tournament. The current values and their last revision date are stored in the plugin’s code – to ensure a reproducible audit.

There is no model overfitting in the deep learning sense. The model is parametric and is updated continuously, rather than in periodic batches.

Record

Every completed match for which a pre-match prediction was made is recorded in our database and included in the snapshot below. We do not edit historical predictions. The figure we show the day before a match is the figure we use to assess ourselves. You can view all the published predictions on the page at football predictions.

1906 matches rated Snapshot from 12 Sep 2026 UTC. Updated nightly.
Market Excerpt Accuracy of the top choice A naive baseline Brier score
1X2 (final result) 1906 48.7% 33.3% 0.633
Both teams to score 1906 54.5% 50.0% -
Over / Under 2.5 goals 1906 55.8% 50.0% -
Exact result 1906 11.0% ~8% (1/12) -
How to read numbers
  • Accuracy of the top choice is the percentage of completed matches in which the most likely outcome matches the actual result. A random choice between three possible outcomes would yield an average of 33.3%.
  • Brier score It measures the square of the difference between the probabilities we have assigned and the actual binary outcome, summed across Home / Draw / Away. A lower value is better. The uniform prior “1/3 for each” gives ~0.667; market odds are usually 0.55–0.60 after conversion to probabilities.
  • Excerpt is the number of completed matches we have assessed since we started recording results. The model improves as the sample size grows. We do not edit historical predictions; you can judge us on the same figures we published before the first whistle.
  • The raw data for each match is available via the REST endpoint /wp-json/sm/v1/predictions/accuracy - for anyone who wishes to audit the calculation.

Source of the data: /wp-json/sm/v1/predictions/accuracy. The table above backs up every figure on this page – nothing has been chosen manually.

Restrictions we want you to be aware of

  • The sample size is still small. We began collecting rated photos following the launch of the Predictions feature. The figures above will become more reliable as the sample size grows. Please treat the current Brier score as provisional.
  • It looks like a home win. The current set of parameters tends to favour home wins in close matches in lower-tier leagues. We are aware of this and are adjusting our model accordingly.
  • No information on injuries or suspensions. A first-choice goalkeeper, sidelined due to a cup tie, could shift the fair value by 10–15%; our model has no way of knowing.
  • A slow start for the teams. Newly promoted or international teams with few matches in the sample are subject to greater uncertainty whilst their ELO rating stabilises.
  • Buy. Single-leg cup ties (particularly those involving significant squad rotation) are more difficult than league matches. Expect a wider margin for error.

Who builds and checks it?

The data team at LigaToday. The model, the code base and this methodology page are maintained in-house by the engineering team at LigaToday. The same model powers every probability you see on the page with football predictions.

How it is structured

The model runs on a standard server stack. There is no external service for predictions, no third-party data feed and no closed “AI” black box. Match data is sourced from a licensed football feed, whilst the ELO + Poisson mathematics runs locally on our servers in under a second per match.

The end-to-end algorithm

  1. Acceptance of the result. Every completed match is recorded with the final score, goals scored, line-ups and a minute-by-minute log. International friendlies are recorded separately so that their results do not distort the club ratings.
  2. Update to the ratings of the two teams. We use the ELO update: Rnew = Rold + K · (actual − expected) where as expected is derived from the standard ELO logistic curve based on the difference in ratings, result is 1 / 0.5 / 0 for a win / draw / loss, and K is a scale-dependent factor (higher for new teams and for high-stakes matches, such as finals; lower for teams with hundreds of matches under their belt).
  3. An estimate of the expected goals for each country. For an upcoming match, we take the current average goals-per-match for the league season as a basis, then adjust it according to the difference in ratings and the home advantage bonus for that league. This results in two average values: λhost and λguest.
  4. Convolution of the two Poisson distributions. Treating the goals as independent Poisson draws, we calculate the joint probability for every plausible result (0–0 to 6–6) by multiplying the marginal probabilities. This gives us a 7×7 matrix, the sum of which is ≈ 100%.
  5. Designing the markets from the matrix. Each published probability is a sum over the cells:
    • Home win = the sum of the cells where the home team’s goals > the away team’s goals.
    • Equal to = the sum of the diagonal.
    • Both teams to score = the sum of the cells in which both rows and columns are ≥ 1.
    • Over 2.5 goals = the sum of the cells where home + away ≥ 3.
    • Most likely result = the cell with the highest probability (argmax).
  6. Publishing and freezing. Predictions are submitted before the first whistle and cannot be edited afterwards. Once the match is over, the pre-match prediction is assessed against the actual result and entered into the record table above.

There’s no manual intervention, no stacking of tipster recommendations, no layer of “value pick” recommendations. What you see is the raw output of these six steps.

If you spot an error in the calculation or wish to dispute a published probability, please write to kirilov@seolinked.com, by providing the match URL and a screenshot of the prediction. We respond in writing to every audit request.

This page was last viewed: Methodology version: 1.0.

Disclaimer

Football predictions from LigaToday These are statistical estimates – not advice or guidelines. They reflect what a published model estimates to be the probability of each outcome given the specified input data. They are not a recommendation to place a bet. Past results are no guide to future performance; a win with a probability of 60% may, and does, regularly fail to materialise.

Football is, by its very nature, unpredictable. Any individual match may defy any pattern. If you decide to use these probabilities to place a bet, please:

  • Only bet what you can afford to lose.
  • Set limits on your deposits and playing time with the operator before you start.
  • If betting stops being fun or you find yourself chasing your losses – stop and talk to someone.

Free and confidential support for problem betting:

LigaToday does not have no commercial partnerships We have no links with bookmakers, no affiliate links for odds, and we earn nothing if you decide to place a bet. Our aim is to publish accurate probabilities, not to drive betting volume.