Update Complete: We have successfully deployed a major upgrade to our core prediction engine. Following this transition to a more advanced Bayesian model, you will notice some recalibrations in both past and future predicted values. This update guarantees greater stability, especially for match draws.

About numbertwenty

The Name

numbertwenty is named in tribute to Diogo Jota, Liverpool's Portuguese forward, who wore the number 20 shirt and played a key role in delivering the club's historic 20ᵗʰ league title just weeks before his tragic passing in a car accident. He died together with his brother, André Silva.

This project is dedicated to their memory, celebrating the attacking spirit and relentless energy Diogo brought to the game.

Frequently Asked Questions

What is numbertwenty.io?

numbertwenty is a football analytics platform designed to answer one subjective question with objective mathematics: "Who truly deserved to win?" By analyzing the statistical footprint of a past match (over 90 minutes, excluding extra-time), our engine determines the real probability distribution and the fairest scoreline based on football history.

Does it predict the future?

No, our primary goal is to analyze and quantify the past. The main objective is to isolate luck and aleatoric noise from matches already played to understand the statistical reality of a performance. Future projections (like Apriori predictions or tournament brackets) are simply mathematical byproducts: to properly grasp the future, one must first evaluate the past with surgical precision.

Why do you go "beyond Expected Goals (xG)"?

Expected Goals are fantastic for long-term trends, but they suffer from major limitations on a single match basis. If we rely solely on cumulative xG and classic Poisson models, the team with the higher xG is almost always designated as the winner. In reality, football structurally includes draws (roughly 27 to 32% of matches depending on the league). Our approach does not just sum the theoretical probability of shots; it analyzes the full texture of the match to restore the true historical probability of draws, narrow wins, and rare scenarios.

Why do draw probabilities rarely exceed 45%?

This is a fundamental property of our calibration process. Because draws are statistically rarer than home wins in football, our algorithm ensures the probability distribution accurately reflects the reality of each competition. A draw probability displayed at 45% is actually an extremely strong signal of neutralization, as it sits well above the historical baseline average (27-32%). Artificially inflating draw probabilities to 70% would introduce a major statistical bias.

How do you handle Neutral Venues or International Tournaments?

Matches on neutral grounds (like the World Cup) inherently have less historical data. To compensate, our engine uses a Mirrored search: it looks for similar matches from both perspectives (swapping the team and opponent roles) and merges the results. It also automatically widens its search scope to similar continental competitions until enough local data is gathered.

How do you handle home advantage?

We treat home advantage as a structural prior within our inference process rather than an external correction. If a league historically trends toward 45% home wins, our model optimizes to respect that distribution over a large sample, without forcing individual matches to regress to the mean. For neutral venues, the model applies a symmetric treatment by neutralizing outcome coefficients.

Why are red cards excluded from the analysis?

Red cards are intentionally excluded to avoid encoding "game-state noise". Because our model operates on full-match aggregated statistics, it lacks the temporal context to distinguish a red card in the 5th minute from one in the 94th minute. Including them would risk contaminating our neighbor retrieval process with spurious similarity.

Why are there two different rankings (Expected vs Projected)?

The Expected ranking recalculates the league table using fractional points based on the fair probabilities of matches already played. The points awarded per match follow the mathematical expectation: 3 × P(Win) + 1 × P(Draw) (e.g., a team with a 50% win and 30% draw probability earns 1.8 points). The Projected ranking takes the current official standings and adds this mathematical expectation of points for all future remaining fixtures.

Post-Match Bet Audit

A post-match evaluation feature that analyzes your picks (singles or accumulators). Instead of relying solely on the final result —which is often skewed by football's inherent variance— the Audit cross-references your choices with the actual statistical reality produced on the pitch. This determines the true empirical probability your ticket had of winning, allowing you to evaluate the quality of your underlying analysis completely independent of luck.

Glossary & Core Concepts

Statistical Neighbor

When a match concludes, our algorithm extracts its mathematical signature (shots on target, passing sequences, defensive volume, etc.). It then scans our historical database to locate past matches that displayed nearly identical statistics. By observing how these close matches actually ended at the time, our system establishes an honest, concrete probabilistic map of the fairest outcome for any given match.

Fair Elo Engine

