The headline formula
xWins = Ξ£ P(win)
Sum the per-match win probability across every match the team has played with a recorded final xG. The probability is computed differently depending on whether the team was at home or away in each match.
Per-match win probability
With Ξ»h = home xG and Ξ»a = away xG, the joint Poisson probability of a final scoreline of i goals to j goals is:
P(i, j) = ((e^(-Ξ»h) Β· Ξ»h^i) / i!) Β· ((e^(-Ξ»a) Β· Ξ»a^j) / j!)
For the home team:
P(win) = Ξ£ P(i, j) for all i > j
For the away team:
P(win) = Ξ£ P(i, j) for all i < j
KiqIQ sums (i, j) across a 0..10 by 0..10 grid (121 cells). The unreached tail past 10 goals each side is well below one in a million for typical league xG and gets renormalised back into the three outcome buckets so the win, draw, and loss probabilities sum to exactly 1.
Worked example
With home xG = 1.80 and away xG = 1.10, summing all (i, j) cells where i > j gives P(home win) β 0.535 and P(away win) β 0.234. The home team contributes 0.535 to its season xWins from this match; the away team contributes 0.234.
Across 10 matches with broadly similar quality on both sides, a team will typically end up with xWins between 3 and 6. The exact number tells you how the model thinks the chances created and conceded should have translated into wins.
Reading xWins vs actual wins
- Wins > xWins. The team has converted matches at above the rate the chance quality predicts. Some of that is genuine finishing skill, some is normal short-term variance.
- Wins < xWins. The team has the underlying quality of a side higher up the table but has been wasteful in front of goal or unlucky in tight matches. Over a long enough run, results tend to drift back toward xWins.
- Wins β xWins. The standings reflect the model. Useful as a baseline check that no major luck or finishing-skill signal is hiding in the table.