Presaira
PRESAIRAChampions League 2026/27

Methodology

This is the one place the UCL model and simulator explain themselves. It states what the model is designed to be, what it is fit on, how it is meant to be validated, and where it stops being certain. It is written the same way the World Cup methodology page is written: directly, with the limitations named rather than buried.

Read this first: fitted and validated model, real field, league phase kick-off times published

The numbers across the UCL pages now come from the fitted, gate-validated model: it passed the pre-registered Stage-3 backtest gate (see the validation section), so these are real model forecasts, not the old synthetic dry-run numbers. The run is stamped model_provenance = fitted_validated, gate = passed, synthetic_ratings = false. The field is settled: all 36 of 36 league-phase clubs are real, zero placeholder slots remain, and the run is computed over the pairings the draw actually produced. The run is stamped field_complete = true, draw_complete = true, fixtures_published = true. UEFA has since published the league phase kick-off schedule separately from the draw, and every league-phase fixture on these pages now carries the kick-off instant UEFA assigned it. The nine knockout rounds are not yet drawn, so they remain windows rather than dated fixtures.

The competition

The 2026/27 Champions League is a single competition of 36 clubs. The old group stage is gone. Every club plays 8 league-phase matches (4 at home, 4 away) against eight different opponents, and all 36 clubs are ranked in one league table. The facts in this section are read straight from the same rules files that drive the simulator, so the page and the engine can never quietly disagree.

Clubs36
League-phase matches per club8
Home / away splitone opponent from each pot at home, the other away
Points (win / draw / loss)3 / 1 / 0
Pots4 pots of 9
Seeding basisclub coefficient rankings established at the beginning of the season

The draw. The 36 clubs are split into 4 pots of 9 by club coefficient rankings established at the beginning of the season, with the titleholder seeded into pot 1. Each club draws 2 opponents from each pot, one played at home and one away. Two constraints shape it: clubs from the same association are, in principle, barred in principle, and no club faces more than 2 opponents from any single other association. UEFA may adjust draw conditions to avoid a deadlock.

What each finishing position earns. After the league phase, the single table splits three ways. Ranks 1 to 8 advance directly to the round of 16 as seeds (seeded pairs 1/2, 3/4, 5/6, 7/8). Ranks 9 to 24 enter the two-legged knockout phase play-offs (9-16 seeded, 17-24 unseeded). Ranks 25 to 36 eliminated from European competition; no drop to the UEFA Europa League.

Article 18 tiebreakers. When clubs finish level on points, they are separated by the following chain, applied in order until they split. Sourced from Article 18 (Equality of points - league phase), 2026/27 edition, paragraph 18.01. Note there is no head-to-head step: every criterion is computed across the whole league phase.

  1. 1Superior goal difference in the league phase
  2. 2Higher number of goals scored in the league phase
  3. 3Higher number of away goals scored in the league phase
  4. 4Higher number of wins in the league phase
  5. 5Higher number of away wins in the league phase
  6. 6Higher number of points obtained collectively by league phase opponents
  7. 7Superior collective goal difference of league phase opponents
  8. 8Higher number of goals scored collectively by league phase opponents
  9. 9Lower disciplinary points total based on yellow and red cards received in the league phase (red card = 3 points, yellow card = 1 point, expulsion for two yellow cards in one match = 3 points)
  10. 10Higher club coefficient

The knockout bracket and the seeding-inheritance rule. 24 clubs enter the knockout phase in predetermined positions after the league phase. Every knockout tie except the final is two-legged; the greater aggregate over the two legs wins. There is no away-goals rule anywhere in this competition: a level aggregate after the second leg goes straight to two 15-minute periods of extra time and then, if still level, a penalty shoot-out. The final is a single match at a neutral venue.

One deviation, and it is ours rather than UEFA’s. The simulator resolves that final with the same home-advantage term it applies to every other tie, given to whichever side occupies the nominal home slot in the bracket. Which side that is depends on a random draw and comes out close to even, so the published figures stay near what a genuinely neutral resolution gives: for the current favourite, a 0.620 chance of winning the final as the bracket actually falls against 0.617at a truly neutral venue. Near is not the same as identical, and the difference is ours to own rather than the competition’s.

