Methodology
The foundation of each football club’s strength rating is derived from their GxG and GAxGA ratios, introduced in my previous blog post. Here is a quick overview of how each club’s strength is calculated:
- After each match, the team’s actual goals and expected goals are used to determine their GxG and GAxGA values.
- These values are then adjusted based on the opponent’s strength and whether the match was played at home or away.
- Lastly, an exponential moving average (EMA) is applied to these values to establish a solid baseline for each team’s true strength within its own league.
The next challenge I faced was comparing clubs from completely different leagues. This is where the clubelo.com ratings proved incredibly helpful. They provide Elo ratings for thousands of clubs, along with a league average. Using these averages, I’m able to account for the variations in overall league strength. For instance, the English Premier League stands out as the strongest, while Serie A, La Liga, and the Bundesliga are roughly the same strength.
Armed with this data, it was now possible to compare teams across different leagues and even simulate hypothetical matchups between them.
Strength Ratings
Determining how to present individual team strength ratings was a bit tricky. One initial idea was to follow Opta’s method, assigning the best team a rating of ‘100’ and adjusting other teams accordingly.
I also considered using a star-based system, similar to the ones in EA Sports’ FIFA, with 5 stars for top clubs and 4 stars for Europa League-level teams. However, this approach made it hard to distinguish between teams that shared the same star rating, so I set that idea aside.

In the end, I decided to use Nate Silver’s “Soccer Power Index” (SPI) concept. The idea is to benchmark every team’s performance against an average team on neutral ground, then apply a Poisson distribution to determine how many points they would earn. By definition, this model shows how many points a club would score against this imaginary opponent. For example, a team with a strength rating of 80 would earn 80 percent of all the possible points against the baseline team.
One challenge remained: teams with strong defenses but weaker offenses—like Everton, Union Berlin, or Real Sociedad—ended up at a disadvantage with this method. They would often draw against the average opponent, while more offensively robust but defensively weaker teams might rack up wins (and losses), ultimately scoring more points on average. To fix this issue, I decided to take the midpoint of the offensive and defensive ratings to calculate the final strength rating, resulting in a fairer representation of each team’s true capabilities. With that change, it is now possible to show accurate strength ratings for each team across all leagues:
Premier League Forecast
Team | Strength | Win Premier League | UCL Qualification | Relegation | Points | xGD |
---|---|---|---|---|---|---|
![]() |
88.6 | >99% |
100% |
– |
88 | 52 |
![]() |
87.9 | <1% |
>99% |
– |
76 | 37 |
![]() |
78.5 | – |
73% |
– |
68 | 17 |
![]() |
84.9 | – |
58% |
– |
66 | 24 |
![]() |
80.7 | – |
29% |
– |
64 | 14 |
![]() |
80.6 | – |
26% |
– |
63 | 19 |
![]() |
79.6 | – |
9% |
– |
61 | 9 |
![]() |
80.8 | – |
4% |
– |
59 | 16 |
![]() |
77.1 | – |
<1% |
– |
56 | 4 |
![]() |
74.3 | – |
<1% |
– |
56 | -6 |
![]() |
80.5 | – |
<1% |
– |
53 | 4 |
![]() |
75.4 | – |
<1% |
– |
53 | 4 |
![]() |
72.3 | – |
– |
– |
47 | -7 |
![]() |
76.8 | – |
– |
– |
46 | 12 |
![]() |
75.8 | – |
– |
– |
45 | -6 |
![]() |
71.4 | – |
– |
– |
45 | -18 |
![]() |
70.3 | – |
– |
<1% |
37 | -20 |
![]() |
61.5 | – |
– |
>99% |
24 | -43 |
![]() |
58.9 | – |
– |
>99% |
23 | -51 |
![]() |
56.6 | – |
– |
100% |
15 | -61 |
Below, you’ll find the strength ratings for the top 20 clubs. The offensive rating indicates how many goals a team is likely to score against the hypothetical average opponent, while the defensive rating shows the average number of goals they would concede, so a lower number is better:
Football Club Strength Ratings