Unlike classical rankings that award all points to the winner regardless of how they played, the Fair Elo system distributes rating points according to the fair probabilities of the match evaluated after the game. It combines a Micro-level Glicko-2 system for team-to-team updates with a Macro-level TrueSkill tracker for whole leagues and confederations.

Percentile

On each match page, the fill of the statistic bars does not represent the raw value, but the percentile of that performance relative to a reference scope (e.g., the last 365 days). Crucially, these percentiles enforce strict causality: they are computed up to the exact date of the match using only data available at that time to prevent future data leakage.

Fair Result (Posterior)

The probability distribution (1 / X / 2) calculated after the match based on the actual statistics produced by both teams during the 90 minutes. It represents what historical evidence says the result should reflect.

Predicted Result (Apriori)

The theoretical probability calculated before kick-off, based exclusively on the intrinsic strength of the teams (Fair Elo) and their recent form dynamics, before a single ball is touched.

Aleatoric Uncertainty

The pure, irreducible randomness inherent to football — an unpredictable bounce, a referee error, or a shot hitting the post. Our model filters out this chaotic noise to retain only the underlying statistical reality of a performance.

The Idea

Football debates often revolve around deserved results. Supporters have strong opinions, but it is mathematically difficult to quantify the impression a match leaves. How can we provide an objective answer to a debate that is often deeply subjective?

Beyond xG: Limitations

Expected goals (xG) provide valuable long-term insights into team performance, but they sometimes fail to capture the true texture of a single match.

For instance, if we strictly rely on xG and derived Poisson models, there must always be a winner — the team with higher xG. In reality, roughly 27–32% of matches end in a draw depending on the competition.

Statistical Similarity

To go beyond xG, numbertwenty searches for statistical neighbors — past matches with similar profiles within the same or related league(s). By comparing a match to its closest historical equivalents, the system better captures local context and subtle dynamics that xG alone may miss. This approach aims to reduce the aleatoric uncertainty of football: the irreducible randomness of any single match outcome.

The model focuses on features like big opportunities, shots on target, offensive possessions, passing sequences, defensive actions and more — providing a compact yet powerful summary of match outcome and style. While xG helps calibrate the features, the system captures the nuances of each match more faithfully, allowing it to reflect draws, home or away wins, and rare match patterns more realistically.

How Similarity is Measured

For each match, the model does not simply compare raw statistics between teams. Instead, it constructs three complementary views for each feature pair (team vs. opponent):

  • Difference: the raw gap between the two sides (e.g., shots on target team 1 − shots on target team 2). This informs about direct offensive or defensive dominance.
  • Rate: the signed share, defined as (team 1 − team 2) / (team 1 + team 2). This normalises for match intensity and indicates the direction of dominance regardless of scale.
  • Sum: the total volume produced by both sides combined. This captures the overall intensity of the match.

Combining these three dimensions for each statistic gives a richer fingerprint of a match than any single number could.

Adaptive Feature Weighting

Feature importance is not fixed across time. The model progressively adjusts the weight of each feature using a causal temporal correlation engine: at any given moment, features are weighted by their recent correlation with match outcomes, measured on all past matches up to that point only. This means the model progressively adjusts the weight of each feature over time, reflecting how certain metrics may become more or less relevant depending on recent match trends.

To avoid overfitting to short competition histories, feature weights are computed at three nested levels and then blended via shrinkage:

  1. Global level: a baseline computed across all competitions in the database. Serves as the final anchor for any competition with very little history.
  2. Similar-competition level: a peer-group baseline computed from related competitions. This intermediate anchor is blended in when the competition has fewer matches.
  3. Competition-level: raw weighted correlation computed on the competition's own historical matches. Dominant once the competition has accumulated a sufficient volume of data, though a small residual shrinkage toward the peer anchor is always retained.

Finding the Neighbors: Dynamic Scopes & Causal Index

For each match, the model retrieves the k closest past matches using exact L2 distance in a transformed feature space — a diagonal approximation of the Mahalanobis distance. Features are first causally standardised (mean and variance computed on past data only), then scaled by the temporal feature importance weights. This is equivalent to a full Mahalanobis distance under the assumption that features are independent — a simplification chosen for its computational efficiency and numerical stability, which is well justified in practice for high-dimensional match fingerprints.

