UEFA Champions League Oracle
AI predictions for the 2025-26 UEFA Champions League from quarterfinals onwards. Elo + xG + injury-weighted Elo + Poisson + Monte Carlo vs Polymarket.
Context
The 2025-26 UEFA Champions League runs against a ~$252M Polymarket winner market. This is the sister project to worldcup-oracle — same modeling toolkit, but with a different conclusion about what actually adds skill on this specific problem.
Approach
Production stack — and what I dropped from it
Production: Club Elo + QF xG adjustment (both legs) + injury-weighted Elo + Poisson scoreline + Monte Carlo.
Behind a flag: the 3-model TSFM ensemble (Chronos-2 / TimesFM-2.5 / FlowState).
The honest version of why: I ran an 83-tie, 5-season backtest before going live. The TSFM ensemble added no point-prediction skill over pure Elo on this dataset. So Elo is the production engine; TSFMs stay in --with-tsfm as an ablation / research layer. This is the opposite finding from worldcup-oracle, where the TSFM ensemble is doing real work — and the difference (knockout games vs full tournament from group stage, much smaller sample) is itself the lesson.
Match-by-match modeling
- Each tie is simulated as two legs with the Poisson model.
- Injury data from FotMob is reweighted into team Elo (a Bayern starting XI with 4 starters out is not the team that scored their Elo rating).
- xG from quarterfinal first legs is folded back into the Elo prior for the second leg.
- 50K Monte Carlo runs per round produce win / advance / champion probabilities.
Final Result (May 30, 2026)
Paris Saint-Germain retained the trophy, beating Arsenal on penalties — 1-1 after extra time, 4-3 in the shootout at the Puskás Aréna in Budapest. Havertz put Arsenal ahead inside five minutes; Dembélé’s second-half penalty levelled it; Gabriel missed Arsenal’s fifth spot-kick to keep the cup in Paris.
How the pre-final edges resolved (Polymarket UCL winner market, $252M volume):
- Arsenal — 61.4% AI vs 41.5% market = +19.9pp STRONG BUY → reached the final, lost the shootout. The flagship edge did not cash.
- PSG — 21.7% AI vs 28.5% market = −6.8pp STRONG SELL → won the tournament. The biggest miss.
- Bayern Munich — 16.9% AI vs 30.5% market = −13.6pp STRONG SELL → out in the semis (PSG took the tie). Fade was right.
The honest read: the model nailed that Arsenal had the highest adjusted Elo of the final four and would reach the final, and missed the one thing that pays — the winner. A 1-1 final decided on penalties is close to a coin flip, which is exactly where a 61% prior gets punished. Calling PSG a STRONG SELL on their way to back-to-back titles is the line that stings.
What I’m Learning
The interesting honest result here isn’t an edge — it’s the backtest that killed TSFMs as a production component. Sports forecasting at this small-sample scale is mostly about getting Elo + injuries + xG right. A foundation model that’s trained on energy demand or retail patterns doesn’t have a privileged signal over a well-tuned domain model on 83 ties.
This same model architecture does help on World Cup, where you have 104 matches and longer-horizon attacking-defensive trajectories to learn from. So the difference isn’t “TSFMs work / don’t work” — it’s “match it to the data regime.”
Tech Stack & Links
Stack: Python · Club Elo · Poisson · Monte Carlo · FotMob injury feed · xG blending. TSFMs (Chronos-2 / TimesFM-2.5 / FlowState) behind ablation flag.
Sister project: World Cup Oracle — where TSFMs do earn their seat.