The one rule users will not know, and the reason the bracket display can look surprising, is seeding inheritance: A non-seeded team that eliminates a seeded opponent inherits that opponent's bracket position (conqueror inheritance), including its hosting entitlements. Concretely, when a lower-ranked club knocks out a seed, it takes over that seed’s bracket slot and hosting entitlements for the rest of the run. The simulator implements exactly this (a conqueror inherits the better of the two identities on the tie), so the projected bracket the forecast page draws follows the same rule the real tournament will.

Knockout tie formatAll knockout phase matches except the final are two-legged, home and away
Away goalsnone (abolished)
Level after two legsIf aggregate level after the second leg: two 15-minute periods of extra time, then kicks from the penalty mark if still level; applied in the second leg
Play-off round (ranks 9 to 24)League phase ranks 9-24; ranks 9-16 seeded, ranks 17-24 unseeded
Round of 16 seeds hostSeeded clubs (league phase ranks 1-8) play the return leg at home in the round of 16
FinalThe final is a single match at a neutral venue appointed by UEFA

The model

fitted and gate-validated

The model is a club-football sibling of the World Cup engine, with the same two-stage shape: a strength layer feeds a goal model, and the goal model feeds the simulator. International Elo does not transfer to clubs, so both layers are rebuilt on club data. This section describes the architecture; the model is now fitted on the club corpus and its published probability is the gate-validated blend of the two layers (see the validation section for the selected blend weight and the achieved backtest numbers).

Club Elo. Each club carries its own Elo rating, seeded from a ClubElo snapshot that is committed into the repository per run and never live-fetched at fit time (with attribution). Ratings update match by match using the same K-factor machinery as the WC model, retuned for the higher match density of club football, and are competition-weighted so a Champions League result moves a rating more than a domestic-cup result. This is a living weekly rating, refit on a Monday cadence, not a tournament-frozen one.

Club Dixon-Coles. A bivariate-Poisson goal model with the Dixon-Coles low-score correction turns strengths into scoreline distributions. It fits an attack and a defense strength per club, a first-class home-advantage term, and league-strength offsets estimated from inter-league (UEFA) matches so a club that dominates a weaker domestic league is not overrated. The fit is time-decay weighted so recent form counts for more, with regularization toward the league mean for low-sample clubs.

Home advantage is the single biggest delta from the World Cup model. The WC is played almost entirely at neutral venues; the UCL is the opposite, home-and-away throughout the league phase and both knockout legs. Home advantage is therefore a fitted parameter here, not an afterthought.

Not modeled in v1 (stated plainly)

The v1 model deliberately does notmodel transfers, squad rotation or lineups, or injuries. It sees results, not team news. It also drops the WC model’s altitude correction, which is a South-American concern with no European use. These are known omissions, listed here so they are never mistaken for oversights, and revisited in the limitations section.

The simulator

To turn ratings into tournament odds, the engine plays the whole competition many times, from the league phase through the final, and aggregates how often each club reaches each stage. It is a deterministic Monte Carlo: one seeded random generator threads through the entire run, so seed 42 reproduces a byte-identical result. The committed fitted forecast runs at the production count of 50,000 simulations and clears the publish guard (N and a pre-registered 25k/50k champion-probability convergence check), with the figures recorded in the run metadata.

Monte Carlo count50,000 simulations
Production target50,000 simulations
RNG seed42 (fixed, reproducible)
Conditioned on results0

Three draws are sampled, not one.Unlike the World Cup, the UCL has three stochastic draws the engine must integrate over: the league-phase draw, the knockout play-off draw, and the round-of-16 draw. Each simulated world samples a fresh valid draw, so the published probabilities are marginal over all three. The play-off and R16 draws follow their fixed pairing frames with the random bits UEFA’s draw uses; the bracket is fixed from the quarter-finals onward.

An honest note on the league-phase draw sampler. The league-phase draw is sampled per pot-pair block as random permutations, rejecting candidates that break an association constraint and restarting the whole draw when a block dead-ends. This makes the counting constraints structural and exact (every club gets two opponents per pot, one home one away, no repeat pairing), but it means uniformity over the set of all valid draws is approximate by construction, the same practical compromise UEFA’s own draw software makes. We state this rather than claim a perfectly uniform sampler.

