About EloKit

Football Elo Rating System for European club football

What is EloKit?

EloKit is a football analytics platform that applies the Elo rating system to European club football. Originally developed for chess, the Elo model provides a principled way to measure team strength and predict match outcomes.

Ratings are computed across 325 clubs in 5 domestic leagues plus the Champions League, Europa League, and Conference League — covering 32k+ matches from 2010 to present. The 2010–2016 seasons serve as a warm-up calibration period; ratings displayed on the site start from August 2016.

How ratings work

  • Home advantage — a fixed bonus added to the home team's expected score (default: 55 Elo points).
  • Margin of victory — the K-factor is scaled using the FiveThirtyEight log-goal formula so heavy wins count more.
  • Competition weighting — Champions League knockout matches carry a higher K multiplier (T1 = 1.5×) than domestic fixtures (baseline 1.0×).
  • Time decay — ratings drift slowly toward the mean between seasons (DR = 0.90), preventing stale dominance.
  • Promoted teams — newly promoted sides start at a fixed initialisation rating (PE = 1400).

Prediction accuracy

Every upcoming fixture gets a pre-match win-probability estimate. Once a match is played the prediction is scored using the Brier score (lower = better calibration). EloKit currently tracks over 20,000 historical predictions with a mean Brier score of 0.586, in line with naive baselines for three-outcome football prediction.

Prediction accuracy detail — including a 3×3 confusion matrix, calibration chart, and Brier score trend — is available in the Accuracy section of each league or team view.

Coverage

England Premier League (England)
Spain La Liga (Spain)
Germany Bundesliga (Germany)
Italy Serie A (Italy)
France Ligue 1 (France)
Champions League UEFA Champions League

Roadmap

Completed (Sprints 1–15.2)

  • Elo engine with home advantage, MoV scaling, time decay, competition tiers
  • 5 domestic leagues + CL / EL / Conference League (31,789 matches)
  • 2010–2016 warm-up calibration period
  • SQLite persistence with schema migrations
  • FastAPI backend with 17 REST endpoints + OpenAPI docs
  • Live data via football-data.org API (daily cron)
  • Unified EloKit frontend (Alpine.js + ApexCharts + Tailwind)
  • Prediction tracking: 20,000+ historical predictions, Brier score, calibration chart
  • Nation flags & competition logos
  • Detailed prediction accuracy view (3×3 confusion matrix, match log, Brier trend)
  • Elo change deltas on completed fixture cards
  • Docker + CI/CD deployment on VPS

Coming next (Sprints 16–21)

  • Per-competition Elo breakdown — see how much of a team's rating was earned in the PL vs. CL vs. cups
  • Upset Index — the biggest upsets in the dataset ranked by Elo differential
  • Head-to-head history — full H2H record enriched with Elo context for any two clubs
  • Monte Carlo season simulation — title, European qualification and relegation probabilities
  • Undervalued / overvalued teams — which clubs are outperforming or underperforming their rating
  • Public REST API with rate limiting and OpenAPI documentation
  • Club crests for all 325+ teams

Research & long-term (Sprints 22+)

  • Expected goals (xG) integration for more nuanced Elo updates
  • Two-leg tie modeling for knockout rounds
  • Bayesian parameter optimisation — per-league tuning
  • Full UEFA coverage — all 55 member association top-flight leagues
  • Chart export (PNG / CSV) and shareable configurations

Data sources

Github