FanPost

A New Kind of Player Rating

Those of you who've suffered through my fanposts know I'm a fan of "top-down" analytics (which encouragingly is starting to pick up steam in the analytics community).

I've done them with a variety of twists, usually adding on a layer of complexity each time. The last time out I added a "Points Above Replacement" (PAR) calculation to the With/Without statistics.

This time I'm taking a step back from the "With/Without" part and replacing it with a weighted score, where the goals for and against are modified based on the player's position in each match. Put simply, a player's goals against "score" will be affected more if they are a defender than if they are a forward. Conversely, forwards get a bigger piece of the "credit" for the goals scored when they are on the pitch. Strictly speaking this sort of weighting violates the spirit of a true "top-down" metric, but it has been suggested before by the commentariat and I kind of wanted to see what it might look like anyway.

So first the basics. For each match we keep track of how many goals are scored and conceded when a given player is on the pitch. Goals are not equal though - they are normalized based on two factors. The first is how many goals the opponent normally concedes/scores in a match and the second is splitting that into a home and away component. Those are the "expected" goals. Those expected goals are compared to what actually happened to create a "goals for" and "goals against" score. In the table below those are the "gf_net" and "ga_net" columns.

As a simple example, if Aston Villa normally concede 3 goals a match on the road and LFC only manage to net 1, that means everyone on the field's gf_net will be (-2) for that game - they scored 2 fewer goals than expected. Goals against is just the opposite. If Aston Villa normally score 1 goal on the road and LFC concede 0, then ga_net is (-1) for that match, because we allowed one fewer goal than expected.

So the twist this time around is we're weighting those scores. The weights I chose are frankly arbitrary - but I think they make sense. The nice thing is they are easy to change so if you have suggestions let me know.

Here's how I decided to weigh things:

For goals against:

Forwards: 0.05 (i.e. Sturridge is "responsible" for 5% of any goal we concede)

Midfielders: 0.2

Defenders: 0.3

Keeper: 0.45

For goals scored:

Forwards: 0.45

Midfielders: 0.3

Defenders: 0.2

Keeper: 0.05

You'll note the weights are mirror images of one another and they add up to 1.0 for both sides of the ball. One of the regrettable things (to me anyway) is how the positions are broken down: F,M,D,G.

Obviously this is not ideal - for example an attacking fullback should probably get a bigger piece of the credit for goals scored than your average CB whereas here they are lumped into 'D.' But this is what I'm limited to, having chosen ESPN for my data source.

So without delay (ha!), here's the 2015/16 table after 28 EPL matches for Liverpool:

name games minutes gf_net ga_net gd adj_gd adj_gdpg adj_ppg adj_pps multiplier par
Roberto Firmino 25 1569 8.54 -0.19 8.73 4.27 0.25 0.191 7.26 0.601 4.36
Jordan Henderson 15 1177 8.58 -0.87 9.45 2.75 0.21 0.164 6.22 0.451 2.81
Emre Can 27 2222 8.75 0.41 8.34 2.59 0.1 0.082 3.1 0.851 2.64
James Milner 23 2018 6.43 0.57 5.86 2.54 0.11 0.088 3.35 0.773 2.59
Philippe Coutinho 19 1557 2.87 -5.89 8.76 2.23 0.13 0.101 3.82 0.597 2.28
Adam Lallana 23 1654 1.34 -6.03 7.36 1.99 0.11 0.084 3.21 0.634 2.04
Divock Origi 11 444 3.75 -2.04 5.78 1.79 0.36 0.282 10.73 0.17 1.82
Simon Mignolet 27 2430 7.13 -2.25 9.38 1.37 0.05 0.039 1.5 0.931 1.4
Kolo Touré 7 521 10.95 2.91 8.04 1.32 0.23 0.177 6.73 0.2 1.35
Dejan Lovren 17 1401 -0.88 -4.61 3.72 1.21 0.08 0.06 2.29 0.537 1.23
Nathaniel Clyne 27 2430 5.73 -0.05 5.78 1.11 0.04 0.032 1.22 0.931 1.14
Alberto Moreno 26 2010 5.99 2.02 3.97 0.54 0.02 0.019 0.72 0.77 0.55
Jon Flanagan 2 151 0.97 -0.72 1.7 0.41 0.25 0.191 7.26 0.058 0.42
Daniel Sturridge 6 352 0.76 1.55 -0.8 0.26 0.07 0.052 1.98 0.135 0.27
Steven Caulker 1 2 0.97 -0.04 1.01 0.21 9.27 7.224 274.51 0.001 0.27
Mamadou Sakho 18 1562 4.43 2.14 2.29 0.24 0.01 0.011 0.42 0.598 0.25
Kevin Stewart 1 24 0.56 -0.21 0.77 0.21 0.79 0.615 23.37 0.009 0.21
Brad Smith 1 29 -0.32 -0.51 0.18 0.09 0.27 0.211 8.03 0.011 0.09
Martin Skrtel 17 1481 -1.06 -0.87 -0.19 0.05 0 0.002 0.09 0.567 0.05
Joseph Gomez 5 438 -1.91 -1.39 -0.53 0.03 0.01 0.005 0.2 0.168 0.03
Jordan Rossiter 1 14 -0.11 -0.21 0.1 0.01 0.06 0.045 1.69 0.005 0.01
Joao Carlos Teixeira 1 3 -0.04 -0.06 0.02 0 0.02 0.017 0.63 0.001 0
Christian Benteke 24 1258 -0.35 -1.81 1.46 -0.07 0 -0.004 -0.14 0.482 -0.07
Jordon Ibe 21 851 1.59 7.22 -5.63 -0.28 -0.03 -0.023 -0.87 0.326 -0.28
Danny Ings 5 314 -0.48 2.62 -3.11 -0.35 -0.1 -0.078 -2.96 0.12 -0.36
Joe Allen 8 201 -2.62 -1.27 -1.36 -0.53 -0.24 -0.186 -7.07 0.077 -0.54
Adam Bogdan 1 90 -0.8 2.13 -2.93 -1 -1 -0.779 -29.6 0.034 -1.01
Lucas 19 1517 -1.09 6.16 -7.24 -1.56 -0.09 -0.072 -2.73 0.581 -1.59

