World Ranking Algorithm
This page explains the algorithm used for the World Ranking.
The algorithm is completely homemade. Here is how it works.
Vocabulary first: If A has beaten B 50-23, then they played one match, of 73 points.
Splitting matches
First, the algorithm splits the matches of each player: If a player has played more than 3000 points, it will split their matches into parts of around 2000 points.
Let's say a player played 6000 points, they'll be split into three players. These three players are just considerated by the program as different players.
In the end, only the most recent of these three players will be shown in the ranking. So what you see in the ranking is only the most recent "level" of the player.
In the next sections, I'll consider each of these three parts as "players".
Getting the Med ratings
Med rating is the average level of the player.
Every player gets a rating of 1.0.
The algorithm goes through all the matches a total of 50.000 times, and will calculate how different the score was from the expected one.
A player who has played better than expected will move up in the ranking, and their opponent will move down by the same amount.
This amount is greater for recent matches, and matches where the players' levels are near from each other.
More detailed version:
Let's say player A's rating is 0.8, and B is 1.6, and the score of the match is A 15 - 20 B.
Let's call delta the "rating" that A will win with this match
delta = (sqrt(B/A) * score A - sqrt(A/B) * score B) * coefficient
B/A and A/B are the rating difference between A and B. Here, B/A = 2, A/B = 0.5.
delta = (sqrt(2) * 15 - sqrt(1/2) * 20) * coefficient = 7.07 * coefficient
coefficient is "how important is the match".
Its formula is:
coefficient = time coefficient * level coefficient / 1000
time coefficient = 1/((time in years)^2+1)
A recent match will have a time coefficient close to 1, and an old one will have it close to 0.
level coefficient = minimum between A/B and B/A
A match between two players of near levels will have a level coefficient close to 1, and far levels will have it close to 0.
For our example, let's say the match was 1 year ago, time coefficient is 1/(1^2+1) = 0.5, and level coefficient is A/B = 0.5, so delta = 7.07 * 1/2 * 1/2 / 1000 = 0.001768.
If delta > 0, the rating of A is multiplied by (1 + delta), and the rating of B is divided by (1 + delta)
If delta <= 0, the rating of A is divided by (1 - delta), and the rating of B is multiplied by (1 - delta)
For our example, the new rating of A = 0.8 * (1 + 0.001768) = 0.80141, and the new rating of B = 1.6 / (1 + 0.001768) = 1.5971
The algorithm does this for every match from the oldest to the newest, 50 000 times.
The Med ratings will slowly move to the average level of the player during their matches.
Once it is done, the Med ratings won't be changed anymore.
Min and Max Ratings
Min rating = Med rating / (1+C)
Max rating = Med rating * (1+C)
Min rating is the minimum level a player is expected to have. Max rating is the maximum one.
C is the twisted certainty value. It's how "certain" you are that the player has the right rating. Lower means more certain.
C = 0.6/(c^1.2)
c is the certainty before being twisted, it's equal to the total of all matchups strengths of a player. It's usually between 1 and 15. Higher means more certain.
The matchup strengths of a player are how much the algorithm know the matchup result between this player and his opponents.
A matchup strength is always between 0 and 1.
0 means they haven't played, 1 means the algorithm knows this matchup enough.
The matchup strength between A and B is the minimum between sqrt(total)/10 and 1.
total is the total of all the matches strengths between A and B.
A match strength is equal to coefficient * points played.
coefficient is the same as above, time coefficient * level coefficient.
For example, let's say A has only played one match against B and C, and the coefficient is 0.4 against B with 25 points played, and 0.7 against C with 43 points played.
The match strength is 10 for A vs B, and 30.1 for A vs C.
The matchup strength is sqrt(10)/10 = 0.316 for A vs B, and sqrt(30.1)/10 = 0.549 for A vs C.
c = 0.316 + 0.549 = 0.865.
C is 0.6/(0.865^1.2) = 0.714
Min rating = 2.0 / (1 + 0.714) = 1.167
Max rating = 2.0 * (1 + 0.714) = 3.428
Display
Min rating is used for the ranking, because a player with only a few points played, like A in our example, may have been lucky during their matches. They will have to play more to get a better rank.
If you find any mistake in the countries, or any name that appears twice, please let me know, @HikuPuyo on twitter.