Upset index
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
- 390
- Upsets
- 77
- Upset rate
- 19.7%
- Upset index
- 98
Biggest upsets this week
Last 7 days, all sports
Biggest upsets this season
Current season of each competition, by odds
Filters
Model data: 2,473,330 matches with a clear favourite between 26 Apr 1970 and 6 Nov 2026 (learning Elo, pre-match state).
Biggest upsets
By the winner's pre-match chance (Elo model) — lowest first
-
Scottish Championship
Partick Thistle2
Greenock Morton3
Winner's pre-match chance 11%
-
Pernambucano
Chã Grande2
Central SC1
Winner's pre-match chance 12%
-
Primera División
Nacional Asunción0
Sportivo San Lorenzo2
Winner's pre-match chance 12%
-
UEFA Europa League
Bayer 04 Leverkusen0
Olympique de Marseille1
Winner's pre-match chance 13%
-
UEFA Conference League
Lincoln Red Imps1
HNK Hajduk Split0
Winner's pre-match chance 14%
-
Zambia Super League
Red Arrows0
Nkwazi1
Winner's pre-match chance 15%
-
Al Kuwait
2–3
Nasaf Qarshi
-
BSC Young Boys
3–5
FC Zürich
-
AS Dauphin Noir
0–1
FC Renaissance du Congo
-
UD Logroñés
0–1
Mirandés
-
Threave Rovers
6–1
Pollok FC
-
CF La Nucía
1–4
CF Intercity
-
Sportivo Trinidense
2–4
Rubio Ñu
-
FC Midtjylland
1–6
AFC Ajax
-
Gimnasia y Tiro de Salta
0–1
Quilmes Atlético Club
-
Swedru All Blacks United FC
1–2
Ashanti Gold
-
CD Coria
0–1
Arenas Club
-
Real Unión Club
0–3
Real Avilés
-
Chelsea U19
2–3
Tallinna FC Flora U19
-
FC Spartak Trnava
1–2
KFC Komárno
-
KF Teuta Durrës
0–1
FK Partizani
-
West Ham United
1–3
West Bromwich Albion
-
Sheriff U19
3–1
Farul Constanța U19
-
Sivasspor
1–2
Boluspor
-
Irtysh Pavlodar
2–0
FC Ordabasy
-
CA San Carlos de Maldonado
0–2
Boston River
-
Sint-Truidense VV
1–2
Oud-Heverlee Leuven
-
Kwara United
1–2
Bendel Insurance FC
-
Yongin City FC
4–2
Seoul E-Land FC
-
Guingamp
3–0
Saint-Étienne
-
Bodo/Glimt U19
2–1
Lille U19
-
Sarpsborg 08
2–4
Kristiansund BK
-
Jeonbuk Hyundai Motors
2–0
Johor Darul Ta'zim
-
St.Louis City
0–1
San Diego FC
-
Stellenbosch
0–2
Chippa United
-
Mumbai City FC
2–3
Sporting Delhi
-
AF Ufalya Simba
0–1
FC MK de Kinshasa
-
PSIM Yogyakarta
2–1
Borneo FC Samarinda
-
Sportivo San Lorenzo
2–1
Libertad
-
NK Croatia Zmijavci
2–3
GNK Dinamo Zagreb II
Upset index by league
100 = as many upsets as the probabilities predict; above is more chaotic, below more predictable
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.