Lighter model — Hierarchical Poisson (goals only)
This is not the Primeira Liga model. Liga 2 gives us goals and nothing else — no shots on target, no xG, no squad values — so what runs here is the base version: a hierarchical Poisson fitted to results alone.
This page does not follow the 2026-27 Liga 2 season: its data are from 11 August 2026, before the season began. It shows 2025-26, which is finished, and what this model would have been saying while it ran.
Marítimo went up as champions on 66 points. The second slot came down to goal difference: Ac. Viseu and Torreense both finished on 59 points, and promotion went to the one with +25 against +13.
Final table — 2025-26
All 306 matches over 34 matchdays. Two up, two down.
| # | Club | J | W | D | L | DG | Pts |
|---|---|---|---|---|---|---|---|
| 1 | 34 | 20 | 6 | 8 | +21 | 66 | |
| 2 | 34 | 17 | 8 | 9 | +25 | 59 | |
| 3 | Torreense | 34 | 18 | 5 | 11 | +13 | 59 |
| 4 | FC Porto BB | 34 | 15 | 6 | 13 | −1 | 51 |
| 5 | Vizela | 34 | 14 | 9 | 11 | −1 | 51 |
| 6 | U. Leiria | 34 | 13 | 11 | 10 | +6 | 50 |
| 7 | Leixões | 34 | 15 | 5 | 14 | −9 | 50 |
| 8 | Feirense | 34 | 12 | 10 | 12 | −3 | 46 |
| 9 | Desp. Chaves | 34 | 13 | 6 | 15 | +2 | 45 |
| 10 | Benfica BB | 34 | 11 | 11 | 12 | −1 | 44 |
| 11 | Felgueiras | 34 | 11 | 11 | 12 | −4 | 44 |
| 12 | Lourosa | 34 | 11 | 10 | 13 | −8 | 43 |
| 13 | Sporting BB | 34 | 13 | 3 | 18 | +7 | 42 |
| 14 | Penafiel | 34 | 11 | 8 | 15 | −2 | 41 |
| 15 | Farense | 34 | 10 | 10 | 14 | −6 | 40 |
| 16 | Portimonense | 34 | 11 | 7 | 16 | −10 | 40 |
| 17 | Paços de Ferreira | 34 | 9 | 12 | 13 | −14 | 39 |
| 18 | Oliveirense | 34 | 8 | 10 | 16 | −15 | 34 |
The promotion race, from the inside
At matchday 9 the model gave Marítimo 16% and Ac. Viseu 6%. By matchday 25 those were 97% and 54%. That is how a race closes — slowly, and then all at once.
Promotion probability, matchday by matchday
In green, the two clubs that actually went up; in grey, the rest. Each point is an independent refit that saw only the matches played up to that matchday.
View as table: Promotion probability by checkpoint matchday
| Club | MD9 | MD17 | MD25 |
|---|---|---|---|
| Marítimo | 16% | 80% | 97% |
| Ac. Viseu | 6% | 25% | 54% |
| Vizela | 40% | 16% | 8% |
| Torreense | 19% | 3% | 7% |
| U. Leiria | 17% | 9% | 19% |
| Desp. Chaves | 17% | 12% | <1% |
The probabilistic table, matchday by matchday
Each block is an independent refit that saw only the matches played up to that matchday, followed by 50,000 simulations of the rest of the season. The last column shows where each club actually finished.
Matchday 9
81 matches seen, 225 simulated| Club | J | Pts | Final pts | 1st | Promotion | Relegation | Finished |
|---|---|---|---|---|---|---|---|
| Sporting BB | 9 | 19 | 58.4 ±8 | 36% | — | <1% | 13th |
| Vizela | 9 | 16 | 55.9 ±7 | 21% | 40% | <1% | 5th |
| Torreense | 9 | 17 | 52.2 ±7 | 8% | 19% | <1% | 3rd |
| U. Leiria | 9 | 15 | 51.4 ±7 | 7% | 17% | <1% | 6th |
| 9 | 14 | 51.3 ±7 | 7% | 16% | 1% | 1st | |
| Desp. Chaves | 9 | 14 | 51.1 ±7 | 7% | 17% | 1% | 9th |
| Farense | 9 | 12 | 50.5 ±7 | 6% | 15% | 2% | 15th |
| Felgueiras | 9 | 12 | 47.1 ±7 | 2% | 7% | 4% | 11th |
| 9 | 12 | 46.5 ±7 | 2% | 6% | 4% | 2nd | |
| Benfica BB | 9 | 10 | 43.8 ±7 | <1% | — | 9% | 10th |
| Feirense | 9 | 11 | 43.0 ±7 | <1% | 2% | 11% | 8th |
| Lourosa | 9 | 10 | 42.7 ±8 | <1% | 3% | 16% | 12th |
| Portimonense | 9 | 11 | 40.4 ±7 | <1% | <1% | 23% | 16th |
| Leixões | 9 | 10 | 40.2 ±7 | <1% | <1% | 22% | 7th |
| Paços de Ferreira | 9 | 8 | 40.2 ±7 | <1% | <1% | 21% | 17th |
| Penafiel | 9 | 9 | 39.6 ±7 | <1% | <1% | 23% | 14th |
| Oliveirense | 9 | 11 | 39.1 ±7 | <1% | <1% | 26% | 18th |
| FC Porto BB | 9 | 5 | 37.3 ±7 | <1% | — | 36% | 4th |
Matchday 17
153 matches seen, 153 simulated| Club | J | Pts | Final pts | 1st | Promotion | Relegation | Finished |
|---|---|---|---|---|---|---|---|
| 17 | 36 | 61.9 ±6 | 60% | 80% | — | 1st | |
| Sporting BB | 17 | 29 | 55.5 ±6 | 17% | — | <1% | 13th |
| 17 | 29 | 53.5 ±6 | 9% | 25% | <1% | 2nd | |
| Vizela | 17 | 25 | 51.7 ±6 | 5% | 16% | <1% | 5th |
| Desp. Chaves | 17 | 26 | 50.7 ±6 | 4% | 12% | <1% | 9th |
| U. Leiria | 17 | 25 | 49.9 ±6 | 3% | 9% | <1% | 6th |
| Lourosa | 17 | 24 | 47.0 ±6 | 1% | 5% | 3% | 12th |
| Torreense | 17 | 23 | 46.7 ±6 | <1% | 3% | 3% | 3rd |
| Felgueiras | 17 | 23 | 46.3 ±6 | <1% | 3% | 3% | 11th |
| Benfica BB | 17 | 22 | 45.6 ±6 | <1% | — | 4% | 10th |
| Farense | 17 | 20 | 45.5 ±6 | <1% | 2% | 5% | 15th |
| Feirense | 17 | 21 | 43.2 ±5 | <1% | <1% | 9% | 8th |
| FC Porto BB | 17 | 21 | 43.1 ±6 | <1% | — | 10% | 4th |
| Paços de Ferreira | 17 | 19 | 40.7 ±6 | <1% | <1% | 20% | 17th |
| Penafiel | 17 | 19 | 40.3 ±5 | <1% | <1% | 20% | 14th |
| Portimonense | 17 | 19 | 38.8 ±6 | <1% | <1% | 32% | 16th |
| Oliveirense | 17 | 18 | 36.9 ±5 | <1% | <1% | 43% | 18th |
| Leixões | 17 | 17 | 36.8 ±5 | — | <1% | 47% | 7th |
Matchday 25
225 matches seen, 81 simulated| Club | J | Pts | Final pts | 1st | Promotion | Relegation | Finished |
|---|---|---|---|---|---|---|---|
| 25 | 50 | 64.4 ±4 | 85% | 97% | — | 1st | |
| 25 | 44 | 57.1 ±4 | 10% | 54% | — | 2nd | |
| U. Leiria | 25 | 41 | 54.1 ±4 | 3% | 19% | — | 6th |
| Torreense | 25 | 39 | 51.9 ±4 | <1% | 7% | — | 3rd |
| Vizela | 25 | 38 | 51.6 ±4 | <1% | 8% | — | 5th |
| Sporting BB | 25 | 38 | 51.4 ±4 | <1% | — | — | 13th |
| FC Porto BB | 25 | 37 | 49.8 ±4 | <1% | — | <1% | 4th |
| Lourosa | 25 | 37 | 49.3 ±4 | <1% | 3% | <1% | 12th |
| Benfica BB | 25 | 34 | 46.3 ±4 | <1% | — | <1% | 10th |
| Desp. Chaves | 25 | 33 | 46.0 ±4 | <1% | <1% | <1% | 9th |
| Feirense | 25 | 32 | 43.6 ±4 | — | <1% | 3% | 8th |
| Leixões | 25 | 31 | 41.9 ±4 | — | <1% | 9% | 7th |
| Felgueiras | 25 | 29 | 41.1 ±4 | — | <1% | 11% | 11th |
| Farense | 25 | 28 | 41.0 ±4 | — | — | 12% | 15th |
| Penafiel | 25 | 29 | 39.7 ±4 | — | — | 15% | 14th |
| Paços de Ferreira | 25 | 27 | 38.3 ±4 | — | — | 33% | 17th |
| Oliveirense | 25 | 26 | 36.3 ±4 | — | — | 51% | 18th |
| Portimonense | 25 | 24 | 34.6 ±4 | — | — | 66% | 16th |
Who was actually good
Attack and defence estimated from the season's 306 matches, with opponent and home advantage already taken out. It is the model's read on the whole season, not on end-of-season form.
Offsets from the league average, on the model's log scale. Bars to the right are better: more goals scored in attack, fewer conceded in defence.
What this model does not have
The part worth reading before trusting a number. Written by the data exporter itself, not by hand.
- This is a lighter model than the Primeira Liga one. It uses goals only: no shots on target, no xG and no squad market values, because we do not hold that data for Liga 2.
- Without xG there are no expected points and no luck index — the two columns that separate merit from result in the Primeira pages.
- The fit pools recent seasons with equal weight and no time decay. A club that changed squad heavily gets the average of its recent years rather than its current form.
- B teams (Benfica B, FC Porto B, Sporting CP B) play but cannot be promoted. Their promotion probability is shown as “—”; the slot passing to the next eligible club is not simulated, so everyone else's promotion odds are slightly understated.
- Clubs just promoted from Liga 3 arrive with no history in this dataset. The hierarchical prior starts them at the league average, which is prudent but uninformative.
- Both teams' goals are treated as independent (plain Poisson), with no Dixon-Coles low-score correction and no shared component.
- The 2025-26 season is over. The probabilities shown come from refits that saw only matches played up to each checkpoint — no later result entered the fit — but they are a retrospective exercise, not a forecast published at the time.
Technical notes
Hierarchical Poisson model (Baio & Blangiardo, 2010) with per-club attack and defence, a shared home advantage and a sum-to-zero constraint, fitted by MCMC. Promotion is defined as finishing in the top two, relegation as the bottom two. B teams play but cannot go up, and the slot passing to the next eligible club is not simulated. Season fit diagnostics: max r̂ 1, min ESS 8171.