Building a football ratings system transforms vague impressions of team quality into quantifiable probability estimates you can compare directly against bookmaker odds.
Step 1: Gather Historical Data
You need match results with home/away goals for at least one full season. Free sources include football-data.co.uk for major European leagues. For xG-based models, fbref.com provides expected goals data for top leagues.
Organise your data in a spreadsheet or database with columns: date, home team, away team, home goals, away goals.
Step 2: Calculate League Averages
Compute the league-wide averages:
- Average home goals = total home goals / total matches (Premier League 2024-25: approximately 1.55)
- Average away goals = total away goals / total matches (approximately 1.15)
These averages anchor your ratings. A team with attack strength of 1.20 scores 20% more than the league average.
Step 3: Estimate Attack and Defence Ratings
For each team, calculate:
- Attack strength = team's goals scored / league average goals scored (home and away separately)
- Defence strength = team's goals conceded / league average goals conceded
Step 4: Predict Match Outcomes
For a match between Team A (home) and Team B (away):
- Expected home goals = Home attack(A) x Away defence(B) x League avg home goals
- Expected away goals = Away attack(B) x Home defence(A) x League avg away goals
If Team A has a home attack rating of 1.30 and Team B has an away defence of 1.10, with a league average of 1.55 home goals: Expected home goals = 1.30 x 1.10 x 1.55 = 2.22.
Step 5: Convert to Probabilities
Using the Poisson distribution with these expected goal values, calculate the probability of every scoreline from 0-0 to, say, 6-6. Sum the cells where home goals exceed away goals for home win probability, and so on.
A match with expected goals of 2.22 vs 1.05 produces approximate probabilities: Home win 62%, Draw 19%, Away win 19%.
Step 6: Time-Weight Your Data
Recent matches should carry more weight than older ones. Apply exponential decay — a common approach halves the weight of data every 30 matches. This balances responsiveness to form with statistical stability.
Comparing Your Model to the Market
The final test: do your probabilities consistently differ from closing odds? If your model says 55% home win and the market says 55%, you have no edge. Track closing line value (CLV) across hundreds of matches to determine whether your model identifies genuine value.