This is going to be the first of 2 posts looking at the mid-season performance of my football prediction and rating system, Predictaball. In this post I’m going to focus on the Elo rating system.
Premier league standings
I’ll firstly look at how the teams in the Premiership stand, both in terms of their Elo rating and their accumulated points, as displayed in the table below, ordered by Elo. Over-performing teams, as defined by being at least 3 ranks higher in points than in Elo, are coloured in green, while under-performing teams, the opposite, are highlighted in red.
Man City are dominating the Elo ranking, with 85 more points than second-placed Chelsea, which is completely expected from their 18 successive (often high-scoring) victories. It can be seen that there is an asymmetric rating distribution, with 13 teams below the mean. This emphasises the dominance of the top 6 (Everton in 7th are a long way behind 6th placed Arsenal). The competitiveness of the top teams is highlighted by the fact that a mere 34 points separates second placed Chelsea from 5th placed Liverpool, which is less than half the difference from Man City to Chelsea.
Elo rank | Team | Elo | Points | Points rank | Rank difference | Played |
---|---|---|---|---|---|---|
1 | Man City | 1796 | 58 | 1 | 0 | 20 |
2 | Chelsea | 1711 | 42 | 3 | -1 | 20 |
3 | Tottenham | 1695 | 37 | 5 | -2 | 20 |
4 | Man Utd | 1687 | 43 | 2 | 2 | 20 |
5 | Liverpool | 1677 | 38 | 4 | 1 | 20 |
6 | Arsenal | 1633 | 37 | 5 | 1 | 20 |
7 | Everton | 1504 | 27 | 8 | -1 | 20 |
8 | Leicester | 1494 | 27 | 8 | 0 | 20 |
9 | Burnley | 1470 | 30 | 7 | 2 | 19 |
10 | Southampton | 1427 | 19 | 14 | -4 | 20 |
11 | Crystal Palace | 1425 | 18 | 15 | -4 | 20 |
12 | Bournemouth | 1407 | 17 | 18 | -6 | 20 |
13 | Watford | 1406 | 25 | 10 | 3 | 20 |
14 | West Ham | 1405 | 18 | 15 | -1 | 20 |
15 | Stoke | 1395 | 20 | 13 | 2 | 20 |
16 | Huddersfield | 1387 | 23 | 11 | 5 | 20 |
17 | West Brom | 1380 | 15 | 19 | -2 | 20 |
18 | Brighton | 1375 | 21 | 12 | 6 | 20 |
19 | Swansea | 1366 | 13 | 20 | -1 | 20 |
20 | Newcastle | 1357 | 18 | 15 | 5 | 19 |
Overall, Elo and points totals appear to be well correlated, with a few exceptions. For example, Tottenham are third in terms of Elo, but 5th in points. Likewise Man Utd are second in the actual league, but only have the 4th highest Elo. Looking at the tail end of the league and we see similar phenomena. Brighton are 18th when ranked by Elo, but are 12th in the actual league, a difference of 6 ranks!
There are a number of reasons for this behaviour: the most obvious being that points don’t take the opponent’s strength into consideration, while Elo does. Winning a game against a team in the top 6th will result in more Elo points than against a relegation candidate, but both wins would be awarded with 3 points. A strength of Elo is that by taking opponent strength into account, it shows a fixture-independent table, while ranking by points isn’t entirely fair if a team has managed to have fewer games against the top 6 than others.
Due to the inclusion of margin of victory in the Elo update equation, (see Elo explanation post), a win by a larger score results in additional Elo points. This could partly explain why Stoke are ranked 15th in Elo but 13th by points, as they have the second worst goal difference in the league (-18). Another potential explanation for this discrepancy between ranks is how promoted teams are handled. Currently, only teams in the top 4 European leagues are tracked, so when a team is promoted up to the Premier League (or La Liga etc…), it is assigned the average rating of the relegated teams. So Newcastle, Brighton, and Huddersfield were all given the same rating (1350) at the start of the season, which isn’t entirely accurate and it may take longer than 20 games for their ratings to converge on their actual values. This last point is quite important, Elo rating is a continuous score with only a soft-reset each season, whereas points are obviously wiped clean each summer. Just because a team has a high rating doesn’t mean they are going to be good now or in the future, but that they were good enough in the past, and a lot can change in the off-season.
The correlation between Elo rank and points rank is shown below (with a high r value). Teams above the line have worse Elo than their points suggest (thereby overperforming in the real league), while teams below the line are scoring fewer points than their skill level would suggest (underperforming). The difference between the top and bottom of the league is clear, with teams at the top having less variation between their 2 ranks, while teams in the lower half are more dispersed. The 3 promoted teams (Brighton, Newcastle, Huddersfield) are the 3 most over-performing teams (in that order), which suggests that setting their Elos to be equal to the averaged rating of the relegated teams isn’t entirely accurate, although in absence of tracking the rating of the lower leagues I can’t see a better way of handling this that still maintains a zero-sum system.
Expected goals
No football analytics post is complete without mentioning expected goals (xG), the stat so beloved by analytics and yet so poorly understood by football ‘experts’. I’m using the table found here of expected points, provided by Gracenote sports and Simon Gleave although note that it is one matchday behind. Under-performing teams are highlighted in red and over-performing in black, calculated as a 3 point difference compared to the expected total. It provides an alternative view of performance looking at match level data rather than just the result. Importantly, these two methods of calculating over and under-performance are not directly comparable, the Elo method purely based on match outcome and the other comparing outcomes with how the match was played.
There are a number of differences with my Elo rating. Firstly, the top 6 are ordered differently, with Liverpool and Arsenal moving up into positions 2 and 3 respectively (although it looks like Arsenal are only ahead of Spurs on goal difference). Their model has identified Liverpool, Arsenal, and Spurs as under-performing, while according to Elo both Liverpool and Arsenal are ranked relatively fairly, although it agrees that Spurs are under-performing. Both systems agree that Man Utd are doing better than expected.
The biggest under-performer by xG is Crystal Palace, who are the joint biggest under-performer by Elo, along with Southampton and Bournemouth. The bottom half of the table doesn’t contain any under-performing teams. The over-performing teams as identified by xG are Burnley (first by quite some margin), and Huddersfield, both of which are considered to be over-performing by Elo but to a lesser extent, with Brighton the most over-performing according to Elo.
Rating change over the season
I’m interested to see how the team’s ratings have changed over the course of the season. I’ve plotted the temporal trend below, although it can be hard to identify which team is which, any suggestions for how to better visualise this with 20 lines when there isn’t much y-separation would be welcome!
The most immediate finding is the large separation between the top 6 and the bottom 14. This is slightly worrying as it leads to a sense of inevitability in games between a top-6 and a bottom-14 team, although looking at it from a more positive perspective it allows for potentially exciting games of football whenever the top-6 play each other. Man City’s fantastic season is shown here as they started the season ranked 3rd after Chelsea and Spurs, but overtook of them by the start of October and never looked back, while Spurs started to slide down the table. From my own perspective, I’m heartened to see Liverpool’s improvement following their 3-0 away win at Stoke at the end of November.
Looking at the bottom of the ratings, we can see Newcastle, Huddersfield, and Brighton starting the season at 1350 Elo, the lowest of all teams, with Huddersfield immediately jumping up with their 3-0 away win at Crystal Palace, before falling back into the mid-table and being kept company by Brighton, while Newcastle starting off well before going on a losing run from mid-November.
The table below displays the change in Elo across the half-season so far, once again demonstrating Man City’s superiority, having gained more than double the number of rating points of the second most improved team (Man Utd). Swansea’s dismal season is shown here, having lost 72 points over the course of the season.
Team | Current elo | $\Delta elo$ |
---|---|---|
Man City | 1796 | 145 |
Man Utd | 1687 | 70 |
Liverpool | 1677 | 59 |
Burnley | 1470 | 56 |
Huddersfield | 1387 | 29 |
Chelsea | 1711 | 17 |
Brighton | 1375 | 17 |
Watford | 1406 | 11 |
Arsenal | 1633 | 9 |
Leicester | 1494 | 8 |
Newcastle | 1357 | -1 |
Tottenham | 1695 | -7 |
Crystal Palace | 1425 | -26 |
Everton | 1504 | -40 |
Bournemouth | 1407 | -42 |
Stoke | 1395 | -54 |
Southampton | 1427 | -56 |
West Ham | 1405 | -61 |
West Brom | 1380 | -62 |
Swansea | 1366 | -72 |
European leagues
Predictaball also tracks the other 3 major European leagues (La Liga, Serie A, and the Bundesliga) even those these predictions for these matches aren’t tweeted. As I’ve already made this post longer than I expected, and also because I know even less about these leagues than I do the Premiership (I actually don’t follow football that much, I just enjoy predictive modelling), I’m just going to display the Elo tables below without much commentary. Remember that the Elo systems are league-dependent and scores from different leagues are not directly comparable.
La Liga
As with the Premier League, the league is effectively grouped into 2, with the team in 3rd separated from the remaining 17 teams by 126 points, and only 255 points separating the 4th place team from last. By calculating the standard deviation of Elo, we get a measure of the spread of skill in the league, with a more competitive league having a smaller skill range. This value is 142 for the Premier League and 133 for La Liga, which isn’t a large difference.
There are also some discrepancies between the Elo ranking and the actual league position, the biggest of which by far is Girona, who lie in 8th in the league, but only have the 17th best Elo. On the other hand, Espanyol have the 11th best Elo but are placed in 16th.
Elo rank | Team | Elo | Points | Points rank | Rank difference | Played |
---|---|---|---|---|---|---|
1 | Barcelona | 1837 | 45 | 1 | 0 | 17 |
2 | Real Madrid | 1738 | 31 | 4 | -2 | 16 |
3 | Atletico Madrid | 1707 | 36 | 2 | 1 | 17 |
4 | Valencia | 1581 | 34 | 3 | 1 | 17 |
5 | Villarreal | 1554 | 27 | 6 | -1 | 17 |
6 | Sevilla | 1544 | 29 | 5 | 1 | 17 |
7 | Athletic Bilbao | 1534 | 21 | 11 | -4 | 17 |
8 | Real Sociedad | 1508 | 23 | 8 | 0 | 17 |
9 | Eibar | 1492 | 24 | 7 | 2 | 17 |
10 | Celta Vigo | 1488 | 21 | 11 | -1 | 17 |
11 | Espanyol | 1455 | 17 | 16 | -5 | 16 |
12 | Leganes | 1450 | 21 | 11 | 1 | 16 |
13 | Getafe | 1434 | 23 | 8 | 5 | 17 |
14 | Alaves | 1423 | 15 | 17 | -3 | 17 |
15 | Real Betis | 1403 | 21 | 11 | 4 | 16 |
16 | Malaga | 1400 | 11 | 19 | -3 | 17 |
17 | Girona | 1393 | 23 | 8 | 9 | 17 |
18 | Levante | 1369 | 18 | 15 | 3 | 17 |
19 | La Coruna | 1363 | 12 | 18 | 1 | 16 |
20 | Las Palmas | 1326 | 11 | 19 | 1 | 16 |
Serie A
Serie A is characterized by 2 dominant teams, Juventus and Napoli, who only have 5 Elo points separating them (and 1 point). Roma also look strong but the gap to the 4th place team is 96 points. The standard deviation of Elo for Serie A is 150, which is the highest of the European leagues, suggesting that there is greater variability in team skill.
There are a number of over-performers, such as Sampdoria who are placed in 6th but have the 10th highest Elo, but interestingly very few under-performers, with no team being rated 2 positions better by Elo than their actual standing. I’m also amazed to see Benevento having picked up a solitary point from 18 games, well deserving of the lowest Elo score across all 4 leagues. This doesn’t necessarily mean that Benevento are the worst team in these leagues, but they are the furtherest from their league’s average.
Elo rank | Team | Elo | Points | Points rank | Rank difference | Played |
---|---|---|---|---|---|---|
1 | Juventus | 1779 | 44 | 2 | -1 | 18 |
2 | Napoli | 1774 | 45 | 1 | 1 | 18 |
3 | Roma | 1730 | 38 | 3 | 0 | 17 |
4 | Inter | 1634 | 37 | 4 | 0 | 17 |
5 | Lazio | 1617 | 36 | 5 | 0 | 17 |
6 | Atalanta | 1575 | 27 | 6 | 0 | 18 |
7 | Fiorentina | 1553 | 26 | 8 | -1 | 18 |
8 | Torino | 1516 | 24 | 9 | -1 | 18 |
9 | Udinese | 1499 | 24 | 9 | 0 | 17 |
10 | Sampdoria | 1492 | 27 | 6 | 4 | 17 |
11 | Milan | 1483 | 24 | 9 | 2 | 18 |
12 | Bologna | 1454 | 24 | 9 | 3 | 18 |
13 | Sassuolo | 1426 | 20 | 14 | -1 | 18 |
14 | Chievo | 1412 | 21 | 13 | 1 | 18 |
15 | Cagliari | 1393 | 17 | 15 | 0 | 18 |
16 | Genoa | 1391 | 17 | 15 | 1 | 18 |
17 | Crotone | 1353 | 15 | 17 | 0 | 18 |
18 | SPAL | 1343 | 15 | 17 | 1 | 18 |
19 | Verona | 1340 | 13 | 19 | 0 | 17 |
20 | Benevento | 1237 | 1 | 20 | 0 | 18 |
Bundesliga
The German league looks to be the most competitive, with the leaders having the lowest Elo of these 4 leagues and bottom-placed team having the highest. This is reflected in the standard deviation of Elo at 98, far lower than the other leagues. A similar finding has been identifed previously, where the bookies were less accurate at predicting Bundesliga matches than the 3 other leagues.
Elo rank | Team | Elo | Points | Points rank | Rank difference | Played |
---|---|---|---|---|---|---|
1 | Bayern Munich | 1780 | 41 | 1 | 0 | 17 |
2 | Borussia Dortmund | 1623 | 28 | 3 | -1 | 17 |
3 | Bayern Leverkusen | 1573 | 28 | 3 | 0 | 17 |
4 | Hoffenheim | 1559 | 26 | 7 | -3 | 17 |
5 | Schalke | 1554 | 30 | 2 | 3 | 17 |
6 | Leipzig | 1545 | 28 | 3 | 3 | 17 |
7 | Borussia Moenchengladbach | 1522 | 28 | 3 | 4 | 17 |
8 | Augsburg | 1504 | 24 | 9 | -1 | 17 |
9 | Hertha | 1480 | 24 | 9 | 0 | 17 |
9 | Ein Frankfurt | 1480 | 26 | 7 | 2 | 17 |
11 | Wolfsburg | 1475 | 19 | 12 | -1 | 17 |
12 | Werder Bremen | 1463 | 15 | 16 | -4 | 17 |
13 | Hannover | 1438 | 23 | 11 | 2 | 17 |
14 | Mainz | 1418 | 17 | 14 | 0 | 17 |
15 | Hamburg | 1413 | 15 | 16 | -1 | 17 |
15 | Freiburg | 1413 | 19 | 12 | 3 | 17 |
17 | Koln | 1382 | 6 | 18 | -1 | 17 |
18 | Stuttgart | 1380 | 17 | 14 | 4 | 17 |