After 69 matches, this season's numbers carry only 32% attack / 18% defence of each team's rating; the rest is last season, regressed. Barcelona win the title in 87% of 100,000 simulated seasons. Biggest gaps between points and chances: Real Betis (+6.2 pts over xPts) and Villarreal (−5.3).
| # | Team | Now | P | Pts | xPts | Proj | 10–90% | Title | Top 4 | Releg | Finishing position 1 → 20 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1st ● | 7 | 21 | 18.4 | 87.6 | 78–97 | 87% | 99.8% | 0% | ||
| 2 | 4th ▲2 | 7 | 15 | 16.5 | 73.7 | 64–83 | 9.2% | 89% | 0% | ||
| 3 | 2nd ▼1 | 7 | 16 | 12.8 | 66.4 | 56–77 | 1.9% | 62% | <0.1% | ||
| 4 | 3rd ▼1 | 7 | 16 | 9.8 | 65.8 | 56–76 | 1.6% | 59% | <0.1% | ||
| 5 | 9th ▲4 | 7 | 8 | 13.3 | 59.6 | 49–70 | 0.2% | 27% | 0.4% | ||
| 6 | 10th ▲4 | 6 | 8 | 12.2 | 58.0 | 47–69 | 0.2% | 23% | 0.8% | ||
| 7 | 6th ▼1 | 7 | 11 | 11.5 | 55.5 | 45–66 | 0.1% | 14% | 1.4% | ||
| 8 | 12th ▲4 | 7 | 8 | 7.7 | 53.5 | 43–64 | <0.1% | 9.6% | 2.7% | ||
| 9 | 8th ▼1 | 7 | 10 | 8.0 | 51.7 | 41–62 | <0.1% | 6.0% | 4.0% | ||
| 10 | 17th ▲7 | 6 | 5 | 6.4 | 49.2 | 39–60 | <0.1% | 3.7% | 7.6% | ||
| 11 | 5th ▼6 | 7 | 13 | 8.3 | 47.2 | 37–57 | <0.1% | 2.0% | 11% | ||
| 12 | 15th ▲3 | 7 | 7 | 9.6 | 45.9 | 36–56 | <0.1% | 1.4% | 14% | ||
| 13 | 13th ● | 7 | 8 | 9.1 | 45.7 | 36–56 | <0.1% | 1.4% | 15% | ||
| 14 | 14th ● | 7 | 7 | 8.7 | 44.2 | 34–55 | <0.1% | 1.0% | 19% | ||
| 15 | 7th ▼8 | 7 | 10 | 7.8 | 43.1 | 33–53 | 0% | 0.6% | 24% | ||
| 16 | 18th ▲2 | 7 | 5 | 7.5 | 41.7 | 32–52 | 0% | 0.4% | 30% | ||
| 17 | 11th ▼6 | 7 | 8 | 6.7 | 41.4 | 31–52 | 0% | 0.4% | 31% | ||
| 18 | 19th ▲1 | 7 | 4 | 5.8 | 41.4 | 31–52 | 0% | 0.4% | 31% | ||
| 19 | 16th ▼3 | 7 | 7 | 8.1 | 41.2 | 31–51 | 0% | 0.3% | 32% | ||
| 20 | 20th ● | 7 | 3 | 5.4 | 32.3 | 23–42 | 0% | <0.1% | 76% |
Ordered by expected final points. Proj = mean points across 100,000 simulated seasons; 10–90% = the range 80% of them land in. Arrows: current position → projected rank. Heat strip = probability of each finishing position (green = top 4, orange = relegation).
Best attack on current evidence: Barcelona (2.66 non-penalty xG per game against an average side). Best defence: Athletic Club (1.14 against). After 7 games the bars are wide: this season carries just 32% attack / 18% defence of every rating.
Ratings are per game against an average opponent at a neutral ground, adjusted for who each team has played and where. Widest bars: Athletic Club. The simulator draws every team's ratings from these bars before playing out each season, so the uncertainty feeds straight into the odds. (P) = promoted.
Real Betis have 16 points from chances worth 9.8: the biggest overperformance in the league (+6.2). Villarreal sit at the other end, −5.3 points short of what their chances earned. 8 of 20 sides are ahead of their xPts.
Expected points (xPts) = the points a team would average from the chances in each of its games. A big positive bar is the classic early-season mirage: finishing or goalkeeping running hot, which rarely lasts.
Today this season carries 32% attack / 18% defence of each rating. Attacking numbers outweigh last season after 15 games (8 to go); defensive numbers take 32 (25 to go), because what a side concedes swings more from game to game. Promoted sides start from a looser prior, so their own numbers already carry 32% attack / 20% defence.
Weight = games / (games + k), k fitted on the last 5 seasons. Rows run from last season (ring) to this season alone (diamond); the dot is the blend used. Interactive in the HTML version.
Sevilla are the clearest mirage: 5th in the table, 11th on expected points; Villarreal are the opposite: 9th in the table, 3rd on the chances; Real Madrid look like the real thing.
Above the dashed line a team has more points than its chances have earned; below it, fewer. Orange = mirage, teal = better than the table, green = numbers back the position.
Sevilla, Real Betis, Deportivo La Coruna have 13.1 more points between them than their chances support. Expect regression.
Villarreal, Espanyol, Athletic Club are 12.1 points short of their chances between them. The table should come to them.
Real Madrid, Alaves, Valencia: high in the table, and the chances say it is no fluke.
One rule: early in a season, trust the numbers only as much as they deserve. Every figure here is measured on La Liga's own last 5 seasons, not assumed.
Every match from 2021/22 to 2026/27: non-penalty expected goals (npxG) for and against, 1,900 historical matches plus 69 this season. Each team gets an attack and a defence rating, adjusted for the opponents it has faced and for home advantage (home sides average 1.53 npxG, away sides 1.16). Penalties are added back at 0.13 xG per team per game.
After 7 games, xG is still mostly noise, so each rating is a blend: games / (games + k) from this season, the rest from last season pulled 20% (attack) and 39% (defence) back toward average. k is measured on this league's own history: match-to-match noise divided by how much a team really changes between seasons. Result: k = 14.6 games for attack and 31.6 for defence, so today this season carries 32% attack / 18% defence.
Promoted teams have no top-flight last season, so they start from the average of the 12 sides promoted in the previous 4 seasons: 1.09 npxG for and 1.58 against per game. That prior is less certain (promoted defences vary a lot), so their own data counts faster: k = 14.6 attack, 28.7 defence.
100,000 full seasons. Each one first draws every team's attack and defence from its uncertainty range, then plays all 311 remaining fixtures with Poisson scorelines. Done in 4.2s of vectorised numpy.
Pure Poisson under-predicts draws: over 1,900 matches the real draw rate was 26.2% but the model gave 23.7%. A Dixon-Coles low-score correction fixes it. Maximum likelihood gives rho -0.006 (23.8% draws), which is not enough, so rho is calibrated to the real draw rate: rho -0.113, 26.2% on the history. Simulated draw rate for the rest of this season: 25.0% (Poisson alone: 22.8%).
Level on points, the head-to-head mini-league between the tied sides decides first (points, then goal difference), then overall goal difference and goals scored, as in La Liga. In 75% of simulated seasons that changed at least one finishing position versus a plain goal-difference tiebreak. Checks on this run: every team's finishing odds sum to 100%, title odds sum to 100% across the league, played + remaining = 38 for every side, and current points match the league table for all 20 teams.
Each side's weight on this season, its prior, this season's raw rating, the blend the simulator uses and the 80% uncertainty around it, all in npxG per game (attack / defence).
| Team | P | Att wt | Def wt | Prior | This season | Blend | 80% ± | Proj pts |
|---|---|---|---|---|---|---|---|---|
| Barcelona | 7 | 32% | 18% | 2.18 / 1.29 | 3.66 / 1.17 | 2.66 / 1.27 | ±0.20 / ±0.15 | 87.6 |
| Real Madrid | 7 | 32% | 18% | 1.75 / 1.22 | 2.47 / 0.99 | 1.99 / 1.18 | ±0.20 / ±0.15 | 73.7 |
| Atletico Madrid | 7 | 32% | 18% | 1.59 / 1.30 | 1.70 / 0.99 | 1.63 / 1.25 | ±0.20 / ±0.15 | 66.4 |
| Real Betis | 7 | 32% | 18% | 1.47 / 1.24 | 1.95 / 1.57 | 1.62 / 1.30 | ±0.20 / ±0.15 | 65.8 |
| Villarreal | 7 | 32% | 18% | 1.54 / 1.28 | 2.31 / 1.62 | 1.79 / 1.34 | ±0.20 / ±0.15 | 59.6 |
| Athletic Club | 6 | 29% | 16% | 1.31 / 1.19 | 1.68 / 0.91 | 1.42 / 1.14 | ±0.21 / ±0.15 | 58.0 |
| Alaves | 7 | 32% | 18% | 1.29 / 1.32 | 1.51 / 0.96 | 1.36 / 1.26 | ±0.20 / ±0.15 | 55.5 |
| Rayo Vallecano | 7 | 32% | 18% | 1.45 / 1.33 | 1.37 / 1.32 | 1.42 / 1.33 | ±0.20 / ±0.15 | 53.5 |
| Real Sociedad | 7 | 32% | 18% | 1.38 / 1.39 | 1.22 / 1.54 | 1.33 / 1.41 | ±0.20 / ±0.15 | 51.7 |
| Levante | 6 | 29% | 16% | 1.42 / 1.50 | 1.54 / 1.62 | 1.46 / 1.52 | ±0.21 / ±0.15 | 49.2 |
| Sevilla | 7 | 32% | 18% | 1.01 / 1.37 | 0.85 / 1.26 | 0.96 / 1.35 | ±0.20 / ±0.15 | 47.2 |
| Espanyol | 7 | 32% | 18% | 1.28 / 1.48 | 1.30 / 1.40 | 1.29 / 1.47 | ±0.20 / ±0.15 | 45.9 |
| Osasuna | 7 | 32% | 18% | 1.17 / 1.23 | 0.96 / 1.67 | 1.10 / 1.31 | ±0.20 / ±0.15 | 45.7 |
| Celta Vigo | 7 | 32% | 18% | 1.23 / 1.30 | 0.95 / 1.47 | 1.14 / 1.33 | ±0.20 / ±0.15 | 44.2 |
| Deportivo La Coruna P | 7 | 32% | 20% | 1.09 / 1.58 | 1.23 / 1.48 | 1.14 / 1.56 | ±0.20 / ±0.16 | 43.1 |
| Elche | 7 | 32% | 18% | 1.18 / 1.49 | 1.23 / 1.78 | 1.19 / 1.55 | ±0.20 / ±0.15 | 41.7 |
| Getafe | 7 | 32% | 18% | 0.93 / 1.19 | 0.81 / 1.41 | 0.89 / 1.23 | ±0.20 / ±0.15 | 41.4 |
| Valencia | 7 | 32% | 18% | 1.24 / 1.29 | 0.78 / 1.52 | 1.09 / 1.33 | ±0.20 / ±0.15 | 41.4 |
| Racing Santander P | 7 | 32% | 20% | 1.09 / 1.58 | 1.17 / 1.55 | 1.12 / 1.58 | ±0.20 / ±0.16 | 41.2 |
| Malaga P | 7 | 32% | 20% | 1.09 / 1.58 | 0.62 / 1.71 | 0.94 / 1.61 | ±0.20 / ±0.16 | 32.3 |
P = promoted. Weight = games / (games + k): k 14.6 / 31.6 for established sides and 14.6 / 28.7 for promoted sides. Prior = last season's rating regressed toward average (or the promoted-team prior).