Season review
Liga Portugal 2025-26: the season reviewed
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 the quality of each side's chances, and what the previous model was saying through the season — including what it got wrong.
Final table
All 306 matches, with expected points (xPts) computed from each match's xG. The last column is the gap between real and expected points.
| # | Team | W | GD | Pts | xPts | Pts − xPts |
|---|---|---|---|---|---|---|
| 1 | 28 | +48 | 88 | 70.5 | +17.5 | |
| 2 | 25 | +65 | 82 | 71.7 | +10.3 | |
| 3 | 23 | +49 | 80 | 69.8 | +10.2 | |
| 4 | 16 | +28 | 59 | 58.3 | +0.7 | |
| 5 | 15 | +13 | 56 | 54.5 | +1.5 | |
| 6 | 13 | +9 | 50 | 52.3 | −2.3 | |
| 7 | 12 | −12 | 43 | 35.3 | +7.7 | |
| 8 | 12 | −12 | 42 | 44.2 | −2.2 | |
| 9 | 12 | −17 | 42 | 39.4 | +2.6 | |
| 10 | 10 | −3 | 39 | 39.5 | −0.5 | |
| 11 | 10 | −17 | 39 | 45.8 | −6.8 | |
| 12 | 9 | −9 | 36 | 45.7 | −9.7 | |
| 13 | 8 | −22 | 36 | 36.9 | −0.9 | |
| 14 | 9 | −8 | 34 | 40.5 | −6.5 | |
| 15 | 6 | −18 | 30 | 38.5 | −8.5 | |
| 16 | 6 | −26 | 30 | 32.0 | −2.0 | |
| 17 | 6 | −28 | 28 | 41.5 | −13.5 | |
| 18 | 3 | −40 | 21 | 28.5 | −7.5 |
Points above and below xG
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 took more or fewer points than their chances suggested, a gap that mixes finishing, goalkeeping and chance.
Porto took 88 points from an xG worth 70.5 — 17.5 above expectation, the largest gap in the league. By xG, Sporting and Porto were practically level (71.7 and 70.5). What xPts measures
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.
Real and expected points (xPts) by club
Actual points minus expected points (xPts). Furthest above: Porto (+17.5); furthest below: Tondela (−13.5). Every club's values are in the table below.
View as table: Actual points and expected points from xG, by team
| Team | Points | Expected (xPts) | Difference |
|---|---|---|---|
| Porto | 88 | 70.5 | +17.5 |
| Sporting | 82 | 71.7 | +10.3 |
| Benfica | 80 | 69.8 | +10.2 |
| Moreirense | 43 | 35.3 | +7.7 |
| Arouca | 42 | 39.4 | +2.6 |
| Famalicão | 56 | 54.5 | +1.5 |
| Sp. Braga | 59 | 58.3 | +0.7 |
| Estoril | 39 | 39.5 | −0.5 |
| Rio Ave | 36 | 36.9 | −0.9 |
| Casa Pia | 30 | 32.0 | −2.0 |
| Vitória | 42 | 44.2 | −2.2 |
| Gil Vicente | 50 | 52.3 | −2.3 |
| Nacional | 34 | 40.5 | −6.5 |
| Alverca | 39 | 45.8 | −6.8 |
| AVS | 21 | 28.5 | −7.5 |
| Estrela | 30 | 38.5 | −8.5 |
| Santa Clara | 36 | 45.7 | −9.7 |
| Tondela | 28 | 41.5 | −13.5 |
Pts − xPts is not a clean split between luck and skill: it mixes finishing, goalkeeping and chance. Finishing well is a skill; the open question is how much of it repeats next year.
The title race, matchday by matchday
The championship probability the previous model assigned at each forecast, each one 50,000 simulated seasons.
Chance of the title, forecast by forecast
The forecasts stop at matchday 31: the last 3 rounds were never simulated. Porto won the title.
View as table: Title probability by matchday
| Matchday | Forecast | Porto | Sporting | Benfica |
|---|---|---|---|---|
| 4 | reconstructed | 66% | 25% | 8.7% |
| 6 | reconstructed | 64% | 34% | 2.3% |
| 8 | reconstructed | 66% | 30% | 3.6% |
| 10 | reconstructed | 68% | 28% | 3.8% |
| 12 | reconstructed | 74% | 25% | 1.5% |
| 14 | reconstructed | 80% | 19% | 1.2% |
| 16 | reconstructed | 83% | 16% | 1.2% |
| 18 | reconstructed | 85% | 14% | 1.0% |
| 20 | reconstructed | 71% | 28% | 1.1% |
| 22 | reconstructed | 73% | 25% | 1.5% |
| 23 | published | 66% | 33% | 1.6% |
| 24 | published | 67% | 32% | 1.7% |
| 25 | published | 73% | 26% | 1.0% |
| 26 | published | 77% | 22% | 0.7% |
| 27 | published | 86% | 14% | 0.3% |
| 28 | published | 72% | 27% | 0.4% |
| 29 | published | 78% | 22% | <0.1% |
| 30 | published | 95% | 4.6% | 0.1% |
| 31 | published | >99% | 0.2% | <0.1% |
The model's report card
The part that matters: what the model got right, and what it got wrong.
There were 19 forecasts, all from the previous model, used until August 2026.
The 9 for matchdays 23–31 were published at the time, after each matchday.
The 10 for matchdays 4, 6, 8, 10, 12, 14, 16, 18, 20 and 22 were never published at the time: they were generated afterwards, in one batch, on 4 March 2026. The files do not record which matches each one was fitted on, so read them as reconstructions, not as forecasts made at the time.
The model publishing the 2026-27 forecasts is a different one, evaluated on model vs market.
| Matchday | Porto champion | Mean error on final points |
|---|---|---|
| 4reconstructed | 66% | 3.4 |
| 6reconstructed | 64% | 3.5 |
| 8reconstructed | 66% | 3.4 |
| 10reconstructed | 68% | 3.5 |
| 12reconstructed | 74% | 3.1 |
| 14reconstructed | 80% | 3.6 |
| 16reconstructed | 83% | 3.2 |
| 18reconstructed | 85% | 3.4 |
| 20reconstructed | 71% | 3.8 |
| 22reconstructed | 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 | >99% | 1.7 |
Where we were wrong
The most persistent error was Arouca. In the reconstructed matchday 16 forecast, 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 the reconstructed matchday 8 forecast, 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.
The small print
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 for matchdays 23–31 come from the files published at the time, exactly as they stood, with no later recalculation. Those for matchdays 4, 6, 8, 10, 12, 14, 16, 18, 20 and 22 were generated afterwards, on 4 March 2026. All come from the previous model. xG from FotMob.