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
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
- Football-Data.co.uk — domestic league CSVs (2010–present)
- openfootball — CL / EL / Conference League historical data
- football-data.org — live fixtures and results (daily update)
Github
- linards-kalvans/elo-football — source code