Statistical analysis of football

Probabilities you can check.

We estimate the joint distribution over the exact scores of a match. Every goal market follows from that matrix — full time, first half, second half — consistent by construction. Then we publish how right we were.

connecting…61,746 matches on filefigures as of 15 August 2026

How to read it

Three levels, in this order.

A number on its own cannot be checked: either you trust it or you don’t. That is why under every probability sits the reason that produced it, and under that the record of how those probabilities have held up over time.

01
71.4%Over 2.5medium confidence

The number

The probability of the market, next to how much the model actually knows about that match. When it knows little, it says so.

02
home2.1
away1.3

expected goals · 90 minutes

The reason

The expected goals of the two sides. They are the primitive everything else comes from: «2.1 against 1.3» explains a 71% Over 2.5 on its own.

03

The proof

The historical calibration, computed on forecasts saved before kick-off. It is the one thing anyone can verify from the outside.

The joint matrix

121 scores, a single distribution

The model does not estimate «the probability of Over 2.5». It estimates how likely each single result is: 0-0, 1-0, 2-1, all the way to 10-10. Eleven by eleven, one cell per score, and they sum to exactly one.

Example with expected goals 1.74 – 1.12. The percentages beside it are genuinely computed from this matrix, live.

home goalsaway goals
possible scores121
cells add up to100%

What comes out

Sixteen market families, one single origin.

First half and second half have models of their own, and full time is born from their convolution. It costs one ten-thousandth of RPS — nothing — and in exchange the three windows cannot contradict each other.

Ninety minutes

the main window

  • 1X2 result
  • Over / Under
  • Both teams to score
  • Double chance
  • Goal range
  • Home team goals
  • Away team goals
  • Correct score
  • Result + goals combo
  • Odd / Even

First half

estimated, not derived

  • 1X2 result
  • Over / Under
  • Both teams to score

Second half

a gift from the convolution

  • 1X2 result
  • Over / Under
  • Both teams to score

Consistency, up close

The first half cannot be likelier than the full match.

It sounds obvious, and with one model per window it happens constantly with nothing to flag it. Here the three rows come out of the same distribution: the inequality is arithmetic.

Inter – MonzaOver 1.5
first half45.6%
second half60.3%
full time87.4%

The public record

When we say 70%, does it happen 70% of the time?

Anyone can publish percentages. Almost nobody publishes how right they were. Every forecast is saved before kick-off and compared with what actually happened: if the model is calibrated, the points sit on the diagonal.

Being calibrated does not mean guessing right. It means the published number really says what it claims — and that is the only thing anyone can check from the outside.

Predicted against observed

walk-forward validation
Over 2.5
49.5%51.1%
Both teams to score
51.2%53.6%
Over 4.5
14.1%13.5%
Over 5.5
6.2%5.5%
predicted by the model observed on the pitch

Measured on 18,599 matches the model had never seen. The tails — Over 4.5 and Over 5.5 — are the best calibrated markets, the opposite of what you would expect.

Calibration error, before and after

Isotonic calibrators reach production only where they pass a log loss test on unseen data: squeezing probabilities costs discrimination, and on an already calibrated market it does not pay off.

Both teams to score
0.04480.0220
beforeafter
Over 2.5
0.03730.0192
beforeafter
Over 3.5
0.03030.0065
beforeafter

Where we are

Measured numbers, not promised ones.

0
matches on file

six seasons, rebuilt match by match

0
competitions coveredbeing expanded

the catalogue is growing: more leagues on the way

0.0000
walk-forward RPS

over 18,755 matches the model had never seen

0
market families

full time, first half and second half, from the same matrix

Against the reference models

Weighted average RPS, walk-forward validation. The shorter the bar, the better. The scale starts at 0.20: a few thousandths separate a decent model from a very good one, and they deserve to be visible.

A1 Dixon-Coles0.2132
Plain Poisson0.2147
Historical frequencies0.2279
Uniform probabilities0.2338

Coverage

28 competitions, and the number is climbing.

The catalogue of covered leagues is being expanded: we are adding more, and each new competition brings six seasons of history with it before it can be published. This page reads the list from the service, so it updates itself.

List from the last check: the service did not answer.

BundesligaGermanyPremier LeagueEnglandUEFA Europa Conference LeagueEuropeChampionshipEnglandJupiler Pro LeagueBelgiumSegunda LigaPortugalSegunda DivisiónSpainSerie C — Girone BItalyBrasileirãoBrazilPremiershipScotland+ more on the way
La LigaSpainSerie AItalyUEFA Europa LeagueEuropeEerste DivisieNetherlandsLeague OneEnglandLigue 2FranceSerie BItalySerie C — Girone CItalyLiga MXMexico
Ligue 1FranceUEFA Champions LeagueEurope2. BundesligaGermanyEredivisieNetherlandsLeague TwoEnglandPrimeira LigaPortugalSerie C — Girone AItalySüper LigTürkiyeMajor League SoccerUnited States

The boundary

Sports data analysis. Not a betting app.

The distinction is not cosmetic: it decides what may leave the service and what may not. It is written in the code before it is written on this page.

  1. No odds

    Bookmaker odds stay in the backend, where they serve as the yardstick for how good the model is. They never reach the page, and an automated test checks that on every response the service gives.

  2. No advice

    What we publish are probabilities, expected goals and statistics. What to do with them is not a question this project answers, and nowhere will you find a line telling you what to bet.

  3. No number without its uncertainty

    Every forecast carries how much the model actually knows about that match. For a newly promoted side on matchday three the confidence is low, and it says so.

18+Gambling can lead to addiction. This site does not promote gambling, carries no operator advertising and does not invite anyone to bet.

What comes next

The app ships when the numbers are ready to stand comparison.

iOS and Android, free. Until then the work continues where it counts: collecting data every three hours, retraining the models every Monday and building up the track record that makes everything else verifiable.

iOScoming soonAndroidcoming soon