People keep saying Messi is only this good because of the playmakers around him at Barcelona, and that his goals would dry up anywhere else. Anyone who’s actually watched Barcelona in the last few seasons knows it’s the other way around, Messi is the system, and I’m going to use the data to prove it.
Meet xG
For one of the courses in my master’s in AI at the University of Georgia, I built a machine learning system that predicts the outcome of football matches from team and player form and stats, and while researching it I came across Expected Goals (xG), a metric that’s been getting a lot of attention in football analytics lately. I’d already posted about it on Facebook, but I wanted to expand on it with proper charts and data.
xG is the probability that a shot ends up in the back of the net, calculated from historical data of shots taken from similar positions and angles and under similar conditions, so a tap-in can have an xG of 0.85 while a long-range volley can be as low as 0.03. Add up a player’s xG over a full season and you get how many goals they should have scored with the chances they had.
When a player scores more than their xG, they’re finishing their chances better than what’s historically normal for those chances, which means they’re overperforming, and doing that season after season is skill (Tifo Football has an excellent video on xG if you want to learn more about it).
The Data
I pulled the xG data from understat.com for Europe’s top 5 leagues (Premier League, La Liga, Serie A, Bundesliga, and Ligue 1) from 2014/15 through 2019/20. In order to avoid noise in the data, I only kept players with at least 2,000 minutes (≈ 22 full games) in a season, about two-thirds of what a regular starter plays (2,800-3,200 minutes). That left 2,229 players across the 6 seasons, and for each of them I calculated the cumulative difference between the goals they actually scored and their expected goals.
2018/19 Season
Starting with the 2018/19 season, where 809 players met the minutes threshold:
| Player | Goals | xG | Difference |
|---|---|---|---|
| Lionel Messi | 36 | 26.0 | +10.0 |
| Iago Aspas | 20 | 12.5 | +7.5 |
| Antonin Bobichon | 7 | 1.7 | +5.3 |
| Sadio Mane | 22 | 16.8 | +5.2 |
| Kai Havertz | 17 | 12.0 | +5.0 |
| Jonathan Bamba | 13 | 8.2 | +4.8 |
| Cristhian Stuani | 19 | 14.4 | +4.6 |
| Jadon Sancho | 12 | 7.4 | +4.6 |
| Cristiano Ronaldo | 21 | 23.3 | -2.3 |
Messi leads by a massive margin, +10.00 compared to +7.53 for the next player, scoring 36 goals from chances that should have produced 26, which is 10 extra goals from pure finishing.
Ronaldo, ranked 767th out of 809, actually underperformed his xG with 21 goals from chances worth 23.32 xG. His first season at Juventus was fine by any normal standard, but when it comes to converting his chances he was in the bottom 5% of qualifying players in Europe.
All 6 Seasons
A single season can be noisy, so here’s the full 6-season window, where the sample is large enough that luck can’t explain the results:
| Player | Goals | xG | Difference |
|---|---|---|---|
| Lionel Messi | 201 | 165.7 | +35.3 |
| Harry Kane | 140 | 116.0 | +24.0 |
| Antoine Griezmann | 103 | 79.7 | +23.3 |
| Son Heung-Min | 60 | 42.2 | +17.8 |
| Iago Aspas | 89 | 72.6 | +16.4 |
| Ciro Immobile | 103 | 86.7 | +16.3 |
| Eden Hazard | 62 | 46.1 | +15.9 |
| Alexandre Lacazette | 103 | 88.0 | +15.0 |
| Cristiano Ronaldo | 186 | 180.1 | +5.9 |
Messi’s cumulative overperformance is +35.3, 11 goals clear of Harry Kane in second place at +24.0. In 208 games over those 6 seasons he scored 201 goals, while the chances he had were worth 166 according to the xG model, so we’re talking about 35 extra goals just from his finishing!
Ronaldo comes in at #55 with +5.9 (186 goals from 180.1 xG). He is a great goalscorer, and he gets a lot of chances because he’s great at getting into scoring positions, but those chances explain most of his goals, and the same can’t be said about Messi.
Actual Goals vs Expected Goals
| Player | Actual Goals | Expected Goals (xG) | Difference |
|---|---|---|---|
| Lionel Messi | 201 | 165.7 | +35.3 |
| Cristiano Ronaldo | 186 | 180.1 | +5.9 |
Here’s every player’s goals against their xG, the dashed line is where the two are equal, so if you’re above it you’re overperforming. Most players are bunched up around the line, Messi is way up there on his own, and Ronaldo is almost exactly on it, even with his higher raw xG.
What This Means
Now, xG only measures finishing, so it says nothing about Messi’s playmaking, dribbling, or assists. But it does account for the quality of every chance, so if his teammates were handing him easy ones he’d have a high xG and average overperformance, and he doesn’t.
Ronaldo is an excellent player and may be the second-best of all time, and being #55 here doesn’t change that, but it’s one more metric where Messi leads by a big margin!


