Solved – Accounting for “autocorrelation” in margin-based Elo ratings

autocorrelationelorating

I'm trying to incorporate margin-weighting into a simple Elo rating system for a sports league. Classic Elo only encompasses Win/Draw/Loss data but I want to further reward teams for winning by a higher-than-expected margin. And I similarly want to be able to make predictions about future match margins from Elo rating differences.

I've been reading around a fair bit, and what I'm trying to do looks broadly similar to what Nate Silver has done with the NFL and NBA. In the case of the NFL, he has written a very plain-language explanation of how Autocorrelation when using margins can be an issue.

As I understand it, good teams often "run-out" and win by lots, over-inflating their rating. I'm not EXACTLY sure why this is autocorrelation, but whatever.

His solution to this is to use this formula:

Margin of Victory Multiplier = LN(ABS(PD)+1) * (2.2/((ELOW-ELOL)*.001+2.2))

Where PD is the point differential in the game, ELOW is the winning team’s Elo Rating before the game, and ELOL is the losing team’s Elo Rating before the game.

What I want to know is how he chose this formula and the parameters. And what should I do to help account for autocorrelation in my Elo ratings , bearing in mind it is a different sport with entirely different fixture lengths and variance?

In his NBA Elo rankings he uses an entirely different formula to account for margin of victory and autocorrelation. How does he decide this? Is he fitting it to some sort of raw data or just guessing?

The margin of victory multiplier (for the NBA) is calculated as follows:

Take a team’s margin of victory, add 3 points and then take the result to the power of 0.8.

Divide the result by the following formula: 7.5+.006*(elo_diff), where elo_diff represents the Elo rating difference between the teams, accounting for home-court advantage. Elo_diff should be negative in games won by the underdog.

Best Answer

If you try graphing the equations on https://www.desmos.com/calculator they will make much more sense. For the NFL equation with different (ELOW-ELOL) values, say 50,100,200 for example you get get a graph probably 95% correlated to ln(x+1) which is the main part of the equation. Adding abs(x) makes sure the point differential is always expressed as a positive number so you can ignore the graph where x is negative.

The final bit of the equation, (2.2/((ELOW-ELOL)*.001+2.2)) which we'll refer to as auto_m is the most complicated and confusing term, but it has very little impact on the overall equation. This is the bit that accounts for autocorrelation. There are two cases

1)ELOW - ELOL will be positive when the favorite wins and auto_m will be a number slightly < 1 2)ELOW - ELOL will be negative when the underdog wins and auto_m will be a number slightly > 1.

The net affect is to decrease the margin of victory multiplier when the favorite wins and increase the margin of victory multiplier when the underdog wins.

For the NBA equation ((x+3)^.8)/7.5 it looks like they are using a more linear equation (x^1 would be exactly linear) so winning by 20 points vs 18 points is almost as significant as winning by 4 points vs 2 where as in the NFL they use a much quicker diminishing reward for blowouts. The general shape of the base equations ((x+3)^.8)/7.5 and ln(x+1) are very similar for the values of x>0. For a value of x=1 the multiplier is 0.40 for the NBA and 0.69 for the NFL. Using an exactly linear equation would have too big of a multiplier(as large as 3.0) for large blowouts. The multiplier should be kept between 0 and 2.0 as a rule of thumb.

A similar equation using the NFL type equation for the NBA would be something like ln(x+4)1/((ELOW-ELOL).006+3) but as I said they wanted a more linear equation which is why they use x^n instead of ln(x) though the general shape of the curve is the same r shape where x>0.

For games with less scoring like hockey or soccer where there are usually only going to be a few margin of victory outcome possibilities 0,1,2,3,4,5,6 etc you could hard code the multipliers you wanted to use for each one using a slight multiplier when the underdog achieves this margin of victory and slight discount when the favorite does.