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.
Current State (May 5, 2026)
Quarterfinals resolved. PSG, Bayern, Atletico, Arsenal advanced.
Semifinals partially played: Arsenal beat Atletico 2-1 on aggregate → locked into the final. PSG won the first leg 5-4 vs Bayern; second leg at the Allianz Arena tomorrow.
Live edges (Polymarket UCL winner market, $252M volume):
- Arsenal — 61.4% AI vs 41.5% market = +19.9pp STRONG BUY (Half-Kelly 17.0%)
- PSG — 21.7% AI vs 28.5% market = −6.8pp STRONG SELL
- Bayern Munich — 16.9% AI vs 30.5% market = −13.6pp STRONG SELL
The model thinks the market hasn’t fully priced in Arsenal as a confirmed finalist with the highest adjusted Elo of any remaining team.
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.