How Edgity’s model works
Step 1: expected goals for each team
For every match the model builds two numbers: the goals it expects the home team to score, and the goals it expects the away team to score. They come from:
- Goals scored and conceded, with home and away matches kept separate.
- Recent form, which gets more weight as the season goes on and there are enough matches to trust it.
- Expected goals (xG), blended with real goals when both teams have xG data from several matches.
- The opponent: a strong attack facing a strong defence is not the same as facing a weak one.
- The league: its typical number of goals, and its own home advantage, learned from the league’s results.
- Missing players: injuries and suspensions, and the confirmed line-ups once they are published, usually 20–40 minutes before kick-off. The effect is limited, so one absence can’t swing the whole match.
- Teams that changed league: for a promoted or relegated team, last season’s numbers are converted to the level of the new league.
Step 2: a probability for every scoreline
Goals in football are rare and roughly independent events, which makes them a good fit for the Poisson distribution, a standard way to describe how often a rare event happens a given number of times. If a team is expected to score 1.5 goals, Poisson gives the chance of 0, 1, 2, 3… goals. Do that for both teams, combine them, and you get a grid of scorelines:
Add up every cell where the home team scores more and you get the home win: 46.4%. The diagonal gives the draw (25.8%), the rest the away win (27.8%). Cells with three or more goals give over 2.5 goals: 48.2%. The other markets on the page come from the same two numbers.
Step 3: adjustments measured on real results
- Low scores. Plain Poisson gets results like 0–0 and 1–1 slightly wrong. A small correction known as Dixon–Coles fixes this, with its strength set separately for each league from past results.
- Extreme estimates. When we compared the model’s goal estimates with 3,120 finished matches, the raw numbers were too spread out: too low at the bottom, too high at the top. A correction now pulls them back towards the league average.
What the model leaves out
- The odds. The model doesn’t use the market’s prices to set its own numbers. The reference odds are only shown next to them, and they can only take a label away.
- Weather and fatigue. Weather was tested on finished matches and made the estimates worse, so it’s switched off. Fatigue from a busy schedule isn’t used either.
- Things no dataset sees, such as dressing-room problems or a manager under pressure.
Cups and national teams
In European cup ties, teams from different leagues meet, so the model also accounts for the strength of each team’s domestic league. National teams play too rarely for season statistics, so their numbers are built from the players expected to start.
How we check it
The model is judged by calibration: when it says 60%, that outcome should happen about 60% of the time over many matches. We also compare it with simple reference models on finished matches. A single result can’t prove a number right or wrong; only a large sample can.
The takeaway
Everything on an Edgity match page starts from two numbers: the goals each team is expected to score. If you understand those two, you understand where every percentage on the page comes from.