Season review
FC Porto won Liga Portugal 2025-26 with 88 points: 28 wins, four draws, two defeats. Behind them sat two teams with strange seasons. Sporting scored 89 goals — 23 more than the champions — and finished with the best goal difference in the league, +65, six points back. Benfica went all 34 matchdays without losing once and finished third, 11 draws costing them more than any defeat could have.
At the bottom, Tondela and AVS went down. This page puts together three things: the final table, what xG says about who deserved what they got, and what our model was saying while the season ran — including what it got wrong.
All 306 matches, with expected points (xPts) computed from each match's xG. The “Luck” column is the gap between real and expected points.
| # | Team | W | D | L | GD | Pts | xPts | Luck |
|---|---|---|---|---|---|---|---|---|
| 1 | POR | 28 | 4 | 2 | +48 | 88 | 70.5 | +17.5 |
| 2 | SCP | 25 | 7 | 2 | +65 | 82 | 71.7 | +10.3 |
| 3 | SLBunbeaten | 23 | 11 | 0 | +49 | 80 | 69.8 | +10.2 |
| 4 | BRA | 16 | 11 | 7 | +28 | 59 | 58.3 | +0.7 |
| 5 | FAM | 15 | 11 | 8 | +13 | 56 | 54.5 | +1.5 |
| 6 | GIL | 13 | 11 | 10 | +9 | 50 | 52.3 | −2.3 |
| 7 | MOR | 12 | 7 | 15 | -12 | 43 | 35.3 | +7.7 |
| 8 | VSC | 12 | 6 | 16 | -12 | 42 | 44.2 | −2.2 |
| 9 | ARO | 12 | 6 | 16 | -17 | 42 | 39.4 | +2.6 |
| 10 | EST | 10 | 9 | 15 | -3 | 39 | 39.5 | −0.5 |
| 11 | ALV | 10 | 9 | 15 | -17 | 39 | 45.8 | −6.8 |
| 12 | STC | 9 | 9 | 16 | -9 | 36 | 45.7 | −9.7 |
| 13 | RIO | 8 | 12 | 14 | -22 | 36 | 36.9 | −0.9 |
| 14 | NAC | 9 | 7 | 18 | -8 | 34 | 40.5 | −6.5 |
| 15 | EAM | 6 | 12 | 16 | -18 | 30 | 38.5 | −8.5 |
| 16 | CPA | 6 | 12 | 16 | -26 | 30 | 32.0 | −2.0 |
| 17 | TON | 6 | 10 | 18 | -28 | 28 | 41.5 | −13.5 |
| 18 | AVS | 3 | 12 | 19 | -40 | 21 | 28.5 | −7.5 |
For every match, both teams' xG is turned into win, draw and loss probabilities, and from there into expected points. Summed over the season, it shows who converted better than their chances suggested — and who was punished.
Porto took 88 points from an xG worth 70.5 — 17.5 above expectation, the largest gap in the league. The xG table had Sporting first.
Tondela went down on 28 points. xG gave them 41.5 — 10th place. They scored 27 goals from chances worth 40.3: the worst finishing in the league, and the difference between staying up and going down.
Sporting scored 89 goals from 72.4 xG — +16.6 goals above expectation. It was not enough: the title turned on wins, and Porto took three more.
POR
SCP
SLB
MOR
ARO
FAM
BRA
EST
RIO
CPA
VSC
GIL
NAC
ALV
AVS
EAM
STC
TONxG measures chance quality, not moral desert. Finishing well is a skill; the open question is how much of it repeats next year.
The championship probability the model assigned at each published forecast. Every point is a 50,000-season simulation run at that moment, with no knowledge of the future.
Published forecasts stop at matchday 31 — the last three rounds were never simulated. Porto won the title.
The part that matters: what the model got right, and what it got wrong. Nineteen forecasts were published between matchday 4 and matchday 31.
| Matchday | Porto champion | Mean error on final points |
|---|---|---|
| 4 | 66% | 3.4 |
| 6 | 64% | 3.5 |
| 8 | 66% | 3.4 |
| 10 | 68% | 3.5 |
| 12 | 74% | 3.1 |
| 14 | 80% | 3.6 |
| 16 | 83% | 3.2 |
| 18 | 85% | 3.4 |
| 20 | 71% | 3.8 |
| 22 | 73% | 3.7 |
| 23 | 66% | 3.4 |
| 24 | 67% | 3.3 |
| 25 | 73% | 3.2 |
| 26 | 77% | 2.7 |
| 27 | 86% | 2.5 |
| 28 | 72% | 2.2 |
| 29 | 78% | 2.4 |
| 30 | 95% | 1.9 |
| 31 | 100% | 1.7 |
The most persistent error was Arouca. At matchday 16 the model projected them to finish on 29.6 points and gave them a 33% chance of relegation; they finished on 42, in ninth. Twelve points of error on a single club — the largest of the season — and a relegation alarm that never had grounds.
The model was also steadily too harsh on AVS: even in the final forecast it had them on 15.6 points, and they made 21. Down they went — but the model had treated it as settled since matchday 8, a confidence one season is not enough to justify.
And there is a tension this page does not resolve: the model reads results, and the results said Porto were the best team. xG says the best team was Sporting. Both can be right — just not at once.
Final standings from the season's 306 matches. xPts are computed match by match with the aggregate Poisson method over each team's xG (34 matches per team, full coverage), and do not use the Bayesian model's parameters — it is an independent read. The probabilities come from the files we published between matchdays 4 and 31, exactly as they stood then, with no later recalculation. xG from SofaScore.