The position cliff.Because every simulated world records both a club’s final league rank and whether it went on to win, the engine reports the champion probability conditional on where a club finishes the league phase: p(champion given a top-8 seed, straight to the round of 16) against p(champion given a 9 to 24 finish, a two-legged play-off first). The gap between the two is the seeded advantage, the cliff. These conditionals are counted, not modelled separately, so by construction they sum back to the club’s unconditional champion probability through its finishing distribution, and a title is only ever credited to a top-24 finish. It is an additive read of the same run and changes none of the published figures.

How to read the projected bracket.Each side of a tie prints one number and draws one bar, and both are the same quantity: that club’s share of winning the tie given that this exact pairing happens. The two sides of a tie sum to 100 by construction, so one number implies the other. The bar is drawn in the club’s own colour where the committed palette carries one, and in a neutral track where it does not; the colour is identity only and never encodes a value. Three further facts are attached to each occupant rather than printed on it, and each is in that row’s hover text: the occupancy marginal, the share of all simulated runs in which the club reaches that tie at all (this one does NOT sum to 100 across a pairing, which is exactly why it is not printed beside a number that does; both quantities are printed together, with a legend naming each, on the matches page); whether the position is filled by a play-off winner; and whether the position hosts the return leg, under the seeding-inheritance rule described above. The accent route through the board is the champion’s path in the single representative bracket, which is not the same thing as the club with the highest title probability, and the card at the centre prints both.

Tie resolution matches the rulebook. Each two-legged tie is decided on aggregate. If aggregate level after the second leg: two 15-minute periods of extra time, then kicks from the penalty mark if still level; applied in the second leg. The engine never computes away goals at all; a dedicated property test asserts that mirrored aggregates which an away-goals rule would split instead go to extra time and penalties. Extra-time goals and the shoot-out are injected callables, so the fitted conditional model plugs straight in when it lands. Conqueror seeding inheritance (described above) is applied after every tie, which is what makes the projected bracket’s hosting and slots correct.

Validation and calibration

gate passed (Stage 3)

Validated: the model passed its pre-registered backtest gate

The thresholds below were pre-registered before any backtest was run (committed at 53ddfcd), and the model was then judged against them out-of-sample. Every number here is read at build time from the committed Stage-3 result (backtest_results.json, gate commit 37ceef6), reported pass or miss with no post-hoc tuning. All of the gate thresholds passed, so the model is publishable-eligible. This is a statement about the MODEL only; the FIELD is still provisional (see the posture note at the top of the page).

Match-level backtest. Every 2024-25 and 2025-26 Champions League match (378 in all) was predicted strictly out-of-sample with a rolling refit (monthly-first-of-month) that never sees the match it predicts. The blended model (blend weight w_dc = 0.8, selected on the earlier 2022-23 and 2023-24 seasons only) reached a log loss of 0.913, beating the Elo-only baseline (0.946) and the uniform reference (1.099), and a Brier score of 0.537, beating the Elo-only 0.556. Calibration error over ten bins was 0.030, inside the pre-registered ceiling, so no post-hoc recalibration was needed (the committed calibrator is the identity map).

000.50.511predicted probabilityempirical frequency
Reliability across 10 equal-width bins (pooled one-vs-rest): model points against the diagonal of perfect calibration. Expected calibration error 0.030.
CheckPre-registeredAchievedResult
T1a Out-of-sample UCL log loss beats Elo-only< 0.9460.913PASS
T1b Out-of-sample UCL log loss below the uniform-margin bar< 1.0500.913PASS
T1d Out-of-sample UCL Brier beats Elo-only< 0.5560.537PASS
T2a Calibration error (ECE, 10 bins)< 0.050.030PASS
T2b Worst bin deviation (bins with 30+ samples)≤ 0.100.081PASS
T3a Champion odds vs reached-stage ordering (Spearman, pooled)≥ 0.300.683PASS
T3b Top-8 by title odds captures the actual quarter-finalists≥ 46.0PASS
T1c Bookmaker baseline (domestic, secondary)context onlynot computablecontext
T3c Champion inside the pre-tournament top 6 (sanity)context onlynocontext

Tournament-level backtest. The simulator retrodicted the 2024-25 and 2025-26seasons from each season’s pre-competition state. The pre-tournament champion-probability ranking correlated with clubs’ actual reached-stage ordering at a pooled Spearman of 0.68, and the model’s pre-tournament top eight by title odds captured 6.0 of the eight actual quarter-finalists per season on average (chance is under two).

