1. Keep current and historical data separate
Current fixtures and tables come from the selected provider. With both free keys saved, football-data.org can supply the current season while API-Football contributes completed seasons from 2022–2024. Team names are normalised to provider-neutral identities before historical results are allowed into a model.
2. Fit the Dixon-Coles model
Each usable league model learns separate attacking and defensive strengths, a home advantage and a competition scoring level. Recent matches receive more weight, ridge regularisation reduces unstable extremes, and a fitted rho term corrects the dependence of 0–0, 0–1, 1–0 and 1–1 outcomes.
3. Use an honest fallback
If a current team cannot be mapped or a league lacks at least 120 completed matches, the page is labelled “Poisson fallback”. That model blends current venue records with a five-match competition prior. Both engines produce one normalised score distribution for 1X2, BTTS, totals, double chance and exact scores; neither is presented as a guarantee.
4. Publish before kick-off
Forecasts are published at least 30 minutes before the scheduled kick-off. We save the model version, input records, original selection and publication time. These inputs are not overwritten by later score updates. The stored record is not an independent third-party audit.
5. Record all outcomes
Main selections are settled against the 90-minute score, including stoppage time, and excluding extra time and penalties. Cancelled, abandoned and awarded fixtures are void. Postponed or suspended fixtures remain unresolved until a supported final result arrives. Missing regulation scores remain unsettled for review. Provider score corrections can update settlement; the original forecast stays unchanged.
What the model does not know
It does not account for verified line-ups, player injuries, weather, game-state dependence or tactical changes. Newly promoted sides and limited samples are challenging. The model has no independently validated betting edge. No bookmaker odds, profit or ROI are invented. Any future odds integration must use captured, timestamped bookmaker prices.
Updates and data availability
Fixtures use a scheduled refresh and server-side cache. Kick-off dates are grouped in UTC; local time display is optional. This is not a minute-by-minute livescore service. Data availability depends on provider coverage and account season access. Forecasts are withheld when source records are insufficient.