Thursday, May 12, 2005

Adapting the Elo Rating System for Poker

Chess players know what the Elo rating system is. Every player gets a rating a from 0 to 3000. The higher your rating, the better you are. I recently was tasked with coming up with a rating system for poker players that play tournaments. I have previously played around with rolling my own system of statistics to determine the ability of a poker player, but I'm no math genius so I looked for something prebuilt.

I decided I'd modify the Elo rating system used in chess for poker. It has to be modified because it was originally designed for games where there are only two players. Ratings for players are calculated based on who won the game and what the respective ratings of the players were before the game completed. The problem is that poker tournaments have many players, not just two, so it had to be modifed.

The Elo rating system tries to predict the probability that a given player will beat another player based on their ratings. It then uses the new data, i.e. the result of the game, to adjust its predictions for the next game. If a player wins, he gets a score of 1. If he loses, he gets a score of 0. And if both players draw, they both get a score of 0.5.

In poker tournaments, you want capture not only who won the game, but who did well in the tournament. Obviously, second place, third place, etc. deserve some recognition. You can't just recognize first place as the only "winner." So, instead of a score of 1 for the winner, and 0 for all the losers, a player attains a score equal to that player's place scaled by the size of the tournament he played in. The equation looks something like:

S = Score
P = Place of a specific player
N = Number of players

S = (P-1)/(N-1)

Using this formula, first place gets a 1, last place gets a 0, and all the players in between get something between 0 and 1.

The Elo system also uses an expression to predict the score of a given player based on his opponent. The original system only takes into account one other player. The new system has to include the ratings of all of the other players in the tournament. Traditionally, the Elo system uses an expression to predict the score that looks something like:

Ea = Estimated score for Player A
Eb = Estimated score for Player B
Ra = Rating of Player A
Rb = Rating of Player B

Ea = 1 / (1 + 10^((Rb-Ra)/400))
Eb = 1 / (1 + 10^((Ra-Rb)/400))
We have more than one opposing player, so I average the ratings of all opposing players. This is the second modification I made. By the way, the 400 is used to fit the ratings along a normal distribution curve desired for chess ratings.

I've tested this model with good results. I plan on implementing it for a large group of poker players and hope that others might test it and try it out on their own.

Update: I've revised my ideas on the modification to the system here.