What we report honestly as not passing.Two secondary, non-gating checks did not clear and are stated plainly rather than hidden. The bookmaker baseline comparison (T1c) needs a licensed odds cache that is not present in this repository, so it could not be computed. And the sanity check that the eventual champion sits inside the model’s pre-tournament top six (T3c) missed in 2024-25, where the model ranked the eventual winner 8 pre-season. Neither is a gate, so neither blocks; both are recorded in the committed results.

What “calibrated” means here.Events the model assigns a given probability happen at about that rate over many predictions: teams given a one-in-ten title chance win about one time in ten across comparable situations. The measured calibration error was already within the pre-registered bound, so the honest finding was “none needed, checked and adequate” and the published run carries the identity calibrator.

Model versus actual

baseline full-field

The eight clubs the model ranked highest before the season, published on 27 August 2026. The league position column fills from matchday one, one club at a time, and the pre-season column never moves after that.

Model versus actual

0 of 8 matchdays played
  1. 1Arsenal FCArsenal23.1%League position is not known until this club has played a matchNo comparison until this club has played a match
  2. 2FC Bayern MunchenBayern Munich14.5%League position is not known until this club has played a matchNo comparison until this club has played a match
  3. 3Paris Saint-Germain FCPSG13.9%League position is not known until this club has played a matchNo comparison until this club has played a match
  4. 4Manchester City FCMan City13.4%League position is not known until this club has played a matchNo comparison until this club has played a match
  5. 5Liverpool FCLiverpool7.6%League position is not known until this club has played a matchNo comparison until this club has played a match
  6. 6Real Madrid CFReal Madrid6.7%League position is not known until this club has played a matchNo comparison until this club has played a match
  7. 7FC BarcelonaBarcelona6.3%League position is not known until this club has played a matchNo comparison until this club has played a match
  8. 8FC Internazionale MilanoInter3.5%League position is not known until this club has played a matchNo comparison until this club has played a match

Data and sources

Results. Every result that feeds a shown surface is held to a quorum-2 standard: at least two independent sources must agree on a finished scoreline before it is written, no write happens on disagreement, and human or disagreeing rows are never overwritten. This is the same reconciliation discipline the World Cup engine uses. Obscure never-displayed fixtures may run single-source but are flagged provisional and blocked from model use until confirmed; anything on the UCL pages is always quorum-2.

Multi-competition tracking. The rating layer is fed by a living multi-competition spine (Champions League plus domestic leagues and cups), because club strength is a season-long quantity, not a tournament-window one. What is ingested for the ratings is broader than what is shown on the UCL pages, which display only Champions League standings, forecasts and fixtures.

Update cadence. The ratings refit on a weekly (Monday) cadence, with a matchnight spine that re-conditions the forecast as UCL results are entered. A publish is gated by a skip-if-unchanged check so an unchanged run does not churn. Every run records a data_cutoff_time: nothing entered after that instant is allowed into the fit or the conditioning for that run, which is what keeps a published forecast reproducible and leakage-free.

Crest and club identity. Club crests and identity resolve against the same id-keyed ecosystem the results ids resolve against (FotMob ids in cf_club_source_ids), with attribution; a club without a resolved crest falls back to a neutral monogram roundel rather than a wrong badge.

Provenance of every number on this surface today. The run facts below are read from the committed fitted-forecast artifact, not re-typed here, so this page cannot drift from the run it describes.

Run idforecast-full-field-2026-27-seed42-n50000
Run typefull_field_forecast
Model versionw6-fitted-blend-v1-wdc0.8-elo+dc
Model provenancefitted_validated
Gatepassed
Simulator versionucl-sim-w6-forecast
Data versionfitted-model+full-field-36confirmed+0placeholder
Data cutoff2026-07-07
Field36 confirmed, 0 placeholder, league phase draw made
Source of these numbersartifact

Availability and discipline

The scope rule. UEFA suspensions are served in UEFA club competition matches (UEFA Champions League, UEFA Europa League, UEFA Conference League, UEFA Super Cup), not in domestic matches. Domestic suspensions from domestic cards do not affect UCL eligibility, and UEFA suspensions do not affect domestic eligibility; suspensions are governed by the competition they were incurred in. The one carve-out is that UEFA disciplinary bodies may extend a serious-offence punishment to other competitions.

