OrcaScore
Upset index

Liga Portugal 2 upset index

Including the years before odds: the biggest upsets in history, the most chaotic seasons and the giant killers by our learning Elo model's pre-match probabilities. Index 100 = as many upsets as expected.

Matches with a clear favourite
3,901
Upsets
922
Upset rate
23.6%
Upset index
112

Filters

Model data: 2,476,630 matches with a clear favourite between 26 Apr 1970 and 7 Nov 2026 (learning Elo, pre-match state).

Biggest upsets

By the winner's pre-match chance (Elo model) — lowest first

  1. Liga Portugal 2 Famalicão2 FC Porto B4 Winner's pre-match chance 13%
  2. Liga Portugal 2 Famalicão1 SC Braga B2 Winner's pre-match chance 13%
  3. Liga Portugal 2 Feirense1 Varzim SC2 Winner's pre-match chance 13%
  4. Liga Portugal 2 Chaves1 Portimonense SAD2 Winner's pre-match chance 13%
  5. Liga Portugal 2 Portimonense SAD1 UD Oliveirense2 Winner's pre-match chance 13%
  6. Liga Portugal 2 SC Praiense0 Leixões SC1 Winner's pre-match chance 13%
  1. Arouca 2–3 FC Porto B Liga Portugal 2 · 29 Nov 2020 14%
  2. Académica Coimbra 1–2 Varzim SC Liga Portugal 2 · 1 Mar 2021 14%
  3. Famalicão 2–3 Benfica B Liga Portugal 2 · 10 Apr 2016 14%
  4. Paços de Ferreira 0–1 UD Oliveirense Liga Portugal 2 · 7 Apr 2019 14%
  5. Rio Ave 1–2 Académico Viseu FC Liga Portugal 2 · 31 Oct 2021 14%
  6. Feirense 0–2 SC Covilhã Liga Portugal 2 · 6 Feb 2023 14%
  7. B-SAD 0–2 UD Oliveirense Liga Portugal 2 · 24 Apr 2013 14%
  8. Santa Clara 1–2 Académico Viseu FC Liga Portugal 2 · 19 Oct 2016 14%
  9. Feirense 1–2 SC Braga B Liga Portugal 2 · 21 Feb 2016 15%
  10. Benfica B 1–2 Varzim SC Liga Portugal 2 · 6 Mar 2022 15%
  11. Leixões SC 0–1 SC Covilhã Liga Portugal 2 · 18 May 2013 15%
  12. Tondela 0–3 CD Aves Liga Portugal 2 · 6 May 2015 15%
  13. Real 0–1 Arouca Liga Portugal 2 · 27 Aug 2017 15%
  14. Santa Clara 0–1 Trofense Liga Portugal 2 · 17 Apr 2013 15%
  15. CD Aves 0–1 Clube Oriental de Lisboa Liga Portugal 2 · 21 Feb 2016 15%
  16. Paços de Ferreira 0–1 FC Porto B Liga Portugal 2 · 15 Dec 2018 15%
  17. Moreirense 0–1 UD Oliveirense Liga Portugal 2 · 1 Sep 2013 15%
  18. Feirense 1–2 Atletico CP Liga Portugal 2 · 4 Mar 2016 15%
  19. Real 1–2 Sporting CP B Liga Portugal 2 · 20 Aug 2017 16%
  20. Naval 1893 0–2 SC Braga B Liga Portugal 2 · 30 Jan 2013 16%
  21. Varzim SC 0–1 UD Oliveirense Liga Portugal 2 · 3 Oct 2015 16%
  22. Sporting CP B 2–3 Vitória SC B Liga Portugal 2 · 6 May 2015 16%
  23. Gil Vicente 0–1 AD Carregado Liga Portugal 2 · 31 Jan 2010 16%
  24. Benfica B 0–1 Freamunde Liga Portugal 2 · 29 Dec 2012 16%
  25. UD Oliveirense 3–2 Feirense Liga Portugal 2 · 9 Dec 2015 16%
  26. UD Oliveirense 0–2 CD Nacional Liga Portugal 2 · 19 Aug 2017 16%
  27. FC Porto B 0–1 Atletico CP Liga Portugal 2 · 16 Mar 2013 16%
  28. CD Mafra 1–2 SC Covilhã Liga Portugal 2 · 13 Jan 2019 16%
  29. Trofense 1–2 B-SAD Liga Portugal 2 · 4 Dec 2010 16%
  30. CS Marítimo 1–2 UD Oliveirense Liga Portugal 2 · 29 Dec 2024 16%
  31. Estoril 1–2 Boavista Liga Portugal 2 · 17 May 2009 16%
  32. Chaves 0–1 CD Aves Liga Portugal 2 · 31 Jan 2010 16%
  33. FC Porto B 0–2 Freamunde Liga Portugal 2 · 17 Apr 2013 16%
  34. Gil Vicente 1–2 Varzim SC Liga Portugal 2 · 24 Oct 2009 16%

Liga Portugal 2: by season

The most chaotic and most predictable seasons

Giant killers

Win more than expected as the underdog

Giant killers
Team Underdog wins Expected Index
Torreense 8/15 4.1 152
Chaves 19/51 13.3 146
FC Porto B 55/173 43.2 142
CD Nacional 14/38 9.7 142
CD Aves 22/67 16.5 141
Penafiel 53/182 45.8 130
Gondomar 4/11 2.5 126
Vizela 14/45 11.8 125
Académica Coimbra 17/59 14.6 125
Sporting CP B 23/80 20.4 124

Upset victims

Lose more than expected as the favourite

Upset victims
Team Losses as favourite Expected Index
Real 8/14 3.4 163
Boavista 5/7 1.8 152
Cova da Piedade 12/31 8.3 140
Atletico CP 12/33 8.5 138
Académico Viseu FC 45/148 37.9 132
Feirense 48/179 42.2 128
União de Leiria 19/63 16.3 126
FC Porto B 39/142 34.8 126
Vilaverdense FC 3/6 1.6 126
Benfica B 47/169 42.3 125
How is it calculated?
  • Probability: From pre-match 1X2 (or two-way) odds, with the bookmaker margin removed proportionally: p = (1/odds) / Σ(1/odds). The same formula as the stats hub's “upsets by odds” block.
  • Clear favourite and upset: Only matches with at least a 10-point gap between the home and away win probabilities count; if the favourite's opponent wins, it is an upset. Draws are not upsets. Winner's chance of 25% or less = big upset.
  • Ranking: The lower the winner's pre-match chance, the bigger the upset (surprise score = 100 × (1 − chance)).
  • Index: 100 × (actual upsets + 5) / (expected upsets + 5); expected = sum of the underdogs' win probabilities. The +5 pulls small samples towards 100. Teams have two directions: giant killing (winning as the underdog) and fragility (losing as the favourite).
  • Calibration: Expected values are scaled by the source's overall hit factor (0.86 in this view), so a systematic bias of the source does not shift every league the same way.
  • Historical (model): For past matches without odds, the probability comes from our learning Elo model replaying the full history chronologically and taking its state before the match (both teams need at least 15 matches; friendlies excluded). Never mixed with odds.