clock menu more-arrow no yes

Filed under:

xGunners: How to calculate xPoints

New, comment

Curious about expected points (xPoints)? Continue reading to have all your questions answered.

Behind The Scenes At CERN The World's Largest Particle Physics Laboratory Photo by Dean Mouhtaropoulos/Getty Images

Welcome to the inaugural issue of the xGunners Stats Mailbag, just one question today but it is a good one to dig into.


I have been reading Scott's material on Twitter. Is there a formula to calculate xPts from xG? I have come across web applications but not convenient for doing it in bulk.


Hello dear reader! First off, thanks for following me on twitter. Secondly I too had this question when I was first starting out.

Before I jump into the specifics of how to calculate expected points (xPoints going forward), I want to do a short explanation of what xPoints are.

xPoints, similar to xG, attempts to put context on how likely certain events are to happen based on the quality of the chances created. xPoints takes xG and moves to the next level from goals scored to look at how the results of the match would play out in the long run.

For example, the Stoke City vs Arsenal match from earlier this season. That match ended with a scoreline of 1-0 in favor of Stoke. The xG in the match was 0.8 to 1.7 in favor of Arsenal.

Stoke vs Arsenal xG map, the pink dot is the shot that was actually scored.

The actual points was 3 for Stoke and 0 for Arsenal but the xPoints based on simulating the match 10,000 times was 0.7 to 2.0 in favor of Arsenal.

Stoke vs Arsenal simulated outcomes

In this match, xPoints help to illustrate how much of a smash and grab this match was for Stoke.

Now to answer the question from the reader, I have a couple ways that I use to calculate xPoints. The first method and in my opinion the superior method is to use a Monte Carlo simulation based on the expected goals for the match to determine the probability of the amount of goals scored, the probability of different goal differences happening and also the expected points for a match.

The results of that are in the image above from the Stoke City vs Arsenal match. Like the reader I have also found that this is not the fastest method and I haven’t perfected a way to do it in bulk either (perhaps a project for the off-season). If you want to play around with something very similar, Danny Page has created a wonderful online expected goal tool that I built my visualization to emulate.

The second method that I use is based on the results from previous matches with similar xG differentials. This is not a perfect substitute for doing a full simulation of a match but over the course of a season it works out pretty well.

xPoints from xG differential

xG Differential xPoints
xG Differential xPoints
1.5+ 2.7
1.5 < 1 2.3
1 < 0.5 2
0.5 < 0 1.5
0 < -0.5 0.7
-0.5 < -1 0.5
-1 < -1.5 0.3
< -1.5 0.1

Going back to the Stoke City vs Arsenal example, on the table it again has a 2.0 xPoints value for the 0.9 positive xG differential and 0.5 xPoints for Stoke.

Here is the full table with the xPoints for each team:

That’s it for today. If you have a question about stats or analytics you can send in your question through email at or through twitter @theshortfuse or @oh_that_crab.