Column definitions:

name, games, minutes: hopefully self-explanatory

gf_net: The sum of the goals scored minus the expected goals scored for each match for which this player was on the pitch. This is the raw number (no adjustments)

ga_net: the sum of the goals conceded minus the expected goals conceded for each match for which this player was on the pitch. This is the raw number (no adjustments). A negative number is good!

gd: gf_net minus ga_net

adj_gd: gf_net and ga_net are adjusted according to the position the player was playing when the goal(s) was/wasn't scored by the weights discussed above and then subtracted from one another to give an adjusted goal differential.

adj_gdpg: adj_gd per 90 minutes

adj_ppg: adjusted goal differential (adj_gdpg) converted to points using the historical correlation (0.779 * gd).

adj_pps: adj_ppg extrapolated to a full 38 game season (adjusted points per season)

multiplier: The percentage of minutes of the total possible that player has played.

par: Points Above Replacement - figured by: multiplier * adj_pps

So there you have it. A top-down measurement of Liverpool's players, weighted by position. Some interesting things to note: Coutinho would have been ranked much higher by doing things the old way - weighting the scores hurts him a lot since he gets little "credit" now for the fact that fewer goals are conceded when he's on the pitch. Lallana too.

I looked at a lot of other teams using this method and things actually look about the way you'd expect. So much so that I decided to create a league "table" using these scores. To do that I took the average "par" for each team and multiplied it by 11 (because it goes to 11) (OK actually because there are 11 players on the field) and added that number to 52 (a historically meaningful number that I won't go into here) to get the "expected points" for each team. Here's what that table looks like:

team avg_par exp_pts
Tottenham Hotspur 2.8 82.8
Leicester City 2.3 77.3
Manchester City 2.02 74.22
Arsenal 1.78 71.58
Everton 1.43 67.73
West Ham United 0.96 62.56
Southampton 0.77 60.47
Liverpool 0.73 60.03
Manchester United 0.66 59.26
Chelsea 0.53 57.83
Watford -0.01 51.89
Stoke City -0.37 47.93
Crystal Palace -0.84 42.76
West Bromwich Albion -0.91 41.99
Swansea City -0.91 41.99
AFC Bournemouth -1.15 39.35
Norwich City -1.58 34.62
Sunderland -1.81 32.09
Newcastle United -1.82 31.98
Aston Villa -3.01 18.89

Aside from the fact that the expected points are higher in nearly every case than what most models predict, it looks pretty good. Geez Everton, do you not like winning?

Thanks for reading.

Please make any posts here geared towards creating discussion. Any works that are copied and pasted from other sites will be deleted. This isn't a place to advertise services or your blog, it's an extension of our site. Please treat it as such.