All updates
General

How our model calculates: from player to opportunity

Most people guess the result. We calculate. Here is exactly what happens, using a real match: Belgrano – River Plate, Liga Profesional, October 19, 2026. The match was not hand-picked: it was the most recent settled opportunity from a final analysis when this post was written.

The path of every final analysis
  1. Players 11 + 11 confirmed starting XI, every player with his ratings
  2. xG 1.05 : 1.33 expected goals per team
  3. Probability 42.4% for “Over 2.5”
  4. Market price 2.57 = 38.9% odds for “Over 2.5”, margin still included
  5. Opportunity +9% Edge: 0.424 × 2.57 − 1

No edgeno opportunity. That is often how it ends.

AI only writes the text and does not calculate a single number

From the eleven players to the opportunity, using Belgrano – River Plate as the example.

The question behind every analysis

It all starts with a single question: how many goals will each team score in this match? The answer is the expected goals, xG for short. All the other numbers follow from them.

xG is not a prediction of a result but an average: the number of goals a team would score on average if this match could be played many times over. In our example the answer was Belgrano 1.05, River Plate 1.33.

The basis: the strength of both teams

Every calculation starts from team strength, home advantage and the league's scoring level. Data, not opinions: no gut feeling, no headlines.

The eleven who actually play

The final analysis is created as soon as the lineups are official, on average about 60 minutes before kick-off. Since October 13, 2026, in league and European competitions, it has calculated with the eleven players who actually start. What goes in:

  • The ratings of every player in the starting XI from up to two years of club football, with recent matches counting more.
  • Role and opponent: a striker is measured against strikers, and it matters against whom his numbers were produced.
  • Form in recent appearances and workload: rest days, minutes played, returning players.
  • The opposing goalkeeper.

So if a regular is missing, you see it in the numbers and not just in the text. Cup matches, internationals and incomplete lineups are still calculated with team values in the final analysis. Our example match is a final analysis with player ratings.

From two numbers to every possible score

From the two xG values, the model calculates a probability for every possible score: 0:0, 1:0, 2:1 and so on. It is based on the Poisson distribution, a standard for rare events such as goals, with a correction for tight scores such as 0:0, 1:0, 0:1 and 1:1, which the pure calculation would weight incorrectly.

All markets follow from this table: win, draw, double chance, over/under and “both teams score”. In the example: Belgrano 27.9%, draw 30.9%, River Plate 41.3%; Over 2.5 goals 42.4%. The xG score comes from here too: it is the xG rounded down, and rounded up only from .9. 1.05 to 1.33 becomes 1:1.

The fair price

Odds are a price, and they contain the provider's margin. We take the odds from Pinnacle, one of the sharpest markets (or from Bet365 if they are missing), and remove the margin. That is the fair market price.

In the example: odds of 2.57 for Over 2.5 goals correspond to 38.9% (margin still included). Our probability is 42.4%.

When this becomes an opportunity

The formula is short: Edge = our probability × odds − 1. In the example: 0.424 × 2.57 − 1 = +9%.

A small difference is not enough, though. Measured against the fair price without margin, the edge must be large enough, and the higher the odds, the larger it has to be. On top of that come strict filters: no very low odds, no extreme values. At most one opportunity per match.

That is why many matches have no opportunity. Often the model and the market are too close together, or a filter applies. “No edge” is an answer too, and an honest one.

An opportunity is a question of price, not of the exact score. It can win even if the xG score is wrong, and it can lose even though the price was good.

“Over 2.5” opportunity on the match page

The opportunity on the match page: our probability, the edge and the providers' odds.

Liga Profesional de Fútbol19 October 2026
Belgrano0:3Half-time 0:1River Plate
xG final analysis
1.05 : 1.33 → 1:1
xG after the match
1.14 : 1.68
    • 45+3' Tomás Galván
    • 49' Ángel Correa
    • 72' Thiago Almada
    Go to the match page

    What the AI does and does not do

    All numbers come from our statistical model. An AI summarises the most important key and risk factors in your language. It does not calculate a single number. When you see xG, a probability or an edge, it comes from the calculation, not from a language model.

    Where the model reaches its limits

    • Cup matches, internationals and incomplete lineups are calculated with team values, not with the player model.
    • The final analysis is the last state before kick-off. The model does not know what happens after that (an early sending-off, a change in the weather).
    • A match, a weekend, a week are small samples. Only the long run is meaningful.

    The performance record

    Every opportunity from a final analysis in a counted competition counts with exactly one unit at the odds at the time of the analysis. Previews never count. Nothing is changed after kick-off: losses stay, nothing is deleted.

    Until October 13, 2026 with the previous team model, since then with the player model in league and European competitions, all in the same performance record. Past results are no guarantee of future results.

    In short

    The starting XI gives expected goals, the expected goals give probabilities for every score, the odds give a fair price, and only if our probability is clearly above that price does it become an opportunity. You will find the full calculation in the help under The model: xG from the starting XI, the rules under What an opportunity is, and every opportunity by month, market and league in the performance record.

    How our model calculates: from player to opportunity