Pos | Team | Strength | Off | Def | League |
---|---|---|---|---|---|
1 | ![]() |
88.6 | 2.95 | 0.52 | Premier League |
2 | ![]() |
88.1 | 3.32 | 0.62 | La Liga |
3 | ![]() |
87.9 | 2.41 | 0.44 | Premier League |
4 | ![]() |
87.6 | 2.94 | 0.55 | Serie A |
5 | ![]() |
86.7 | 3.02 | 0.60 | Ligue 1 |
6 | ![]() |
86.5 | 2.77 | 0.55 | Bundesliga |
7 | ![]() |
85.2 | 2.74 | 0.59 | La Liga |
8 | ![]() |
84.9 | 2.60 | 0.56 | Premier League |
9 | ![]() |
83.4 | 2.76 | 0.66 | Serie A |
10 | ![]() |
83.3 | 2.44 | 0.57 | Bundesliga |
11 | ![]() |
83.2 | 2.38 | 0.56 | La Liga |
12 | ![]() |
82.7 | 2.25 | 0.55 | Serie A |
13 | ![]() |
81.3 | 2.11 | 0.55 | La Liga |
14 | ![]() |
80.8 | 2.35 | 0.63 | Premier League |
15 | ![]() |
80.7 | 2.40 | 0.64 | Premier League |
16 | ![]() |
80.6 | 2.37 | 0.64 | Premier League |
17 | ![]() |
80.5 | 2.17 | 0.59 | Premier League |
18 | ![]() |
79.8 | 2.13 | 0.59 | Serie A |
19 | ![]() |
79.6 | 2.24 | 0.63 | Premier League |
20 | ![]() |
79.4 | 2.44 | 0.70 | Ligue 1 |
21 | ![]() |
78.8 | 2.49 | 0.74 | La Liga |
22 | ![]() |
78.5 | 2.08 | 0.61 | Premier League |
23 | ![]() |
78.4 | 2.27 | 0.67 | Serie A |
24 | ![]() |
77.6 | 2.08 | 0.64 | Serie A |
25 | ![]() |
77.2 | 2.32 | 0.73 | Serie A |
26 | ![]() |
77.1 | 2.02 | 0.63 | Premier League |
27 | ![]() |
76.8 | 2.36 | 0.76 | Premier League |
28 | ![]() |
76.5 | 2.00 | 0.65 | Ligue 1 |
29 | ![]() |
76.4 | 2.17 | 0.70 | Bundesliga |
30 | ![]() |
76.4 | 2.12 | 0.68 | Serie A |
31 | ![]() |
75.8 | 1.67 | 0.57 | Premier League |
32 | ![]() |
75.8 | 2.22 | 0.74 | Ligue 1 |
33 | ![]() |
75.6 | 1.94 | 0.65 | Bundesliga |
34 | ![]() |
75.4 | 2.09 | 0.70 | Premier League |
35 | ![]() |
75.3 | 2.08 | 0.70 | Ligue 1 |
36 | ![]() |
75.2 | 2.15 | 0.73 | Bundesliga |
37 | ![]() |
74.9 | 2.17 | 0.75 | La Liga |
38 | ![]() |
74.7 | 2.12 | 0.74 | Serie A |
39 | ![]() |
74.3 | 2.06 | 0.73 | Premier League |
40 | ![]() |
74.3 | 1.98 | 0.70 | Bundesliga |
41 | ![]() |
74.0 | 1.87 | 0.67 | Ligue 1 |
42 | ![]() |
73.5 | 2.06 | 0.75 | Bundesliga |
43 | ![]() |
72.5 | 1.99 | 0.76 | La Liga |
44 | ![]() |
72.5 | 1.71 | 0.66 | Ligue 1 |
45 | ![]() |
72.3 | 1.95 | 0.75 | Premier League |
46 | ![]() |
72.0 | 1.70 | 0.66 | La Liga |
47 | ![]() |
71.7 | 1.92 | 0.75 | Bundesliga |
48 | ![]() |
71.4 | 1.84 | 0.73 | Ligue 1 |
49 | ![]() |
71.4 | 1.81 | 0.72 | Premier League |
50 | ![]() |
71.3 | 1.63 | 0.66 | Serie A |
51 | ![]() |
71.1 | 1.70 | 0.68 | Bundesliga |
52 | ![]() |
70.8 | 1.56 | 0.65 | La Liga |
53 | ![]() |
70.4 | 1.71 | 0.71 | Ligue 1 |
54 | ![]() |
70.4 | 1.58 | 0.66 | La Liga |
55 | ![]() |
70.3 | 1.83 | 0.75 | Premier League |
56 | ![]() |
70.2 | 1.54 | 0.65 | La Liga |
57 | ![]() |
70.2 | 1.76 | 0.73 | La Liga |
58 | ![]() |
69.9 | 1.80 | 0.75 | Serie A |
59 | ![]() |
69.8 | 1.61 | 0.69 | Serie A |
60 | ![]() |
69.7 | 1.89 | 0.80 | La Liga |
61 | ![]() |
69.3 | 1.73 | 0.74 | Ligue 1 |
62 | ![]() |
69.2 | 1.67 | 0.72 | Ligue 1 |
63 | ![]() |
69.2 | 1.72 | 0.74 | La Liga |
64 | ![]() |
68.5 | 1.91 | 0.85 | Bundesliga |
65 | ![]() |
68.2 | 1.74 | 0.78 | La Liga |
66 | ![]() |
68.1 | 1.43 | 0.67 | Bundesliga |
67 | ![]() |
67.0 | 1.68 | 0.79 | Serie A |
68 | ![]() |
66.4 | 1.73 | 0.83 | La Liga |
69 | ![]() |
66.0 | 1.80 | 0.88 | Bundesliga |
70 | ![]() |
64.4 | 1.64 | 0.84 | Ligue 1 |
71 | ![]() |
64.4 | 1.62 | 0.83 | Serie A |
72 | ![]() |
63.9 | 1.30 | 0.71 | Bundesliga |
73 | ![]() |
63.6 | 1.72 | 0.91 | Bundesliga |
74 | ![]() |
62.7 | 1.61 | 0.88 | La Liga |
75 | ![]() |
62.6 | 1.61 | 0.88 | Bundesliga |
76 | ![]() |
62.6 | 1.38 | 0.77 | Bundesliga |
77 | ![]() |
62.1 | 1.49 | 0.83 | Ligue 1 |
78 | ![]() |
61.9 | 1.67 | 0.95 | Serie A |
79 | ![]() |
61.7 | 1.70 | 0.97 | Bundesliga |
80 | ![]() |
61.5 | 1.53 | 0.87 | Premier League |
81 | ![]() |
61.5 | 1.54 | 0.88 | Bundesliga |
82 | ![]() |
61.2 | 1.45 | 0.84 | La Liga |
83 | ![]() |
61.0 | 1.56 | 0.91 | Serie A |
84 | ![]() |
60.6 | 1.41 | 0.84 | Serie A |
85 | ![]() |
60.5 | 1.42 | 0.84 | Serie A |
86 | ![]() |
59.2 | 1.42 | 0.88 | Serie A |
87 | ![]() |
59.2 | 1.52 | 0.94 | La Liga |
88 | ![]() |
58.9 | 1.42 | 0.89 | Premier League |
89 | ![]() |
58.7 | 1.32 | 0.84 | Serie A |
90 | ![]() |
58.0 | 1.34 | 0.87 | Ligue 1 |
91 | ![]() |
58.0 | 1.49 | 0.96 | Ligue 1 |
92 | ![]() |
56.6 | 1.46 | 0.99 | Premier League |
93 | ![]() |
56.2 | 1.45 | 1.00 | Ligue 1 |
94 | ![]() |
55.1 | 1.29 | 0.92 | Ligue 1 |
95 | ![]() |
54.7 | 1.44 | 1.04 | Ligue 1 |
96 | ![]() |
53.4 | 1.31 | 0.99 | La Liga |