Updated

Methodology

Methodology

Every probability on this site comes out of one pipeline, run twice a day. Here it is end to end — including the parts that decide what it cannot know.

How a probability gets made

Four steps, in order. Nothing between them is set by hand for a particular fixture — there is no place in the pipeline where a person types a number over the model’s.

  1. The form window

    For each club we take its last 15 completed matches, newest first, and weight them so each step back counts about a tenth less than the one before it. Where at least 60% of that weight is covered by expected-goals records, the window is built from expected goals; where it is not, it falls back to goals actually scored and conceded. Both figures are then pulled part of the way toward the competition’s own scoring average, so a club with a short record gets a rating closer to average — a short record is weak evidence, and the model is made to say so.

  2. The scoreline grid

    Those attack and defence figures become one expected-goal rate per side, and the pair goes into a Dixon-Coles adjusted Poisson model — Poisson for the goal counts, with a correction on the four low-scoring cells (0-0, 1-0, 0-1, 1-1), where real football and plain Poisson visibly disagree. The output is not a pick. It is a probability for every scoreline from 0-0 to 10-10: 121 cells that add up to one.

  3. Markets read off the grid

    1X2 is the sum of the cells where the home side leads, where the away side leads, and where the two are level. Over/under 2.5 is the sum of the cells with three goals or more. Both teams to score is the sum of the cells where neither number is zero. A correct score is a single cell. Everything else the site publishes — double chance, draw, handicap, the goals ladder — is arithmetic on those same 121 cells, which is the reason our markets cannot contradict one another.

  4. The market gets a vote — on 1X2, and nowhere else

    Where we have recorded bookmaker prices for a fixture, we take the median price on each of the three selections across every book quoting the full market — so the market side is the market, not one book’s opinion of it — strip the margin out of that (invert each price, then rescale the three so they sum to one) and mix the result with ours: 25% our model, 75% the market. The weighting is deliberate and it is not flattering to us — a liquid market has money and information behind it, and our model is best used as a corrective lens on that price rather than a replacement for it. The blend applies to 1X2 and to nothing else: over/under, both teams to score and correct score are published exactly as the model produced them, with no market number mixed in.

What the A, B and C grades mean

Every prediction carries a letter. It rates the evidence, not the outcome.

Grade A

Both clubs’ form windows are backed by expected-goals records. This is the strongest input the model gets.

Grade B

One club has an expected-goals record behind its rating and the other is rated on goals alone.

Grade C

Neither club has one. The probability is still computed and still published — it is simply a weaker claim, and we would rather print the letter than hide it.

A grade C fixture is not a fixture we expect to get wrong. It is a fixture where the number rests on goals rather than on the chances that produced them, and where a surprise should surprise you less. Where the site ranks fixtures against each other — on value bets — A and B rank above C for exactly that reason.

What this pipeline cannot do

The honest list. Anything below is missing on purpose, not pending.

  • It does not read team news. Ratings are built from results, expected goals and prices. Where the data feed gives us a confirmed line-up or an absence, the match page shows it — but it does not move a single probability on that page.
  • It does not follow a match in play. Every number is a pre-match number, computed on the last run before kick-off.
  • It does not simulate a season. There are no title odds, promotion odds or relegation odds here, because we do not run the simulation that would produce them.
  • It is weakest on clubs with a short record — a promoted side early in a season, or a squad rebuilt in one window. The form window has to fill before the rating means much, and the grade tells you when it has not.
  • It is not a tip. A probability of 62% is a statement that this happens roughly six times in ten, which includes the four times it does not.

When it runs, and how long a page lives

The pipeline runs twice a day. Fixtures, results and price snapshots come in, ratings are rebuilt, and any page whose numbers changed is written again — the timestamp in the footer of every page is the moment that page was last built.

A fixture gets its own page no more than 7 days before kick-off, and keeps it for 365 days after the final whistle before it drops out of the site. That is why a link to an old match can stop resolving, and why the list of live pages on our index changes from run to run.

What we cover

All 5 of them, in full. There is no long tail here and no competition on this site that the model does not price.

Competitions hub

Depth over breadth is a deliberate trade. The model needs a couple of seasons of the same teams playing each other before its ratings mean anything, and every competition we add is a competition whose calibration we would then have to publish. These 5 are what we are willing to stand behind.

Read this next

Our accuracy page puts numbers on all of the above: how the model did across five leagues and three seasons, where it failed, and why nobody who tells you they are 99% accurate is telling you the truth. The full equations are on the mathematics page.