Rating System Math

The KGS rank system is based on the assumption that there is some value k such that if A plays B in an even game, then the probability that A wins is given by:

PA wins = 1 / (1 + ek(RankB - RankA))

and the probability that A loses is given by

PA loses = 1 - PA wins

Further, it is assumed that any handicap stones, komi other than even, etc. can be accounted for by subtracting 1 from the rank of the white player for every handicap stone and adding some amount for every point of komi away from even.

There are a bunch of problems with this. The strengths of the players involved probably affect k, and adding more than a few stones of handicap is probably not a strictly linear relationship. Some of these are taken into account by the rank system (for example, k will change based on the strength of the players), but others aren't.

Once we have this relationship, we can take any player A, and find the probability (prob) that the games they played would have the outcome that they actually did have. This is done by multiplying together the win probability (PA wins) for every game they won and the lose probability (PA loses) for every game they lost. Now, we can treat RankA as a variable, come up with a graph of "probability of all game results" (prob) vs. RankA, and solve to find the rank for A that maximizes prob. This will be the rank assigned to A.

We repeat this process for every player on the server; then, when we are done, we do it again. This iteration will gradually refine the ranks for all players on KGS. The problem is that new games and players are constantly being added to the set on KGS, so we never really come up with a perfect, final rank for any player; instead, KGS iterates over all players indefinitely, adding new games and players as necessary at each iteration.

This system is further refined by assigning each game a weight based on how old the game is. Each player also gets a confidence based on the double derivative of the probability graph (d2prob / dRank2) at the maximum point. The weight of each game is multiplied by the confidence we have in the opponent's rank.

One last note - the "?" that is put at the end of some player's ranks. This means that the player's rank is still in doubt. The server assigns a player a "?" if any of these are the case:

The player has no wins.

The player has no losses.

The player's confidence falls below a certain threshold.

The first two are obvious - if a player has no wins, then their maximally probable rank is -∞, and if they have no losses then their maximally probable rank becomes ∞. Since the player can't be given a computed rank, the server just assign them a rank based on their strongest win or weakest loss. In the third case, the player actually has a rank, but a "?" is added to the end to indicate that the server can't be sure of their rank. For example, if the server only knows that a player has beaten a 9k and lost to a 1k, then the server will calculate a rank of 5k for the player. But this will get a "?" because it the player's rank could easily be anywhere from 8k down to 2k. Exactly how many games it takes for the player to lose the "?" varies, but it is usually 2 or 3 wins and losses in close games (that is, games with handicap and komi set to give both players close strengths).