Yellow-card accumulation. A player is suspended for the next competition match after 3 yellow cards that did not result in a red, and again after any subsequent odd-numbered yellow (fifth, seventh, and so on). Yellow cards and pending yellow suspensions expire on completion of the play-offs (not carried into the league phase), again on completion of the quarter-finals (not carried into the semi-finals), and at the end of the season. A straight red card is an automatic next-match suspension.

How availability enters the model. Availability is tracked as dated, append-only events (a correction supersedes by date, it never overwrites history). Player-level availability informs the player projections; it does not currently alter the team goal model, which sees results rather than lineups (see limitations).

UEFA suspension scopeUEFA suspensions are served in UEFA club competition matches (UEFA Champions League, UEFA Europa League, UEFA Conference League, UEFA Super Cup), not in domestic matches
First yellow-card ban at3
Red cardA player or team official sent off is automatically suspended for the next match in a UEFA club competition (UEFA Champions League, UEFA Europa League, UEFA Conference League or UEFA Super Cup)
Domestic separationDomestic suspensions (from domestic cards) have no effect on UCL eligibility and UEFA suspensions have no effect on domestic eligibility; suspensions are competition-governed (the U16 scope rule). Exception: UEFA disciplinary bodies may extend serious-offence punishments to other competitionsunverified this session

Player model (Top-Scorer)

projection pending

The Top-Scorer projection is designed to fuse three signals per player: expected minutes, gated hard by the availability view above (a suspended, injured or unregistered player scores zero for the fixtures he cannot play); a per-90 goal rate regularized toward positional and role priors for low-sample players and scaled through the fitted league-strength offsets so goals in a weaker league are discounted; and opportunity by advancement, folding in each club’s p(reach stage) and its expected remaining matches derived from the committed team-probabilities ladder (the Swiss subtlety: league ranks 9-24 must win a two-leg playoff before the round of 16, so they carry an extra round of expected matches).

The bar this projection must clear before any number is published was pre-registered before any backtest was run (committed ahead of the harness, mirroring the club model). The gate retrodicts the two most recent UCL top-scorer races from each season’s pre-matchday-1 state, strictly out-of-sample, and must beat the baselines (BL1_goals_to_date_extrapolation, BL2_prior_season_rate) on all of:

  • G1: top-5 scorers captured in the pre-tournament top-10: avg >= 3 per season
  • G2: Spearman on final goals >= 0.35, and strictly above both baselines
  • G3: MAE on projected goals strictly below both baselines
  • G4: p(top scorer) calibration ECE < 0.1, winner inside the top 8

Hard guards, always required: determinism_seed42, look_ahead_leak, coverage, eliminated_freeze. A deliberate-leak fit must be caught by the look-ahead guard, and two fits under seed 42 must be byte-identical.

Projection pending: the gate has not been run (no_fitted_model)

The pooled 2024/25 + 2025/26 evaluation set is complete, but no player projection model (A2, the fit) exists in this repository; Wave 27 Track A built the evaluator (BL1/BL2, G1-G4, ties, the structural refusal) but not the fit itself. Corpus completion alone does not pass the gate: a candidate projection is a separate, still-missing precondition.No projected goals, no p(top scorer) and no scorer ranking are published, and the “projection pending” chip on the players page stays. This is the honest state, not a placeholder for a number that exists. It is independent of the club field provenance: the model axis is pending here whether or not the field is drawn. What would close it: a licensed or open per-player minutes-and-cards feed covering the top leagues and the UCL across the corpus window, which the model, the availability gate on ingested cards, and this pre-registered backtest all consume.

The completed races on the players page. cf/data/corpus/highlightly_players (628 of 628 main-stage fixtures observed). Window: main-stage, MD1 onward through the Final (erratum R2).

Names. Player names are as reported by the data provider and are NOT independently resolved. Identity resolution measured 68.1 percent at scale (Wave 13) and is not complete, so a name here can disagree with the public record even where the goal tally does not. The tallies are derived from per-match player rows and cross-checked against an independent set of club scorelines, which leaves a per-season residual reported in the reconciliation block rather than assumed to be zero; the names are attributed, not verified. One player_id in this artifact carries TWO spellings across seasons (122836, with and without the accent on the first i), which is a live instance of exactly the disagreement this caveat describes rather than a hypothetical one.

