Skip to content

The model

A Dixon-Coles goal model. Each club gets an attack and a defence rating, fitted by maximum likelihood on every Superleague match in the record, weighted so recent matches count for more.

Track record

Every prediction is scored once the match is over. Nothing is excluded and nothing is re-run with hindsight.

Predictions scored
0
RPS
baseline 0.2292
Log loss
baseline 1.0699
Correct calls
baseline 44.4%

Nothing has been scored yet this season. The numbers above fill in as matches finish.

Backtested The archive, for scale

Seasons played before this site existed, each match priced from a fit over matches played strictly before its own kickoff. An honest test, but not a forecast published in advance — the fitting code was written knowing how those seasons ended. It is kept out of the record above for that reason.

Matches
129,629
RPS
0.2352
Log loss
1.2096
Correct calls
47.8%

What these numbers mean

Ranked probability score
The standard measure for three-way football outcomes. It knows home, draw and away sit on a line, so calling a home win in a drawn match costs less than calling one when the away side wins. Lower is better; bookmakers in major leagues run around 0.19 to 0.21.
Log loss
Punishes confident mistakes severely. It is here to catch a model that has quietly learned to hedge everything toward the average, which the score above is more forgiving of.
Correct calls
The least useful of the three, and included for completeness. A model that says 40% and is right 40% of the time is working exactly as intended while appearing wrong more often than not.

Calibration

Of the matches where the model quoted a given confidence, how often was it right? A well-calibrated model lands each band close to its own midpoint. This is the harder test: it catches being right often while being systematically overconfident.

Confidence band Said Happened Matches Gap
30-40% 35.0% 34.7% 24841
-0.3%
40-50% 44.4% 43.5% 36228
-0.8%
50-60% 54.7% 53.3% 15236
-1.4%
60-70% 64.7% 65.4% 9518
+0.7%
70-80% 74.2% 74.7% 5390
+0.5%
80-90% 83.3% 83.0% 1257
-0.3%
90-100% 98.0% 43.4% 15564
-54.6%

How it works

Two Poissons and a correction

Goals for each side are drawn from a Poisson distribution. The home side's rate is the league's base scoring rate multiplied by their attack, the opponent's defence and a home-advantage term; the away side's is the same without that last multiplier.

Treating the two as independent is known to understate low-scoring draws, so a Dixon-Coles correction adjusts the four scorelines where both sides scored at most once. Every market on the site is then a sum over the resulting grid, which is why the numbers never contradict each other.

Recency and doubt

Each match in the fit carries an exponential decay weight, so last month counts for more than three seasons ago. Backtesting put the best half-life at roughly fifteen months — gentle. Aggressive decay scored worse: this league is stable, and discarding old matches discards real information.

Ratings are then pulled toward the league average in proportion to how little evidence supports them. Without that, a club three matches into a season gets an absurd rating published with a straight face. Newly promoted sides start below average and climb out of it as they play.

What it does not use

  • · Head-to-head history. Past meetings mostly record squads that no longer exist, and adding it made the backtest worse.
  • · Expected goals. The data provider publishes no shot-level statistics for this league, so there is none to use.
  • · Injuries, suspensions, team news or motivation. All of it matters; none of it is available as structured data here, and guessing at it would be dressing up an opinion as a number.
  • · Bookmaker odds. Prices are compared against the model, never fed into it — otherwise it could only ever agree with the market.

Current ratings

Fitted 47 minutes ago on 712 matches. Base scoring rate 1.201, home advantage 1.221.

Team Attack Defence Strength
Olympiakos Piraeus 1.41 0.49 2.85
AEK Athens FC 1.45 0.57 2.57
PAOK 1.62 0.68 2.39
Panathinaikos 1.31 0.72 1.82
Aris Thessalonikis 0.95 0.75 1.26
Levadiakos 1.30 1.04 1.25
Atromitos 0.99 0.94 1.05
OFI 1.01 1.15 0.88
Asteras Tripolis 0.83 1.03 0.81
Panetolikos 0.72 0.94 0.77
Kallithea 0.80 1.07 0.75
Kifisia 0.85 1.16 0.74
Volos NFC 0.82 1.18 0.70
Larisa 0.77 1.14 0.68
PAS Giannina 0.85 1.29 0.66
Panserraikos 0.72 1.35 0.53
Lamia 0.70 1.35 0.52

1.00 is exactly league average. Attack above one scores more than an average side; defence below one concedes fewer. Strength is attack divided by defence.