Colley Ratings#

Colley Ratings are a mathematically sound, unbiased method for ranking football teams, relying exclusively on match outcomes rather than scores or margins of victory.

Unlike some rating systems, the Colley method is specifically designed to be objective, using only wins, losses, and draws without subjective weighting.

Its mathematical simplicity and stability make it highly suitable for quickly evaluating team performance, objectively comparing team strengths, and identifying discrepancies between actual team quality and public perception or bookmaker odds.

[1]:
import penaltyblog as pb
[2]:
fbd = pb.scrapers.FootballData("ENG Premier League", "2021-2022")
df = fbd.get_fixtures()

df.head()
[2]:
date datetime season competition div time team_home team_away fthg ftag ... b365_cahh b365_caha pcahh pcaha max_cahh max_caha avg_cahh avg_caha goals_home goals_away
id
1628812800---brentford---arsenal 2021-08-13 2021-08-13 20:00:00 2021-2022 ENG Premier League E0 20:00 Brentford Arsenal 2 0 ... 1.75 2.05 1.81 2.13 2.05 2.17 1.80 2.09 2 0
1628899200---burnley---brighton 2021-08-14 2021-08-14 15:00:00 2021-2022 ENG Premier League E0 15:00 Burnley Brighton 1 2 ... 1.79 2.15 1.81 2.14 1.82 2.19 1.79 2.12 1 2
1628899200---chelsea---crystal_palace 2021-08-14 2021-08-14 15:00:00 2021-2022 ENG Premier League E0 15:00 Chelsea Crystal Palace 3 0 ... 2.05 1.75 2.12 1.81 2.16 1.93 2.06 1.82 3 0
1628899200---everton---southampton 2021-08-14 2021-08-14 15:00:00 2021-2022 ENG Premier League E0 15:00 Everton Southampton 3 1 ... 2.05 1.88 2.05 1.88 2.08 1.90 2.03 1.86 3 1
1628899200---leicester---wolves 2021-08-14 2021-08-14 15:00:00 2021-2022 ENG Premier League E0 15:00 Leicester Wolves 1 0 ... 2.02 1.91 2.01 1.92 2.05 1.95 1.99 1.89 1 0

5 rows × 111 columns

Colley ratings including tied scorelines#

[3]:
colley = pb.ratings.Colley(
    df["goals_home"], df["goals_away"], df["team_home"], df["team_away"]
)
colley.get_ratings()
[3]:
team rating
0 Liverpool 1.904762
1 Man City 1.892857
2 Chelsea 1.791667
3 Tottenham 1.708333
4 Arsenal 1.672619
5 Man United 1.654762
6 Brighton 1.64881
7 Crystal Palace 1.625
8 West Ham 1.619048
9 Leicester 1.607143
10 Newcastle 1.583333
11 Wolves 1.559524
12 Southampton 1.541667
13 Brentford 1.529762
14 Aston Villa 1.511905
15 Burnley 1.511905
16 Leeds 1.505952
17 Everton 1.464286
18 Norwich 1.339286
19 Watford 1.327381

Colley ratings excluding tied scorelines#

[4]:
colley = pb.ratings.Colley(
    df["goals_home"],
    df["goals_away"],
    df["team_home"],
    df["team_away"],
    include_draws=False,
)
colley.get_ratings()
[4]:
team rating
0 Liverpool 0.809524
1 Man City 0.809524
2 Chelsea 0.678571
3 Tottenham 0.630952
4 Arsenal 0.607143
5 Man United 0.547619
6 West Ham 0.52381
7 Brighton 0.511905
8 Leicester 0.5
9 Crystal Palace 0.488095
10 Newcastle 0.47619
11 Wolves 0.47619
12 Brentford 0.440476
13 Aston Villa 0.428571
14 Southampton 0.416667
15 Leeds 0.392857
16 Burnley 0.380952
17 Everton 0.380952
18 Norwich 0.25
19 Watford 0.25