The four winning totals. four seasons is a small sample and is reported as four values rather than as a distribution with a confidence interval, which four points cannot support

  • 2022/23: residual 8. residual is independent club-level goals minus corpus per-player goals. It is EXPECTED to be positive and non-zero: an own goal is credited to no player, so a corpus of player rows is structurally short by the own-goal count. It is NOT decomposed per fixture here, so it bounds rather than confirms the tallies: a residual of R means up to R goals in that season are unattributed to any player.
  • 2023/24: residual 13. residual is independent club-level goals minus corpus per-player goals. It is EXPECTED to be positive and non-zero: an own goal is credited to no player, so a corpus of player rows is structurally short by the own-goal count. It is NOT decomposed per fixture here, so it bounds rather than confirms the tallies: a residual of R means up to R goals in that season are unattributed to any player.
  • 2024/25: residual 22. residual is independent club-level goals minus corpus per-player goals. It is EXPECTED to be positive and non-zero: an own goal is credited to no player, so a corpus of player rows is structurally short by the own-goal count. It is NOT decomposed per fixture here, so it bounds rather than confirms the tallies: a residual of R means up to R goals in that season are unattributed to any player.
  • 2025/26: residual 21. residual is independent club-level goals minus corpus per-player goals. It is EXPECTED to be positive and non-zero: an own goal is credited to no player, so a corpus of player rows is structurally short by the own-goal count. It is NOT decomposed per fixture here, so it bounds rather than confirms the tallies: a residual of R means up to R goals in that season are unattributed to any player.

Champions League player model: what a passed gate would not mean (recorded before any result was computed)

Every limitation below is a statement about the Champions League top-scorer gate and about nothing else. G1 to G4 are that model’s four pre-registered gates. They are not site-wide model checks, and no World Cup result is scored by any of them.

  • Half of Champions League gate G4 cannot fail.G4 has two clauses, an expected calibration error below 0.10 and the eventual top scorer sitting in the model’s top 8. While every probability falls in one reliability bin the calibration error is exactly (W minus S) over N, which contains no candidate term at all: a model ranking the winner first, one ranking it last, and a uniform model that ranks nothing all score 0.0 to machine precision. G4 is therefore reported as ONE test, and the top-8 clause carries the claim.
  • Champions League gate G3 is minimised by a candidate the gate refuses. G3 scores mean absolute error, which is minimised by the conditional median, and the median main-stage goal tally is zero (208 of 889 players scored at all on the training transition). The MAE-optimal model projects zero for everybody, which the degenerate-candidate refusal rejects outright. A lower G3 is not on its own evidence of skill on a target this zero-inflated, and candidate selection was deliberately NOT performed on it.
  • The scored population was a judgment the pre-registration did not make. It says “players with at least one projected appearance”; the code enforced the observed roster. The same candidate scores Spearman’s rho 0.2826 over one reading and 0.4699 over another on the same transition, so the choice decides the answer. It was fixed on a principle, not on a number: a population that cannot be built from pre-matchday-1 information fails the pre-registration’s own out-of-sample requirement, applied to the denominator and not only to the predictor. On the surviving population the current candidate scores 0.348850 against a bar of 0.35, a shortfall of 0.001150, and that figure is OPTIMISTIC because the candidate’s parameters were selected on the same transition.
  • The two baselines are one baseline at the checkpoint that is scored.At pre-matchday-1 there are no goals to date, so the first baseline’s extrapolation reduces to the prior-season rate, which IS the second baseline. They are arithmetically identical to the last digit, so “beat both” is one bar stated twice.
  • Output resolution affects two of the four scores.The model’s own top-n window is inclusive at ties, so a model that coarsens its projections widens its own window. For G1 that lever is closed: names tied at the boundary share the remaining slots rather than each counting in full, so a coarse candidate admits more names and each is worth proportionally less. For G4 the clause is boolean and has no fractional analogue, so the lever stays open there and is bounded only by a refusal to score a window that admits the entire field. Three resolutions for it were enumerated and one was measured: refusing to score whenever a tie straddles the boundary is zero-parameter and honest, and it was rejected because a six-way tie at the rank-8 boundary occurs on the real training corpus for the prior-season baseline, which is the shape any integer-valued count model takes, so it would make the gate permanently unfireable. Closing the G4 half needs an amendment to a signed document. What that amendment would have to say is written down in full, so that whoever signs it does not have to re-derive it. It is recorded and it is not signed.

