Markets coveredMatch OddsCorrect ScoreOver / UnderFirst HalfSecond Half
Statometrics
Model Library · Ratings and regression

Massey and Colley ratings

Two least-squares rating methods that solve for every team's strength at once, from goal margins (Massey) or wins and losses (Colley).

Intermediatepre-matchevaluation

In one sentence

Massey and Colley ratings find the set of team strengths that best explains every result so far, all at once, rather than updating one match at a time.

How it works

Elo walks through results one by one. Massey and Colley look at the whole season as a puzzle: which set of ratings best fits every score seen so far?

Kenneth Massey's method says the goal margin in each match should be roughly the difference between the two teams' ratings. It then finds ratings that make those predicted margins as close as possible to the real ones. This automatically adjusts for strength of schedule, because beating good teams counts for more.

Wesley Colley's method ignores margins and uses only wins and losses. It starts every team at 0.5 and adjusts for results and opponents' strength. It was built for US college sports rankings, where rewarding big margins was seen as encouraging teams to run up scores.

The maths

Massey:∑matches(margin−(rhome−raway))2 is minimised, with ∑iri=0\text{Massey:} \quad \sum_{\text{matches}} \big(\text{margin} - (r_{\text{home}} - r_{\text{away}})\big)^2 \ \text{is minimised, with} \ \sum_i r_i = 0 Colley:C r=b,Cii=2+ni,Cij=−nij,bi=1+wi−li2\text{Colley:} \quad C\,r = b, \qquad C_{ii} = 2 + n_i, \quad C_{ij} = -n_{ij}, \quad b_i = 1 + \frac{w_i - l_i}{2}
  • r: the rating for each team.
  • margin: goals scored minus goals conceded in a match.
  • n_i: matches played by team i; n_ij: matches between teams i and j.
  • w_i, l_i: team i's wins and losses.
  • C, b: a table of who played whom and a column of adjusted results, solved together.

In words: Massey picks ratings whose differences best match the goal margins; Colley picks ratings that best balance wins and losses against opponent strength.

Worked betting example

A four-team mini league (no home advantage for simplicity): Ashford 2-0 Bexley, Ashford 1-1 Crawley, Bexley 3-1 Dover, Crawley 2-0 Dover, Ashford 1-0 Dover, Bexley 0-1 Crawley.

  1. Goal differences: Ashford +3, Bexley −1, Crawley +3, Dover −5.
  2. Massey ratings (summing to zero): Ashford +0.75, Crawley +0.75, Bexley −0.25, Dover −1.25.
  3. Colley ratings: Ashford 0.667, Crawley 0.667, Bexley 0.417, Dover 0.25.
  4. Next up, Bexley v Dover. Massey predicts Bexley by −0.25 − (−1.25) = 1.0 goal.
  5. To get a price you need an extra assumption. Treat the goal margin as roughly normal with a spread of 1.7 goals and count a margin above 0.5 as a Bexley win: P ≈ 61.6%, fair price ≈ 1.62.
  6. Betfair offers 1.95. £10 stake at 2% commission: a win pays £9.50 × 0.98 = £9.31. EV ≈ 0.616 × £9.31 − 0.384 × £10 ≈ +£1.89.

With six matches this is a toy; ratings this early are far too noisy to bet on.

Where it's good

  • Adjusting league tables for strength of schedule, especially early season or in unbalanced fixtures.
  • Handicap and total-margin markets, where Massey's predicted margin maps directly onto the line.
  • Leagues where teams rarely meet, such as cup competitions linking divisions.
  • A clean, quick benchmark to test fancier models against.

Limitations and pitfalls

  • Massey rewards thrashings, so a 6-0 win over a weakened side can distort ratings; many users cap margins.
  • Colley throws away scoreline information, which matters for goal-based markets.
  • Both treat old and new results equally unless you add time weights.
  • Home advantage must be added as an extra term; leaving it out biases everything.
  • Turning ratings into probabilities needs an extra assumption, like the normal spread above, which you must check against data.
  • Early-season ratings with few games are unstable; the maths will happily fit noise.
  • Public rankings such as these are widely known, so any edge is more likely in less-followed leagues.

How to build it

  • Python: numpy.linalg.solve or scipy least squares; R: the base lm function with team dummy variables.
  • Data: a results table with home team, away team and score.
  • Add exponential time decay by weighting recent matches more heavily in the least-squares fit.
  • Tip: compare predicted margins with Asian handicap closing lines to see whether your ratings add anything.
18+ only. Educational content, not financial or betting advice. Past results do not guarantee future returns. If gambling stops being fun, get free, confidential help at BeGambleAware.org.
Members