Stream Rundown

Goal distributions for the eAdriatic League. Every match is a distribution, not a scoreline — so the whole shape is published.

MODEL LIVE
96,903 matches trained
data to 2026-08-18 08:45 UTC

How this works

Nothing here is proprietary. The model is a few dozen numbers and they are all published on this site.

Matches trained
96,903
rolling, refreshed nightly
Operators
47
active enough to rate
Error per match
1.854
goals, on unseen data
Noise floor
1.860
best achievable, same data

The model

Each side’s scoring rate is built from who is playing:

rate(home) = base + attack(home) + defence(away) + home term + warm-up(home) rate(away) = base + attack(away) + defence(home) + warm-up(away)

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 1.120.

Three things that surprised us

Is it any good?

Judge it on calibration, not on how often it picks a winner. This is every prediction on 15,486 matches the model never saw during development, grouped by how confident it was. If the two columns match, a stated probability means what it says.

We saidIt happenedMatches
27%28%216
36%33%668
46%43%2,227
55%55%4,004
64%63%4,503
75%74%3,025
83%80%811

What it cannot do