xPTS Gap
Actual points vs what xG simulations say they deserve
Most Cursed
- 1
Metz-29.4 - 2
Nantes-28.9 - 3
Stade Brestois 29-11.8 - 4
Le Havre-11.1 - 5
Nice-10.7
Most Blessed
- 1
Rennes+22 - 2
Lens+20.4 - 3
Lyon+16 - 4Paris Saint Germain+13
- 5
Marseille+8.2
Data last updated May 1, 2026, 7:00 PM UTC
Ligue 1 is the most tactically compact of the top 5 leagues, which makes the margins between luck and skill even tighter. The CURSD Luck Score (CLS) tracks all 18 teams using the same 7-signal model as the other football leagues: xPTS delta from Poisson match simulation (25%), finishing luck above or below expected conversion (18%), defensive luck, shot volume dominance, discipline (cards variance), injury burden, and opponent scheduling strength. In a league where PSG's resource advantage compresses the table, the CLS reveals which mid-table teams are actually performing at European level and which relegation candidates are just running hot.
| RK | Team | Pos | LAS | Record | CLS | Trend | Highlight | Share |
|---|---|---|---|---|---|---|---|---|
| ☠ Cursed | ||||||||
| 1 | ![]() Metz Ligue 1 · 17 pts | 18 | 18 | 3W 8D 23L | -69 | ☠ Cursed 14.6 points below expected. Close games going the wrong way. | ||
| 2 | ![]() Nantes Ligue 1 · 23 pts | 17 | 16▲1 | 5W 8D 20L | -54 | ☠ Cursed Scored 7 fewer than xG (29 from 36.42 xG). 14.3 pts below expected. | ||
| ↓ Unlucky | ||||||||
| 3 | ![]() Nice Ligue 1 · 36 pts | 13 | 13 | 8W 12D 16L | -31 | ↓ Unlucky 5.2 points below expected. Close games going the wrong way. | ||
| 4 | ![]() Le Havre Ligue 1 · 35 pts | 15 | 14▲1 | 7W 14D 13L | -20 | ↓ Unlucky Scored 6 fewer than xG (32 from 38.42 xG). 5.3 pts below expected. | ||
| 5 | ![]() Stade Brestois 29 Ligue 1 · 39 pts | 12 | 12 | 10W 9D 15L | -18 | ↓ Unlucky 5.8 points below expected. Close games going the wrong way. | ||
| 6 | ![]() Auxerre Ligue 1 · 34 pts | 16 | 15▲1 | 8W 10D 16L | -18 | ↓ Unlucky 5.3 points below expected. Close games going the wrong way. | ||
| 7 | ![]() Lille Ligue 1 · 61 pts | 3 | 2▲1 | 18W 7D 9L | -18 | ↓ Unlucky 3.7 points above expected. | ||
| — Neutral | ||||||||
| 8 | RED RED Star FC 93 Ligue 1 · 0 pts | 21 | 20▲1 | undefinedW 0D 1L | -11 | — Neutral 1.0 points below expected. Close games going the wrong way. | ||
| 9 | ![]() Monaco Ligue 1 · 54 pts | 7 | 5▲2 | 16W 6D 12L | -9 | — Neutral 3.7 points above expected. | ||
| 10 | ![]() Toulouse Ligue 1 · 44 pts | 10 | 9▲1 | 12W 8D 13L | -5 | — Neutral 1.7 points below expected. Close games going the wrong way. | ||
| 11 | ![]() Paris FC Ligue 1 · 44 pts | 11 | 11 | 11W 11D 12L | +4 | — Neutral 2.3 points above expected. | ||
| 12 | ![]() Lorient Ligue 1 · 45 pts | 9 | 10▼1 | 11W 12D 11L | +7 | — Neutral 0.8 points below expected. Close games going the wrong way. | ||
| 13 | ![]() Marseille Ligue 1 · 59 pts | 5 | 4▲1 | 18W 5D 11L | +13 | — Neutral 4.1 points above expected. | ||
| ↑ Lucky | ||||||||
| 14 | ![]() Strasbourg Ligue 1 · 53 pts | 8 | 8 | 15W 8D 11L | +20 | ↑ Lucky Scored 4 more than xG. Clinical finishing earning 3.1 extra pts. | ||
| 15 | ![]() Angers Ligue 1 · 36 pts | 14 | 17▼3 | 9W 9D 16L | +21 | ↑ Lucky 2.9 points above expected. | ||
| 16 | ROD Rodez Ligue 1 · 3 pts | 19 | 19 | 1W 0D 0L | +23 | ↑ Lucky 2.0 points above expected. | ||
| 17 | SAI Saint Etienne Ligue 1 · 1 pts | 20 | 21▼1 | undefinedW 1D 1L | +27 | ↑ Lucky 1.0 points below expected. Close games going the wrong way. | ||
| 18 | ![]() Lyon Ligue 1 · 60 pts | 4 | 6▼2 | 18W 6D 10L | +28 | ↑ Lucky 8.2 points above expected. | ||
| 19 | PAR Paris Saint Germain Ligue 1 · 76 pts | 1 | 1 | 24W 4D 6L | +29 | ↑ Lucky 6.7 points above expected. | ||
| 20 | ![]() Lens Ligue 1 · 70 pts | 2 | 3▼1 | 22W 4D 8L | +33 | ↑ Lucky 10.3 points above expected. | ||
| ✦ Blessed | ||||||||
| 21 | ![]() Rennes Ligue 1 · 59 pts | 6 | 7▼1 | 17W 8D 9L | +48 | ✦ Blessed Scored 5 more than xG. Clinical finishing earning 11.0 extra pts. | ||
How each team's CLS has changed throughout the season
Above zero = lucky. Below zero = unlucky. Scale: -100 (cursed) to +100 (blessed).
The CLS combines several signals. Pick one to see which Ligue 1 teams are getting robbed (or blessed) on that signal individually.
Actual points vs what xG simulations say they deserve
Metz-29.4
Nantes-28.9
Stade Brestois 29-11.8
Le Havre-11.1
Nice-10.7
Rennes+22
Lens+20.4
Lyon+16
Marseille+8.2