Two smaller items, unrepaired and stated

  • The pooled mean is not correctly rounded.G3’s pooled mean absolute error adds its error list left to right in double precision; the correctly rounded alternative, math.fsum, is not applied. Two summation orders of the same 1,761 errors give 0.6429112246829456 and 0.6429112246829458, against a correctly rounded 0.6429112246829453, so the value moves in the last bits with row order and with the interpreter version, which compensates that sum from version 3.12 onward. G3 is a strict inequality, so in principle a verdict could turn on that; in practice it bites only within about 1e-15 of a baseline. The fix is one line and is deliberately not applied, because changing the arithmetic of a scored quantity after the metric is written is a larger act than the error it would remove.
  • A season-format helper fails open.A season whose rows carry no recognisable round label is silently read as the older group format, which sets the full-campaign match constant to 13 instead of 17. It reaches only the first baseline’s matchday-3 and matchday-6 report, which is reported and never gated, and at pre-matchday-1 the constant is unused because every player has zero matches to date. It is a fail-open default inside a module whose discipline is otherwise fail-closed, and it is recorded rather than repaired because deciding what an unlabelled season means is a decision rather than a fix.

Two data caveats that belong with the model rather than beside any single number.

  • Three Champions League clubs carry no fitted rating. The forecast ratesLASK, Sabah, Vikingfrom their pot tier rather than from a fitted strength, because no match involving them appears anywhere in the historical corpus the club model was fitted on. The names are read from the run artifact’s own placeholder_rated_real_clubs rather than typed here, and the forecast refuses to run if a fourth such club appears without being named, so this list cannot quietly grow.
  • Published expected goals are a LOWER BOUND, not a total.The provider returns an expected-goals figure for most but not all appearances, and an absent figure is recorded as absent rather than as zero, which is the honest treatment: a player with no shots and a player with no data are different facts. So any accumulated expected-goals figure on this site sums only the appearances that carry one, and the true total is at least that and never less. Where coverage falls below the floor the figure is not shown at all rather than shown short. This caveat was rendered on the Champions League home page until Wave 45 removed the chip that carried it; it belongs with the rest of the model’s limitations rather than beside a single number.

Not modeled (stated plainly)

Even once fitted, the projection would not predict lineups, tactical role changes, or in-match injuries. It projects a scoring rate over available minutes; it does not forecast who the manager picks on the day.

Limitations and failure modes

  • Three clubs carry no fitted rating. The field is complete at 36 real clubs on the confirmed draw, and no placeholder club remains. But LASK, Sabah and Viking have no fitted Elo and no match anywhere in the historical corpus from which to fit one, so they are rated from their pot tier rather than from results. Every number involving those three, and every number for the clubs drawn against them, carries that. The run records them by name in placeholder_rated_real_clubs, and the forecast refuses to run at all if a fourth such club appears without being named. What stands in, read from ucl/simulator/run_forecast.py: every pot-4 club (which is all three) is given an Elo of 1400.0 from PLACEHOLDER_ELO_BY_POT and a Dixon-Coles attack/defense shift of minus 0.12 from PLACEHOLDER_DC_ADJ_BY_POT, with its league set to a generic OTHER_LEAGUEtier rather than its own domestic league's fitted strength. It is a pot-tier heuristic, not a fitted rating. All three play in the opening round: verified 2026-08-29 against the first-party UEFA schedule PDF, AEK Athens hosts LASK, VfB Stuttgart hosts Viking and Manchester United hosts Sabah, all on matchday one (8 to 10 September 2026). That is three of the eighteen opening fixtures carrying this gap on one side of the pairing. None of the three appears BY NAME in the champion board on the home page (that board is the top 8 by champion probability, and a pot-4 qualifier does not reach it). Their numbers do surface there, though, aggregated into the title-share-by-association ledger, and for two associations that row’s whole share rests on exactly this: Austria carries only LASK and Azerbaijan carries only Sabah, so both rows are 100 percent pot-tier rated, and Norway’s carries Viking alongside Bodø/Glimt, half rated this way. The ledger marks every such row with the fraction, derived from the same run field this paragraph reads rather than a second, hand-typed list.
  • The draw pairings are press sourced, and confirmed against UEFA's own calendar. The 144 league-phase pairings every number here is computed over were read from published press and reference sources on the evening of the draw and cross-checked against each other. UEFA’s own site refuses automated requests from the environment that built this run, so the CAPTURE was not read from it. The capture passed the same legality and quorum gate a first-party feed would have to pass, and two internally contradictory tables were caught and discarded on a symmetry check before it did. The run records the capture as published press. That is a separate fact from how the capture was obtained, and it has since changed: on 2026-08-29 UEFA published UEFA, '2026/27 UEFA Champions League league phase, calendar by matchday', and 144 of 144 ordered pairings identical, home and away included. The capture stays press sourced; the pairings are now independently confirmed. Neither claim substitutes for the other.
  • The band-probability history is not a single series.A club profile can show runs from either side of the league phase draw. Runs made before it averaged over every draw that could have happened, over a field with placeholder clubs standing in for the qualifiers; runs made after it are conditional on the draw that did happen, over the real 36. A step between two such runs is a change of inputs, not the model revising its view. The chart marks the boundary with "spans the draw" rather than a sentence, because this page is the only place on the surface that carries prose.
  • Two forecasts, one draw. Two forecasts, same fitted model. "Provisional field" (published 7 July 2026) carried 23 confirmed clubs plus placeholder qualifying slots. "Drawn field" (published 27 August 2026) replaces every placeholder with the real club the draw produced and pins the actual pairings into the simulation. Any number that moves between the two tabs moved because the FIELD changed, not because the model reconsidered: neither run has seen a single match result. This is deliberately two tabs and not a trend line: with one discrete change of field and no revision from results, a chart would draw a process between two points that never happened.
  • No team news. Injuries, suspensions, rotation and lineups are invisible to the goal model. It reads results, not who is on the pitch.
  • No transfers. A squad reshaped by a transfer window is not modeled directly; its effect only shows up slowly as results accrue.
  • Approximate draw uniformity. The league-phase draw sampler is approximately, not exactly, uniform over valid draws, as stated in the simulator section.
  • Withdrawal edge case. The simulator does not model a club withdrawing or being excluded mid-competition. If it happens, operations intervene manually against the documented average-points rule; the model does not attempt it automatically.
  • Qualifying rounds excluded. Only the 36-club main competition is modeled. The summer qualifying and play-off rounds that decide the final entrants are out of scope for the tournament model.

