xPTS Gap
Actual points vs what xG simulations say they deserve
Data last updated Apr 21, 2026, 4:51 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 · 15 pts | 18 | 16▲2 | 3W 6D 21L | -59 | ☠ Cursed Scored 4 fewer than xG (27 from 30.54 xG). 12.8 pts below expected. | ||
| 2 | ![]() Auxerre Ligue 1 · 25 pts | 16 | 14▲2 | 5W 10D 15L | -47 | ☠ Cursed Scored 7 fewer than xG (25 from 31.79 xG). 11.1 pts below expected. | ||
| ↓ Unlucky | ||||||||
| 3 | ![]() Nice Ligue 1 · 29 pts | 15 | 11▲4 | 7W 8D 15L | -39 | ↓ Unlucky Scored 4 fewer than xG (34 from 38.07 xG). 4.6 pts below expected. | ||
| 4 | ![]() Nantes Ligue 1 · 20 pts | 17 | 18▼1 | 4W 8D 17L | -23 | ↓ Unlucky Scored 4 fewer than xG (25 from 28.69 xG). 10.8 pts below expected. | ||
| 5 | ![]() Le Havre Ligue 1 · 30 pts | 14 | 15▼1 | 6W 12D 12L | -20 | ↓ Unlucky Scored 9 fewer than xG (25 from 33.9 xG). 5.8 pts below expected. | ||
| — Neutral | ||||||||
| 6 | ![]() Monaco Ligue 1 · 50 pts | 7 | 4▲3 | 15W 5D 10L | -13 | — Neutral 4.1 points above expected. | ||
| 7 | ![]() Lille Ligue 1 · 54 pts | 3 | 2▲1 | 16W 6D 8L | -8 | — Neutral 4.5 points above expected. | ||
| 8 | ![]() Toulouse Ligue 1 · 37 pts | 11 | 10▲1 | 10W 7D 13L | -5 | — Neutral 3.5 points below expected. Close games going the wrong way. | ||
| 9 | ![]() Strasbourg Ligue 1 · 43 pts | 8 | 8 | 12W 7D 10L | +2 | — Neutral 0.6 points below expected. Close games going the wrong way. | ||
| 10 | ![]() Stade Brestois 29 Ligue 1 · 37 pts | 12 | 13▼1 | 10W 7D 12L | +4 | — Neutral 2.7 points below expected. Close games going the wrong way. | ||
| 11 | ![]() Paris FC Ligue 1 · 38 pts | 10 | 12▼2 | 9W 11D 10L | +8 | — Neutral 2.7 points above expected. | ||
| 12 | ![]() Lorient Ligue 1 · 41 pts | 9 | 9 | 10W 11D 9L | +12 | — Neutral 1.4 points above expected. | ||
| ↑ Lucky | ||||||||
| 13 | ![]() Marseille Ligue 1 · 52 pts | 6 | 5▲1 | 16W 4D 10L | +16 | ↑ Lucky Scored 4 more than xG. Clinical finishing earning 2.5 extra pts. | ||
| 14 | PAR Paris Saint Germain Ligue 1 · 63 pts | 1 | 1 | 20W 3D 5L | +16 | ↑ Lucky 4.0 points above expected. | ||
| 15 | ![]() Angers Ligue 1 · 34 pts | 13 | 17▼4 | 9W 7D 14L | +36 | ↑ Lucky 3.9 points above expected. | ||
| 16 | ![]() Rennes Ligue 1 · 53 pts | 5 | 7▼2 | 15W 8D 7L | +40 | ↑ Lucky Scored 4 more than xG. Clinical finishing earning 9.2 extra pts. | ||
| 17 | ![]() Lens Ligue 1 · 62 pts | 2 | 3▼1 | 20W 2D 7L | +40 | ↑ Lucky 11.1 points above expected. | ||
| ✦ Blessed | ||||||||
| 18 | ![]() Lyon Ligue 1 · 54 pts | 4 | 6▼2 | 16W 6D 8L | +42 | ✦ Blessed 10.4 points above expected. | ||
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