Vantage
A football prediction engine that blends machine learning, ELO ratings, and market consensus to forecast match outcomes across club and international competitions.
Predicting football outcomes is inherently difficult. Form fluctuates, context matters, and the gap between perception and reality in team performance is often wider than expected. Any single approach — whether purely statistical or entirely market-based — leaves blind spots.
Vantage approaches this as a multi-signal forecasting problem. It combines three distinct probability models, calibrates them into unified predictions, and records every forecast in a versioned ledger. The engine is used for making predictions for the Premier League season and the World Cup, with every forecast recorded in a versioned ledger and settled once results are available.
Performance
Premier League and World Cup ledger results, with 140 settled of 142 tracked predictions.
Performance Trend
After 140 settled predictions, cumulative accuracy is 62.9% and the average Brier score is 0.183. Across the recorded period, cumulative accuracy ranged from 50.0% to 100.0%.
Methodology
XGBoost
A gradient-boosted machine learning model trained on historical match data. It ingests signals like team form, head-to-head records, home and away performance splits, goals scored and conceded, and rest periods between fixtures, among other variables. The model learns non-linear patterns and interaction effects that simpler statistical methods miss.
ELO Ratings
A dynamic rating system where teams gain or lose points after each result based on opponent strength and venue advantage. The rating gap between two teams translates directly into a win probability, providing a clean, time-tested baseline independent of machine learning.
Market Consensus
The collective opinion implied by market prices, treated here purely as a forecasting signal. Markets incorporate dispersed information — injuries, tactical news, and public sentiment — that is hard to capture in structured datasets. It acts as a "wisdom of crowds" baseline to ground the engine's predictions.
Hybrid Calibration
The three probability sets are blended and passed through a calibration layer that corrects for overconfidence. The output is a calibrated set of probabilities for home win, draw, and away win — designed to mean what they say. An 80% prediction should correspond to roughly an 80% long-run hit rate.
Evolution
Vantage is designed to adapt. Over the course of a season, models are retrained as new data becomes available, blend weights are refined, and calibration is tuned. Each season's learnings feed into the next. The World Cup run is the next live test: a different match environment, shorter competition window, and a fresh ledger to evaluate how the engine transfers beyond the Premier League.
Ledger
*Eventual winner forecasts predict who advances from knockout matches after regulation, extra time, and penalties; draws are not forecast outcomes. Begins with Brazil vs Japan on June 29, 2026.
Predictions
Upcoming fixtures, nearest first.
| Kickoff Time | Fixture | Model Prediction | Actual Result | Brier Score |
|---|---|---|---|---|
| France vs England* | France (77.0%) | Pending | - | |
| Spain vs Argentina* | Argentina (52.0%) | Pending | - |
Settled
Completed fixtures, newest first.
| Kickoff Time | Fixture | Model Prediction | Actual Result | Brier Score |
|---|---|---|---|---|
| England vs Argentina* | Argentina (56.8%) | Argentina1-2 | 0.1244 | |
| France vs Spain* | France (72.9%) | Spain0-2 | 0.3544 | |
| Argentina vs Switzerland* | Argentina (79.2%) | Argentina3-1 | 0.0289 | |
| Norway vs England* | England (67.0%) | England1-2 | 0.0726 | |
| Spain vs Belgium* | Spain (61.2%) | Spain2-1 | 0.1004 | |
| France vs Morocco* | France (71.9%) | France2-0 | 0.0528 | |
| Switzerland vs Colombia* | Colombia (56.4%) | Switzerland0-0(4-3 pens) | 0.2119 | |
| Argentina vs Egypt* | Argentina (80.3%) | Argentina3-2 | 0.0257 | |
| United States vs Belgium* | Belgium (57.8%) | Belgium1-4 | 0.1190 | |
| Portugal vs Spain* | Portugal (58.2%) | Spain0-1 | 0.2259 | |
| Mexico vs England* | England (60.6%) | England2-3 | 0.1038 | |
| Brazil vs Norway* | Brazil (80.6%) | Norway1-2 | 0.4331 | |
| Paraguay vs France* | France (69.2%) | France0-1 | 0.0631 | |
| Canada vs Morocco* | Morocco (61.1%) | Morocco0-3 | 0.1008 | |
| Colombia vs Ghana* | Colombia (78.8%) | Colombia1-0 | 0.0300 | |
| Argentina vs Cape Verde* | Argentina (80.1%) | Argentina3-2 | 0.0265 | |
| Australia vs Egypt* | Egypt (53.5%) | Egypt1-1(2-4 pens) | 0.1440 | |
| Switzerland vs Algeria* | Switzerland (62.2%) | Switzerland2-0 | 0.0954 | |
| Portugal vs Croatia* | Portugal (57.7%) | Portugal2-1 | 0.1191 | |
| Spain vs Austria* | Spain (80.0%) | Spain3-0 | 0.0266 | |
| United States vs Bosnia and Herzegovina* | United States (66.4%) | United States2-0 | 0.0754 | |
| Belgium vs Senegal* | Belgium (75.7%) | Belgium3-2 | 0.0393 | |
| England vs Congo DR* | England (79.2%) | England2-1 | 0.0289 | |
| Mexico vs Ecuador* | Mexico (71.8%) | Mexico2-0 | 0.0529 | |
| France vs Sweden* | France (76.7%) | France3-0 | 0.0361 | |
| Ivory Coast vs Norway* | Ivory Coast (79.7%) | Norway1-2 | 0.4235 | |
| Netherlands vs Morocco* | Netherlands (65.6%) | Morocco1-1(2-3 pens) | 0.2870 | |
| Germany vs Paraguay* | Germany (76.2%) | Paraguay1-1(3-4 pens) | 0.3870 | |
| Brazil vs Japan* | Brazil (70.4%) | Brazil2-1 | 0.0585 | |
| Algeria vs Austria | Algeria (62.6%) | Draw3-3 | 0.3704 | |
| Jordan vs Argentina | Argentina (55.6%) | Argentina1-3 | 0.1002 | |
| Colombia vs Portugal | Colombia (49.4%) | Draw0-0 | 0.3463 | |
| Congo DR vs Uzbekistan | Congo DR (41.8%) | Congo DR3-1 | 0.1788 | |
| Panama vs England | England (56.1%) | England0-2 | 0.0977 | |
| Croatia vs Ghana | Croatia (59.8%) | Croatia2-1 | 0.0815 | |
| Egypt vs Iran | Iran (45.5%) | Draw1-1 | 0.3554 | |
| New Zealand vs Belgium | Belgium (43.6%) | Belgium1-5 | 0.1659 | |
| Cape Verde vs Saudi Arabia | Cape Verde (44.7%) | Draw0-0 | 0.3400 | |
| Uruguay vs Spain | Spain (53.3%) | Spain0-1 | 0.1109 | |
| Norway vs France | France (56.6%) | France1-4 | 0.0959 | |
| Senegal vs Iraq | Senegal (61.1%) | Senegal5-0 | 0.0760 | |
| Turkiye vs United States | United States (52.8%) | Turkiye3-2 | 0.2716 | |
| Paraguay vs Australia | Paraguay (64.4%) | Draw0-0 | 0.3879 | |
| Japan vs Sweden | Sweden (44.0%) | Draw1-1 | 0.3387 | |
| Tunisia vs Netherlands | Netherlands (56.2%) | Netherlands1-3 | 0.0974 | |
| Ecuador vs Germany | Germany (51.4%) | Ecuador2-1 | 0.2480 | |
| Curacao vs Ivory Coast | Ivory Coast (50.1%) | Ivory Coast0-2 | 0.1313 | |
| Czechia vs Mexico | Mexico (45.2%) | Mexico0-3 | 0.1568 | |
| South Africa vs South Korea | South Africa (59.1%) | South Africa1-0 | 0.0843 | |
| Scotland vs Brazil | Brazil (53.9%) | Brazil0-3 | 0.1080 | |
| Morocco vs Haiti | Morocco (62.4%) | Morocco4-2 | 0.0707 | |
| Switzerland vs Canada | Switzerland (56.1%) | Switzerland2-1 | 0.0979 | |
| Bosnia and Herzegovina vs Qatar | Bosnia and Herzegovina (59.4%) | Bosnia and Herzegovina3-1 | 0.0836 | |
| Colombia vs Congo DR | Colombia (49.0%) | Colombia1-0 | 0.1298 | |
| Panama vs Croatia | Croatia (42.5%) | Croatia0-1 | 0.1660 | |
| England vs Ghana | England (42.7%) | Draw0-0 | 0.2784 | |
| Portugal vs Uzbekistan | Portugal (48.9%) | Portugal5-0 | 0.1303 | |
| Jordan vs Algeria | Algeria (37.8%) | Algeria1-2 | 0.1953 | |
| Norway vs Senegal | Senegal (44.1%) | Norway3-2 | 0.2495 | |
| France vs Iraq | France (48.4%) | France3-0 | 0.1331 | |
| Argentina vs Austria | Argentina (48.9%) | Argentina2-0 | 0.1303 | |
| New Zealand vs Egypt | New Zealand (43.7%) | Egypt1-3 | 0.2292 | |
| Uruguay vs Cape Verde | Uruguay (48.7%) | Draw2-2 | 0.2863 | |
| Belgium vs Iran | Belgium (41.9%) | Draw0-0 | 0.2774 | |
| Spain vs Saudi Arabia | Spain (48.4%) | Spain4-0 | 0.1332 | |
| Tunisia vs Japan | Japan (37.6%) | Japan0-4 | 0.1964 | |
| Ecuador vs Curacao | Ecuador (44.8%) | Draw0-0 | 0.2920 | |
| Germany vs Ivory Coast | Germany (43.7%) | Germany2-1 | 0.1590 | |
| Netherlands vs Sweden | Netherlands (47.7%) | Netherlands5-1 | 0.1368 | |
| Turkiye vs Paraguay | Paraguay (42.3%) | Paraguay0-1 | 0.1672 | |
| Brazil vs Haiti | Brazil (48.4%) | Brazil3-0 | 0.1329 | |
| Scotland vs Morocco | Morocco (42.6%) | Morocco0-1 | 0.1656 | |
| United States vs Australia | United States (48.0%) | United States2-0 | 0.1353 | |
| Mexico vs South Korea | Mexico (45.5%) | Mexico1-0 | 0.1488 | |
| Canada vs Qatar | Qatar (41.6%) | Canada6-0 | 0.2294 | |
| Switzerland vs Bosnia and Herzegovina | Switzerland (43.1%) | Switzerland4-1 | 0.1630 | |
| Czechia vs South Africa | South Africa (38.6%) | Draw1-1 | 0.2713 | |
| Uzbekistan vs Colombia | Colombia (45.3%) | Colombia1-3 | 0.1573 | |
| Ghana vs Panama | Ghana (41.7%) | Ghana1-0 | 0.1718 | |
| England vs Croatia | England (43.3%) | England4-2 | 0.1628 | |
| Portugal vs Congo DR | Portugal (42.5%) | Draw1-1 | 0.2935 | |
| Austria vs Jordan | Austria (42.2%) | Austria3-1 | 0.1703 | |
| Argentina vs Algeria | Argentina (48.3%) | Argentina3-0 | 0.1358 | |
| Iraq vs Norway | Iraq (42.2%) | Norway1-4 | 0.2123 | |
| France vs Senegal | France (49.1%) | France3-1 | 0.1311 | |
| Iran vs New Zealand | Iran (43.2%) | Draw2-2 | 0.3171 | |
| Saudi Arabia vs Uruguay | Saudi Arabia (39.5%) | Draw1-1 | 0.3034 | |
| Belgium vs Egypt | Belgium (49.2%) | Draw1-1 | 0.3351 | |
| Spain vs Cape Verde | Spain (44.7%) | Draw0-0 | 0.3006 | |
| Sweden vs Tunisia | Sweden (44.4%) | Sweden5-1 | 0.1576 | |
| Ivory Coast vs Ecuador | Ivory Coast (42.5%) | Ivory Coast1-0 | 0.1701 | |
| Netherlands vs Japan | Netherlands (50.2%) | Draw2-2 | 0.3281 | |
| Germany vs Curacao | Germany (46.6%) | Germany7-1 | 0.1465 | |
| Australia vs Turkiye | Australia (42.1%) | Australia2-0 | 0.1735 | |
| Haiti vs Scotland | Haiti (42.2%) | Scotland0-1 | 0.2123 | |
| Brazil vs Morocco | Brazil (46.2%) | Draw1-1 | 0.3122 | |
| Qatar vs Switzerland | Qatar (41.5%) | Draw1-1 | 0.3149 | |
| United States vs Paraguay | United States (40.0%) | United States4-1 | 0.1823 | |
| Canada vs Bosnia and Herzegovina | Bosnia and Herzegovina (40.4%) | Draw1-1 | 0.2910 | |
| South Korea vs Czechia | South Korea (42.5%) | South Korea2-1 | 0.1718 | |
| Mexico vs South Africa | Mexico (44.0%) | Mexico2-0 | 0.1590 |
Predictions
Upcoming fixtures, nearest first.
No upcoming predictions are currently available.
Settled
Completed fixtures, newest first.
| Kickoff Time | Fixture | Model Prediction | Actual Result | Brier Score |
|---|---|---|---|---|
| Brighton & Hove Albion vs Manchester United | Manchester United (53.2%) | Manchester United0-3 | 0.1109 | |
| Burnley vs Wolverhampton Wanderers | Burnley (57.7%) | Draw1-1 | 0.4090 | |
| Crystal Palace vs Arsenal | Arsenal (54.0%) | Arsenal1-2 | 0.1069 | |
| Fulham vs Newcastle United | Fulham (37.4%) | Fulham2-0 | 0.1977 | |
| Liverpool vs Brentford | Brentford (38.9%) | Draw1-1 | 0.2355 | |
| Manchester City vs Aston Villa | Manchester City (46.0%) | Aston Villa1-2 | 0.2524 | |
| Nottingham Forest vs Bournemouth | Draw (36.8%) | Draw1-1 | 0.1999 | |
| Sunderland vs Chelsea | Draw (35.5%) | Sunderland2-1 | 0.2416 | |
| Tottenham Hotspur vs Everton | Tottenham Hotspur (43.8%) | Tottenham Hotspur1-0 | 0.1581 | |
| West Ham United vs Leeds United | Leeds United (38.4%) | West Ham United3-0 | 0.2519 | |
| Chelsea vs Tottenham Hotspur | Tottenham Hotspur (39.5%) | Chelsea2-1 | 0.1962 | |
| Bournemouth vs Manchester City | Draw (40.8%) | Draw1-1 | 0.1754 | |
| Arsenal vs Burnley | Arsenal (53.3%) | Arsenal1-0 | 0.1092 | |
| Newcastle United vs West Ham United | Newcastle United (54.3%) | Newcastle United3-1 | 0.1153 | |
| Brentford vs Crystal Palace | Brentford (47.8%) | Draw2-2 | 0.2807 | |
| Everton vs Sunderland | Everton (43.7%) | Sunderland1-3 | 0.2902 | |
| Leeds United vs Brighton & Hove Albion | Leeds United (39.0%) | Leeds United1-0 | 0.1863 | |
| Wolverhampton Wanderers vs Fulham | Fulham (49.6%) | Draw1-1 | 0.3050 | |
| Manchester United vs Nottingham Forest | Manchester United (42.9%) | Manchester United3-2 | 0.1641 | |
| Aston Villa vs Liverpool | Aston Villa (45.1%) | Aston Villa4-2 | 0.4553 | |
| Manchester City vs Crystal Palace | Manchester City (63.8%) | Manchester City3-0 | 0.0688 | |
| Tottenham Hotspur vs Leeds United | Tottenham Hotspur (38.7%) | Draw1-1 | 0.2425 | |
| West Ham United vs Arsenal | Arsenal (51.4%) | Arsenal0-1 | 0.1184 | |
| Burnley vs Aston Villa | Aston Villa (47.7%) | Draw2-2 | 0.4131 | |
| Crystal Palace vs Everton | Everton (48.3%) | Draw2-2 | 0.2329 | |
| Nottingham Forest vs Newcastle United | Newcastle United (59.4%) | Draw1-1 | 0.4231 | |
| Manchester City vs Brentford | Manchester City (58.3%) | Manchester City2-0 | 0.0938 | |
| Brighton & Hove Albion vs Wolverhampton Wanderers | Brighton & Hove Albion (44.5%) | Brighton & Hove Albion3-0 | 0.1548 | |
| Fulham vs Bournemouth | Fulham (36.3%) | Bournemouth0-1 | 0.2110 | |
| Sunderland vs Manchester United | Manchester United (42.9%) | Draw0-0 | 0.2759 | |
| Liverpool vs Chelsea | Liverpool (46.0%) | Draw1-1 | 0.2386 | |
| Aston Villa vs Tottenham | Aston Villa (46.2%) | Tottenham1-2 | 0.2475 | |
| Man United vs Liverpool | Man United (91.7%) | Man United3-2 | 0.0037 | |
| Bournemouth vs Crystal Palace | Bournemouth (91.0%) | Bournemouth3-0 | 0.0041 | |
| Arsenal vs Fulham | Arsenal (95.9%) | Arsenal3-0 | 0.0009 | |
| Brentford vs West Ham | Brentford (72.4%) | Brentford3-0 | 0.0466 | |
| Newcastle vs Brighton | Newcastle (84.6%) | Newcastle3-1 | 0.0136 | |
| Wolves vs Sunderland | Sunderland (49.1%) | Draw1-1 | 0.3255 | |
| Leeds vs Burnley | Leeds (73.7%) | Leeds3-1 | 0.0345 |