Causality is a hard constraint: a match can only be compared to matches that happened before it. The scaling (standardisation) applied to features is itself recomputed at each point in time using only past data, so that no future information ever leaks into the neighbor search.

Neighbors are drawn not only from the same competition, but from a configured set of similar competitions, weighted and scaled consistently. This widens the pool of comparable matches when a competition is young or inherently uncommon, without sacrificing relevance. Previously, these neighboring competitions were mapped manually. Now, the engine utilizes a 100% data-driven Dynamic Scopes system. It algorithmically builds the most statistically relevant pool of neighbor matches to pull from. As a specific competition accumulates enough of its own historical matches over time, these foreign neighboring pools progressively and automatically fade out.

From Neighbors to Probabilities: The "9-State" Calibration

Once the k nearest neighbors of a match are identified, each neighbor votes for an outcome (team 1 win, draw, or team 2 win) according to what actually happened in that match. Votes are weighted using a softmax function over the distances, ensuring that mathematically closer neighbors carry exponentially more weight in the final probability distribution. The softmax temperature is normalised by the competition's own historical distribution of distances, so that "closeness" is always evaluated relative to what is typical in that specific competition.

The raw probability estimates are then calibrated to ensure that their predicted distribution of outcomes matches the real observed distribution in that competition. Without this step, using a large number of neighbors would introduce a systematic bias: as k grows, the vote distribution converges toward the global base rates of the competition — and since home wins are the most frequent outcome in football, the model would tend to predict a home win for almost every match, regardless of the actual statistics. Calibration corrects this drift.

To achieve absolute precision, the engine utilizes a "9-State" Calibration. It calibrates neighbors based on 9 distinct match scenarios—a matrix combining 1X2 outcomes, Over/Under 2.5 goals, and Both Teams To Score (BTTS) dynamics. The algorithm organically optimizes an alpha multiplier for each specific scenario so the statistical neighbors perfectly reflect the competition's true historical goal and outcome distribution, drastically improving fair scoreline and totals analysis.

Beyond the 1 / X / 2 probabilities, the same neighbor votes are used to produce a scoreline distribution: each neighbor contributes its actual final score (e.g. 1–0, 2–1, 0–0) weighted by its softmax vote. This yields a ranked list of the most probable exact scores for each match, providing a finer-grained picture of the likely outcome than the three-way split alone.

Contextualizing Venue Difficulty

Raw statistics are never evaluated in a vacuum. Generating 2.0 Expected Goals and 15 shots at home is a standard indicator of control; however, reproducing those exact same metrics away from home requires a significantly higher level of underlying performance.

Because the system searches for exact statistical neighbors and calibrates probabilities based on historical baselines, it intrinsically accounts for the structural difficulty of playing away. Consequently, if an away team matches the home team's raw statistical output, the model will frequently assign a higher fair probability of winning to the away side, mathematically acknowledging the superior effort required to achieve statistical parity on the road.

Interpretation

The model aims to extract the underlying statistical reality of a match by filtering out football's inherent aleatoric noise — such as extreme variance in finishing, exceptional goalkeeping, or sheer luck. It answers a fundamental question: given the exact multidimensional footprint of the statistics produced by both teams, what distribution of outcomes does historical precedent dictate?

The model relies on full-match aggregated statistics and can evaluate whether the final score aligns with what a comparable body of historical matches suggests. Rather than dictating what a team "should" have scored, it maps the performance to a realistic distribution of probabilities.

However, it does not capture minute-by-minute evolution: it cannot know if a goal came early or late, or how match momentum shifted (e.g. red cards). This is a known limitation, but it also reflects actual output: a team that sat back and defended after scoring early still produced — or failed to produce — over 90 minutes of football, and the model reads that honestly.

Analysis shows that roughly 34% of matches (a third of football matches) end with a result that goes against what the statistics would suggest. Using a margin of 5% from the most probable outcome, this falls to 26%. Football is inherently random, and the model is designed to surface that reality rather than hide it.

Reading the Probabilities

