Chess

How To Calculate the Elo-Rating (including Examples)

In sports, most notably in chess, baseball and basketball, the Elo-rating system is used to rank players. The rating is also helpful in deducing win probabilities (see my blog post Elo-Rating and Win Probability for more details on that). Suppose two players or teams with the current ratings r(1) and r(2) compete in a match. What will be their updated rating r'(1) and r'(2) after said match? Let’s do this step by step, first in general terms and then in a numerical example.

The first step is to compute the transformed rating for each player or team:

R(1) = 10r(1)/400

R(2) = 10r(2)/400

This is just to simplify the further computations. In the second step we calculate the expected score for each player:

E(1) = R(1) / (R(1) + R(2))

E(2) = R(2) / (R(1) + R(2))

Now we wait for the match to finish and set the actual score in the third step:

S(1) = 1 if player 1 wins / 0.5 if draw / 0 if player 2 wins

S(2) = 0 if player 1 wins / 0.5 if draw / 1 if player 2 wins

Now we can put it all together and in a fourth step find out the updated Elo-rating for each player:

r'(1) = r(1) + K * (S(1) – E(1))

r'(2) = r(2) + K * (S(2) – E(2))

What about the K that suddenly popped up? This is called the K-factor and basically a measure of how strong a match will impact the players’ ratings. If you set K too low the ratings will hardly be impacted by the matches and very stable ratings (too stable) will occur. On the other hand, if you set it too high, the ratings will fluctuate wildly according to the current performance. Different organizations use different K-factors, there’s no universally accepted value. In chess the ICC uses a value of K = 32. Other approaches can be found here.

—————————————–

Now let’s do an example. We’ll adopt the value K = 32. Two chess players rated r(1) = 2400 and r(2) = 2000 (so player 2 is the underdog) compete in a single match. What will be the resulting rating if player 1 wins as expected? Let’s see. Here are the transformed ratings:

R(1) = 102400/400 = 1.000.000

R(2) = 102000/400 = 100.000

Onto the expected score for each player:

E(1) = 1.000.000 / (1.000.000 + 100.000) = 0.91

E(2) = 100.000 / (1.000.000 + 100.000) = 0.09

This is the actual score if player 1 wins:

S(1) = 1

S(2) = 0

Now we find out the updated Elo-rating:

r'(1) = 2400 + 32 * (1 – 0.91) = 2403

r'(2) = 2000 + 32 * (0 – 0.09) = 1997

Wow, that’s boring, the rating hardly changed. But this makes sense. By player 1 winning, both players performed according to their ratings. So no need for any significant changes.

—————————————–

What if player 2 won instead? Well, we don’t need to recalculate the transformed ratings and expected scores, these remain the same. However, this is now the actual score for the match:

S(1) = 0

S(2) = 1

Now onto the updated Elo-rating:

r'(1) = 2400 + 32 * (0 – 0.91) = 2371

r'(2) = 2000 + 32 * (1 – 0.09) = 2029

This time the rating changed much more strongly.

—————————————–

Sports: Elo-Rating and Win Probability / Carlsen vs. Anand

The Elo rating system is a commonly applied tool to judge the performance of players in sports. Most associate it with chess, but it is in use in other sports as well, for example American Major League Baseball and Basketball. A nice thing about the rating system is that you can easily estimate the win probabilities given the difference in Elo rating of the opponents.

ELO

So if the difference is zero (opponents of equal strength), the win probability is obviously 0.5 = 50 %. If one player has a 200 Elo points advantage, his win probability is about 76 %. In case you prefer a table over a graph, you can find the corresponding values here. And for those interested in formulas, I found that the Boltzmann function models the values extremely well (r stands for Elo rating, p for the win probability):

p = 1 – 1 / ( 1 + exp ( 0.00583 * r  – 0.0505) )

For example, plugging in r = 200 leads to p = 0.75 = 75 %, close enough. For a very rough linear approximation this formula will do:

p = 0.5 + 0.001 * r

By the way, what sports event is happening right now in India? Right, the World Chess Championship. At the moment Anand and Carlsen are locked in a bitter battle to death (ok, a little too dramatic, but still very interesting) and I just finished watching their brilliant third match, which was yet another draw. Here’s the current top ten for chess:

Rank Name Title Country Rating Games B-Year
 1  Carlsen, Magnus  g  NOR  2870  0  1990
 2  Aronian, Levon  g  ARM  2801  6  1982
 3  Kramnik, Vladimir  g  RUS  2793  9  1975
 4  Nakamura, Hikaru  g  USA  2786  17  1987
 5  Grischuk, Alexander  g  RUS  2785  17  1983
 6  Caruana, Fabiano  g  ITA  2782  25  1992
 7  Gelfand, Boris  g  ISR  2777  11  1968
 8  Anand, Viswanathan  g  IND  2775  0  1969
 9  Topalov, Veselin  g  BUL  2774  6  1975
 10  Mamedyarov, Shakhriyar  g  AZE  2757  11  1985

As you can see, Carlsen is currently the leading chess player with an Elo rating of 2870 and Anand is on rank eight with a rating of 2775. The difference is 2870 – 2775 = 95 points, which translates into a win probability of about 63 % for Carlsen and 37 % for Anand. If you have to bet, bet on Carlsen, but it’s going to be a close one. Both have shown a great performance so far, though it seemed that in the third match Anand did miss some opportunities. I’m looking forward to tomorrow’s match.