Loading model…
No fixtures scheduled beyond the last recorded result.
Rundown — next up
Probability of each final total
Matches already played this session
Each fixture opens at the operators’ real position in their session, counted from the schedule. Drag to override and the whole distribution moves — a first match of the day scores far lower than a thirtieth, and the size of that shift is fitted separately for every operator.
Scoring level, by month
Swings 0.85 goals across the year — five times larger than the gain from knowing who is playing. That is why recent matches count for far more.
Warm-up, this fixture
Expected total against matches already played. The dot marks where this fixture actually sits.
Calibration — held-out test
Predicted against observed on unseen matches. On the diagonal means a stated 60% happened 60% of the time.
Operators
The operator is the entity here, not the club. Badges rotate every round, so team form means nothing — these are the people. Attack and defence are on a log-goal scale, centred on the league average. Warm-up is how much a player improves across a session.
| Operator | Attack | Defence | Warm-up | Shape | Matches |
|---|
Higher attack means more goals scored. Lower defence means fewer conceded, so negative is good. Operators who have not played recently are left out entirely rather than shown on stale numbers.
How this works
Nothing here is proprietary. The model is a few dozen numbers and they are all on this page.
The model
Each side’s scoring rate is built from who is playing:
Those rates become a distribution over total goals, which is where every over/under number on this site comes from. The distribution is deliberately narrower than a textbook Poisson: goals here are less erratic than the standard assumption, so the shape is compressed by a fitted factor (currently ).
Three things that surprised us
- Home advantage is nothing. The fitted home term is on the log scale — about two hundredths of a goal. “Home” is just a stream slot, so this makes sense, but any model ported from real football would carry a bias fifteen times too large.
- Players warm up, they do not tire. More matches into a session means more goals, worth roughly 0.6 across a long day. Every operator has their own curve; some barely move.
- The scoring level drifts more than the players matter. It swung 0.85 goals over the year. Tracking that is worth about five times more than knowing who is on the pitch.
Is it any good?
Judge it on calibration, not on how often it picks a winner. The chart below is every prediction on matches the model never saw during development, grouped by confidence. Points on the dashed line mean the stated probability matched reality.
Predicted against observed
What it cannot do
- It is already at its limit. Average error is 1.854 goals against a floor of 1.860 — the model is as accurate as its own uncertainty allows. The rest is what a 15-minute match does on its own, and no amount of extra modelling removes it.
- High-scoring calls run hot. When it says a match is very likely to go high, it is a little over-confident. Trust the middle of the range more than the top.
- It knows nothing about prices. No odds are used anywhere. A well-calibrated probability still loses money against a bookmaker’s margin, so nothing here says whether a price is worth taking.