The programming language Python is amazing – with just a few lines of code you can build an Expected Points table and prove that Liverpool should be leading the Premier League.
This is, perhaps, what frustrates the general public about performance analysis – a nebulous concept like Expected Points can be applied to a situation and assertions made.
Fans of the game, of course, long for definitive answers based on performance analysis, but that is not the nature of science. Performance analysis is just another tool which can be used to help to build a team. It is there to support coaches, not replace them. Therefore, the appropriate output of performance analysis is a conversation.
The eye test suggests that Liverpool have been underperforming this season.
So, if a nebulous concept like Expected Points suggests that Liverpool should be leading the division where might a conversation based on that finding lead us?
What are expected points?
Expected Points (xPoints/xPts) attempt to measure the number of points a team would have reasonably expected to have earned from a game or series of games based on the quality of scoring opportunities created and conceded. Expected Points are calculated on the basis of Expected Goals (xG) which is a metric designed to quantify the quality of a scoring opportunity.
Expected Points are assigned to each team in a given contest based on the probability of each team winning, drawing or losing the game. Specifically, the Expected Points range from zero to three points i.e., to earn all three Expected Points a team must restrict their opponent to an xG of zero.
The idea is to place a performance or series of performances in context. We are all aware of games during which one team out-plays another, but loses. Expected Points help you to look beyond the result and assess what happened in a more enlightened way.
Rasmus Ankersen
In his book Hunger in Paradise: How to Save Success From Failure (2016) author Rasmus Ankersen discussed the value of an Expected Points table (often referred to as the Justice Table).
While working for Brentford and FC Midtjylland (Denmark) Ankersen, who is now the Southampton director of football, used Expected Goals to construct a Justice Table.
“There is an old saying that the league table never lies,” Ankersen explained to The Times in January 2017 before asserting that the league table “very often lies”.
Since football is so low-scoring random events can have a significant impact; the better performing team wins less often than it should. Therefore, to evaluate the relative strength of a team it makes far more sense to do so based on underlying performance indicators as opposed to just results.
In Hunger in Paradise, Ankersen sites a specific example to illustrate his argument: in 2012 Newcastle finished fifth in the Premier League (65 points), but the following year finished 16th with 41 points. Ankersen’s analysis asserted that Newcastle’s underlying level of performance remained relatively unchanged across both seasons i.e., United had regressed to the mean (they were now getting the results that their performances deserved).
A more probabilistic assessment of the Newcastle performances in the 2011-12 season would have signposted this regression. Instead, based on the acclaim associated with the fifth-placed finish in 2012 manager Alan Pardew was offered an eight-year contract extension with the club.
Methodology
Typically, to calculate Expected Points you need access to the xG of every shot in a game, simulate the probability of the result based the quality of chances created/conceded, use that probability to assign points and subsequently build a league table.
Individual game xG from the Premier League is readily available data, but the xG of each shot in a given contest is not.
So, what can you do if you do not have access to shot-by-shot xG data?
You can follow the example set here by Joyan Bhathena and base your calculation of Expected Points on results from previous matches with similar xG differentials.
Joyan Bhathena based his Expected Points table for the Indian Super League on an xG differential which was calculated by Scott Willis here in an Expected Points explainer published by SB Nation.

Above is a table which Scott Willis compiled to illustrate a potential approach to awarding Expected Points based on xG differential.
One source for game xG data is FiveThirtyEight – with some basic Python code you can scrape the relevant data – the spi_matches.csv is available here.
Taking the work of Joyan Bhathena as an example, we can assign points for each individual game to each of the respective teams and, subsequently build a league table.