Changelog

  • v1

    First UCL model version, now fitted and validated. Club Elo + club Dixon-Coles with home advantage and league-strength offsets, blended (weight w_dc = 0.8) and put through a pre-registered out-of-sample backtest gate, which it passed (match-level, calibration, and tournament-level thresholds all met). The fitted model runs at 50,000 simulations and clears the publish guard. At the time of that version the open item was the field: 13 of 36 clubs were placeholder fillers pending the August 2026 qualifiers and draw. That is now closed, and the current run is computed over the real 36 on the confirmed draw.

Relationship to the WC engine

The UCL engine shares its lineage with the World Cup prediction engine: the same Dixon-Coles goal-model structure, the same Elo K-factor machinery, and the same deterministic seeded Monte Carlo and reproducibility discipline. The deltas are what make it a club model rather than a national one: club Elo instead of international Elo (international ratings do not transfer), home advantage as a first-class fitted term (the WC is neutral-venue, the UCL is not), three sampled draws rather than a fixed group draw, and two-legged knockout ties with aggregate, extra time and penalties instead of single WC knockout matches. Cross-readers coming from the WC pages can assume the shared parts behave the same and read this page for the differences.

Notable

from the facts engine
Notable48 facts
  • streakarsenal: 15 UCL unbeaten in a row, to 2026-05-302026-05-30
  • streakbayern-munich: 21 UCL scored in a row, to 2026-05-062026-05-06
  • streakparis-saint-germain: 11 UCL scored in a row, to 2026-05-302026-05-30
  • streakreal-madrid: 10 UCL scored in a row, to 2026-04-152026-04-15
  • bracketarsenal (half-1) and manchester-city (half-2) in opposite halves; earliest meeting the final2026-07-07
  • classarsenal class I, champion 23%, reach final 37%2026-07-07
  • bracketarsenal and barcelona in half-1; earliest meeting the semi-final (SF-1)2026-07-07
  • bracketmanchester-city and lille in half-2; earliest meeting the semi-final (SF-2)2026-07-07

An independent, calibrated AI forecast. Not affiliated with UEFA or any official Champions League organisation.

For interest and analysis only: not betting advice.

Methodology · how the forecast is built. Clubs · all 36 profiles.

Built by Mohammed Ehab Elnomany · probabilistic, not an oracle.