A first common misconception: tight probabilities such as 33% / 34% / 33% do not mean the draw was the most likely outcome. They mean each of the three results had an equal chance of occurring given the historical evidence. Close probabilities reflect uncertainty, not a preference for draws. The actual outcome was simply the one that materialised out of three roughly equiprobable scenarios.

A second misconception concerns the amplitude of draw probabilities. For home wins and away wins, the model can sometimes reach very high values — occasionally above 90% — when the statistical dominance is overwhelming. For draws, this amplitude is structurally lower: a draw signal of 40-45% or above is already a strong signal.

This is a direct consequence of how the calibration works. The calibration ensures that the share of matches predicted as draws matches the true observed draw rate in the competition (typically 27–32%). Because draws are the rarest outcome in football, the pool of neighboring matches naturally contains fewer of them. The calibration therefore only needs to apply modest weight to draw votes in order to reach the correct historical proportion — it has no reason to push further. Mechanically, the draw probability can only grow as large as needed to reproduce the competition's draw frequency. Once that target is met, the algorithm converges. The result is that draw probabilities will structurally have a narrower range than win probabilities, and should be interpreted accordingly.

Statistics Bars & Percentiles

On each match page (and in the match comparator), a set of statistic bars displays each team's performance for the key metrics. The fill of each bar does not represent the raw value — it represents the percentile of that performance relative to a reference scope and period chosen by the user: the competition only, all competitions, the last 365 days, or the full historical dataset.

Crucially, these percentiles enforce strict causality to prevent future data leakage. They are computed up to the exact date of the match using only data available at that precise moment in time. This means two matches from the same competition with identical raw statistics can show different percentile fills if they happened at different moments in the season. This intentional design guarantees that all evaluations remain historically authentic and contextually fair.

When the local reference pool is small — for example, a young competition with few matches or a narrow time window — the percentiles are automatically blended toward global percentiles computed across all competitions and dates. This shrinkage prevents extreme or meaningless percentile values in low-data situations, while still reflecting the local context as soon as enough matches exist.

Venue context is also respected: percentiles for a home match are computed against past home matches only, and percentiles for a neutral-ground match against home and neutral matches combined. This ensures that a stat produced at home is not benchmarked against away performances, which would unfairly distort the reading.

This also explains why the nearest neighbors of a match can appear to have different statistics, whether in raw values or in percentile bars. The neighbor search operates on the transformed feature space (differences, rates, sums — scaled and weighted) rather than on raw counts. Two matches with different absolute shot tallies can be very close neighbors if their rates and differences are similar.

Hybrid Glicko-2 & TrueSkill Elo Engine

Unlike classical rankings that award all points to the winner, the Fair Elo system distributes points according to the fair probabilities of the match evaluated after the game.

This means that even if a team wins, it may gain fewer points than its opponent if the statistical evidence suggests it was dominated. Conversely, a team that loses can still earn points if the fair probabilities indicate it was the stronger side on the day. The system thus rewards merit rather than raw results.

Formally, the rating update follows the Glicko-2 framework extended with a Bradley-Terry-Davidson model for three outcomes (win, draw, loss). This means a team on an erratic run will have larger rating swings than a consistent one with the same average level.

This dynamic ensures that no team ever receives all points or zero points outright, even in extreme results. The system naturally compresses the Elo range: exceptionally strong teams almost never capture 100% of the points, and weaker teams almost never capture zero.

Matches between teams from different competitions — such as UEFA club competitions — help calibrate inter-league transfers, propagating rating information across domestic boundaries. International matches between confederations (e.g., World Cup) further calibrate confederation-level ratings, notably for national teams.

Micro & Macro Dynamics

A standard Glicko-2 model distributes points evenly across a closed ecosystem. To accurately capture macro-level shifts across different borders, the engine relies on a fully dynamic two-layer hybrid system:

  • Micro (Glicko-2): Handles direct team-to-team rating updates. It features a strict, automated inactivity penalty: if a team hasn't played for an extended period, their rating exponentially decays toward the historical baseline mean, and their uncertainty dynamically increases. The engine also natively scales variance based on the mathematical importance of the tournament (e.g., major international cups vs. friendlies).
  • Macro (TrueSkill-inspired): The engine simultaneously runs shadow trackers that evaluate the global strength of entire leagues and confederations. Whenever an inter-league or inter-confederation match occurs, the macro-tracker mathematically shifts the baseline strength of the respective ecosystems based on the outcome.

