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.
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.
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
|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|
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: