I am currently in the process of trying to work out a ranking system for players using a dataset of players within the English Premier League. I have a number of statistics to work with but have decided that the following are the ones I want to use:

  • Minutes
  • Pass %
  • Goals
  • Shots on Target
  • Attempts Created
  • Net Tackles
  • Clean Sheets
  • Save %
  • Fouls Won
  • Discipline

Of course within the game of Football there are different types of players which I am defining as:

  • Goalkeepers
  • Defenders
  • Midfielders
  • Forwards

I am not a stats buff by any means and have spent most of the last few days in Excel with these data trying to work out a means of ranking all of the players. I have tried looking into a number of methods of ranking the players but none seem to give a good enough result; I think during my investigations I have in fact been rewarding the most average players (i.e. the players which can score a good average score in most categories but excel in none). I have also looked at weighting the categories as, for example, Goalkeepers only score in a few of the categories but are still valuable players.

What I am trying to get to is to produce a ranking system that would allow me to create a team based on a 4-4-2 formation which would be unbeatable in the categories defined above with any other combination of players from the dataset. I am not sure if this is possible.

It would be helpful if someone could help point me in the right direction of papers of formulas that might work for what I am looking at.


Unfortunately, I'm not sure there is a simple, direct answer to your question.

Ranking individual players

Suppose we just want to rank individual players. Your spreadsheet has various attributes for the players (goals, attempts created, etc). You want a single value for each player's "goodness", so you'll need some function that combines these attributes. You could just make one up, based on your experience and opinions about how football should be played. This function should convert all of the attributes to the same units: e.g., you might decide that 10 tackles are worth one goal, 2 attempts are worth a goal, etc. You could then evaluate that function for each player, and rank them from best to worst based on the number of goal-equivalents.

Alternately, you could punt this decision to the experts. There's a ton of sports commentary floating around, including some "Best-of" lists. You might consider taking one of those lists and seeing if you can predict players' ranks from the attributes on your spreadsheet. This procedure is sometimes called "rank regression". A classic paper on this is by Cuzick (1998), but I would bet you could find packages for most common software to this. If the model works reasonably well, you could then apply it to other players who weren't in the that original list and build up a ranking that way.

In either case, you're probably going to want to condition on the players' positions. For example, a goal per game is quite good for a Forward, but would be absolutely amazing for a goalkeeper!

Building Teams

The next set of complications comes from trying to build up teams. As many with deep pockets have discovered, a team of 10 superstars is usually not 10 times better than a team with one superstar and a decent set of supporters. As such, I would bet that the best team will not be composed of the 11 best players, or even the four best forwards + four best midfielders + best two defenders.

Instead, the model for the best team is probably going to have a rich covariance structure. For example, you might see small benefit from having either a great shooter or someone who creates lots of attempts, but see a HUGE boost from having both on the same team. Learning arbitrary covariance structures often takes a lot of data.

You could try to learn this from the data. You've got player attributes already (from your spreadsheet) and you could presumably look up the outcome of some matches. That data could then be used to build a logistic regression model which predicts, from the attributes of the players on team A and team B, whether or not team A won. The full model is going to have an ungodly number of parameters, particularly if you include all the interactions. You could pare the model down by hand (does # of goals scored matter for a keeper? probably not!). You might also be able to do something like use only the maximum values for each attribute/team. In that case, your features would be something like # of tackles for best tackler on team A, # of goals for best shooter on team A, etc.

Once you've got the logistic model, you can look at the individual coefficients and turn them into odds ratios. These would tell you that e.g., scoring one more goal/game increases your odds of winning by $X$, but a getting an extra tackle in affects the odds by $Y$. You could then use these values to guide an optimization procedure to find your optimal team.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.