Because of this highly responsive system, the ratings absorb context natively. For Club teams, the calculated league and confederation ratings are actively added as a mathematical bonus to their final base Elo. For National teams, the engine tracks the confederation strength in the background but relies strictly on individual micro-level performances for the final rating. This makes arbitrary "Power Indexes" entirely obsolete.

Competitions & Rankings

On each competition page, team rankings are presented in three modes:

  • Actual: based on real match results as they stand in the official table.
  • Expected: points calculated from fair probabilities — specifically 3 × P(win) + 1 × P(draw) — for each played match, regardless of the actual result.
  • Projected: end-of-season projection combining current actual standings with predicted outcomes for all remaining fixtures.

For the projected rankings, two display modes are available. The continuous mode (often seen with xG tables) distributes fractional points proportionally according to outcome probabilities, giving a precise probabilistic reflection of expected final standings. The majority result mode assigns full points to the single most probable outcome per match, producing a more discrete ranking with starker values — useful for ordinal comparisons but less realistic as a representation of uncertainty.

Live Tournament Projections

For cup formats (like the World Cup), the platform features a dynamic tournament projection model. It updates automatically after every match, projecting group standings and plotting the final knockout bracket based on current team statistics and forms. In the event of a projected draw in the knockout stage, the team with the highest qualification probability advances.

Global Fair Elo Rankings

You can explore global rankings separated by Clubs and Nations. Alongside the raw Fair Elo score, these tables display a team's Short Δ (recent momentum) and Long Δ (long-term form trajectory).

Special Match Cases

When a match is abandoned or forfeited and a winner is declared administratively, the fair points in the Expected standings are fixed rather than derived from the fair probability model, since the statistics no longer reflect a complete game. The awarded fair points are: 2 pts for the team winning on the pitch at the time of interruption, 1 pt for the losing team, and 1.5 pts each if the score was level.

Predictions & Fair Odds

The platform features a dedicated Predictions section allowing you to browse upcoming and past matches grouped by day, competition, or team.

For every match, you can compare the Pred (the Apriori prediction made before the match based on Elo and form) with the Fair outcome (the Posterior probability calculated after the match based on actual statistics). This side-by-side view instantly reveals if a match unfolded as the pre-match model anticipated.

Additionally, the table provides Fair Odds (Apriori) for the 1 / X / 2 markets. These are mathematically derived from the model's pre-match probabilities. They act as a strict baseline indicator: if a bookmaker offers odds higher than our Fair Odds, it theoretically represents a value bet according to our statistical framework.

Match Analysis

Each match page includes a short textual analysis of the game, highlighting the strengths and weaknesses of each side, their style of play, and the key moments that shaped the contest. The goal is to give a concise, readable summary useful for anyone who did not watch the match.

These analyses are generated automatically by a local language model. Like any generative system, it can occasionally produce small factual inaccuracies or unusual phrasings. Additionally, the textual analysis is generated independently from the fair probability model: the LLM does not receive the computed probabilities as input, so its conclusions may sometimes diverge from the fair probabilities shown on the card. Both perspectives are complementary and each has its own basis.

Transparency & Model Accuracy

numbertwenty is not a prediction engine. It illustrates how outcomes can vary widely even between games with nearly identical stats. Football is inherently chaotic, and randomness is part of its beauty. The model is fully explainable — no black-box neural networks, every calculation can be traced.

Each match is presented through a match card. Cards display fair probabilities — either predicted before the match (for upcoming games) or observed after the match (for past games). Two badges are shown:

  • Uniqueness Score (0–10): reflects the average similarity between the match and its closest historical equivalents. A high score means the match looks very much like others in the competition — a standard game of football. A low score signals a rare or atypical match in the competition's history.
  • Predictability Score (0–10): measures whether the pre-match predicted probabilities (based on team ratings and form) align with the fair probabilities computed post-match from the actual statistics. A high value indicates the tendency of the match was consistent with expectations; a low value highlights a surprising gap between prediction and reality. This does not imply the real outcome was predictable — only that the fair probabilities were, or were not, in line with what the pre-match model anticipated.