The key section of code involved can be found above – this series of if/else-in statements are used to assign points based on the xG differential in each game.
Results
The result of the calculations can be found in the table below i.e., Liverpool are top on 68.8 Expected Points – Jürgen Klopp’s men have earned 62 actual points, but based on this model the club have underperformed by 6.8 points. Meanwhile Arsenal have overperformed their Expected Points (55.0) by 26 points (81 actual points) while league leaders Manchester City have overperformed their Expected Points (58.4) by 23.6 with 82 actual points.
Please Note: This model was calculated on 12-05-2023 prior to game week 36 of the 2022-23 Premier League season.
Premier League 2022-23 | Games | Goals | Points | xPts | Diff |
---|---|---|---|---|---|
Liverpool | 35 | 67 | 62 | 68.8 | -6.8 |
Brighton & Hove Albion | 33 | 63 | 55 | 61.9 | -6.9 |
Manchester City | 34 | 89 | 82 | 58.4 | +23.6 |
Brentford | 35 | 52 | 50 | 58.2 | -8.2 |
Tottenham Hotspur | 35 | 64 | 57 | 57.8 | -0.8 |
Newcastle United | 34 | 61 | 65 | 57.6 | +7.4 |
Arsenal | 35 | 83 | 81 | 55.0 | +26 |
West Ham United | 35 | 38 | 37 | 54.8 | -17.8 |
Manchester United | 34 | 49 | 63 | 50.8 | +12.2 |
Aston Villa | 35 | 46 | 54 | 49.5 | +4.5 |
Chelsea | 34 | 34 | 42 | 47.2 | -5.2 |
Leicester City | 35 | 49 | 30 | 40.5 | -10.5 |
Crystal Palace | 35 | 35 | 40 | 39.1 | +0.9 |
Leeds United | 35 | 44 | 30 | 39.1 | -9.1 |
Wolverhampton | 35 | 30 | 40 | 37.0 | +3 |
Southampton | 35 | 31 | 24 | 35.6 | -11.6 |
Nottingham Forest | 35 | 34 | 33 | 34.6 | -1.6 |
Fulham | 35 | 50 | 48 | 34.3 | +13.7 |
Everton | 35 | 32 | 32 | 34.1 | -2.1 |
Bournemouth | 35 | 37 | 39 | 30.7 | +8.3 |
There are plenty of interesting patterns here – based on this model Fulham, for instance, have significantly overperformed their Expected Points (+13.7) while West Ham United have significantly underperformed (-17.8). Essentially, over a prolonged period of time the model suggests that Fulham’s results are likely to decline and West Ham’s are likely to improve.
Multi-row tables like this one are difficult to process visually so it makes sense to visualize the data in a more accessible way – the scatter plot below illustrates the table in a much more digestible format; the patterns associated with the data should now be much clearer.

*Please click on the image in order to enlarge it.
Admittedly, Expected Points is a nebulous concept; it is a bit hazy and far from definitive; it does not, for example, take account of contextual information like game state (how teams respond when a goal is scored).
This Expected Points model is just a handy means to identify which sides may be over or underperforming their underlying numbers across a given time period.
No one, for instance, in their right mind would argue that Man City should really be third based on this model. Similarly, no one should argue that Liverpool should be leading the division. However, as is the case with most models the appropriate output of such an analysis should be a conversation i.e., when you are presented with a model like this one it should spark a conversation about why Liverpool might be underperforming.
Big Chances
So, why might Liverpool not be doing as well as they should?
In terms of shots taken this season Liverpool (549) are second only to Arsenal (554) while Man City are third (546). Liverpool have scored 67 goals from an xG of 66.77 i.e., the club have underperformed their xG by just 0.23 (put simply, based on xG Liverpool have scored 0.23 fewer goals than the quality of opportunities created indicates that they should have).
The problem is that Arsenal have scored 83 goals from an xG of 68.96 (+14.04) and Man City have scored 89 goals from an xG of 74.78 (+14.22).
Why might this be the case?
Arsenal and Manchester City are converting their Big Chances at a rate of 48.94% and 47.20% respectively while Liverpool’s score in this category is 35.65% – Liverpool rank 15th in the division. Indeed, Liverpool’s Big Chance conversion rate is the club’s worst since the 2015-16 season when Jürgen Klopp took over.
Those nice people at Opta define Big Chances as a chance from which a player should “reasonably be expected to score”.

Man City have created the most Big Chances this season (125) with Liverpool trailing on 115 – City have scored 59 of those while Liverpool have converted 41. Indeed, on a per game basis Liverpool are creating 3.29 Big Chances and are only surpassed this season by Manchester City’s average of 3.68 per contest.
In previous seasons under Jürgen Klopp Liverpool have performed better in this category and have been rewarded for doing so. When Liverpool won the Premier League in 2019-20, for example, Klopp’s men recorded the best Big Chance conversion rate in the division.
Paradoxically, you would be more concerned if Liverpool were not creating Big Chances.
Not all shots are born equal.
Season-by-season in the Premier League the average distance from goal of a shot has gone down – rather than taking lots of shots of low quality it makes sense to try to create fewer chances, but of a higher quality since the probability of scoring from such an opportunity is increased. Hence the significance of Big Chance conversion rates.
Ironically, Jürgen Klopp was appointed as Liverpool manager in 2015 following a disappointing season with Borussia Dortmund – FSG, led by former sporting director Michael Edwards, had assessed the work of Klopp based on Expected Points during the 2014-15 season and understood that Dortmund deserved to finish much higher than seventh.
Similarly, Liverpool should stick with Jürgen Klopp now.
Feedback
Feel free to contact Brian McDonnell by email on sixtwofourtwo@gmail.com. Brian, of course, can also be contacted via @sixtwofourtwo, on LinkedIn and or, alternatively, on Instagram.