Taken together, these two scores offer a quick read on whether a result stands within the statistical reality of the match, or emerges as a genuine outlier.

On a match details page, you can also see what the model predicts or has predicted before a game. To ensure transparency, even once the game is played, two probability bars are shown side by side on each card:

  • Fair Result: the post-match fair probabilities computed from the actual statistics of the game — what the historical evidence says the result should reflect.
  • Predicted Result: the pre-match probabilities derived from team ratings and recent form, before a ball was kicked. Comparing the two bars reveals whether the match unfolded as statistically expected, or produced a genuinely surprising balance of play.

Match Comparator

Each similar match displayed in the neighbors panel is clickable. Clicking one opens the Match Comparator: a side-by-side view of the current match and the selected neighbor, showing their statistics, percentile bars, radar charts, and recent team form in parallel.

This makes it easy to understand why two matches are considered similar — which statistics align, and where they diverge — and to judge for yourself whether the historical precedent genuinely applies.

Neighbors predating September 2020 are displayed but locked for comparison. Even when statistically close, these older matches lack the depth of historical data needed to compute reliable percentiles and contextual benchmarks — making any side-by-side analysis misleading rather than informative.

Occasionally, a neighbor is displayed with a Mirrored badge. This means the neighbor was found by searching from the opposite perspective: for matches played on neutral ground, the model also searches with the team and opponent roles swapped, then merges both result sets. A mirrored neighbor is one that best matched the current match from that reversed angle — its statistics are shown flipped accordingly so the comparison remains meaningful.

Post-Match Bet Audit

The Post-Match Bet Audit allows you to input your exact betting slips —whether single picks or multi-match accumulators— and evaluates them against the actual statistical footprint of the games played.

Instead of just looking at the binary result (won or lost), the engine calculates the true empirical probability your ticket had of succeeding. By cross-referencing your picks with the match's generated scoreline distribution, it provides a definitive verdict: it tells you if you were genuinely unlucky on a smart pick, saved by pure luck on a long shot, completely wide of the mark, or if you had a flawless, optimal read of the game.

The Mathematical Approach

The audit engine does not rely on subjective opinions; it uses a strict probabilistic framework to grade your selections:

  • Empirical Probability: The engine projects your selections (1X2, Over/Under, BTTS, Exact Score) onto the exact matrix of match scenarios generated by the statistical neighbors. This reveals the real percentage chance your bet actually had of winning based on the 90-minute performance.
  • Quality Score: For every single selection, the engine computes a Quality Score by comparing the probability of your pick against the mathematical optimum for that exact market. If you backed a scenario with a 15% probability when the safest choice in that market sat at 60%, the engine mathematically penalizes the risk.
  • Complex Intersections: If you combine multiple selections on the same match (e.g., Team A to Win & Over 2.5 Goals), the algorithm does not merely multiply the probabilities —which would be statistically flawed. It checks the exact logical intersection of these conditions across the historical scorelines to calculate a flawless conditional probability.
  • Accumulators (Multi-Leg): For tickets combining several different matches, the engine dynamically compounds the probabilities and averages the Quality Scores across all legs to deliver a global, rigorous evaluation of your accumulator's viability.

Known Limitations

Neutral Venues

Matches on neutral grounds (like the World Cup or Continental Cups) inherently have less historical data compared to deep domestic leagues like the Premier League. While the algorithm merges perspectives and dynamically scopes neighbors to compensate, the analysis for these specific games currently operates with slightly higher uncertainty.

Evolving Model

The current post-match analysis model is not yet the definitive version. Both the set of features used and their temporal weights will continue to be refined as internal researches progress. As a result, the fair probabilities shown today may shift slightly in future updates as the model improves. All historical values will be recomputed consistently whenever a meaningful update is deployed.

Minute-by-Minute Dynamics

The model works on full-match aggregated statistics and has no visibility into how a match unfolded over time. It cannot distinguish a goal scored in the 2nd minute from one in the 90th, nor can it track momentum shifts, red-card effects, or tactical adjustments mid-game. This is an inherent limitation of aggregate statistics, and one the model makes no attempt to conceal.

Diogo Jota, Liverpool's number 20, commemorated in the football analytics project 'numbertwenty'

Forever our number 20