Pokémon GO Battle League Rating and Ranking System
This page describes the system for matching players for player-vs-player (PvP) battles in Pokémon GO, the numeric ranking score ("ELO rating") used for that purpose, and formulas for calculating your current score for those situations in which the game doesn't show you.
Pokémon GO has several types of Battles that you can elect to participate in, and several of these are available from the BATTLE menu, accessed by hitting the "Poké Ball" icon in the bottom-center of the screen, and choosing BATTLE about halfway up on the right edge of your screen; then under GO BATTLE LEAGUE choose to battle for "Basic Rewards" or "Premium Rewards".
Below those two choices is an area reporting your wins and losses for the CURRENT SEASON and LAST SEASON. The statistics shown are: number of battles won, number of battles lost, longest "streak" of consecutive wins, and stardust earned.
Also, when you have reached level 20 (at least) the game will show an icon representing your current level along with a number which is an Elo rating.
As I write this, the current battle season has been going on for only 7 days. So far this season I have 54 wins and 131 battles. For most players this is not enough time to have reached level 20, so there is no Elo rating visible.
In this Reddit post, Redditor @KetoPinto suggested keeping a spreadsheet to estimate the current Elo rating. Starting from 2000, and giving oneself 70 points for each win, minus 35 points for every loss, one maintains a running total. For example after completing the second "set" of 5 and winning 4 out of 5 battles they gave themselves +40 points.
The method suggested in the Reddit post is roughly equivalent to the formula: 2000 + 28×wins - 14×battles. So for example I would have 2000+28×54-14×131 = 1678 rating.
Better yet, the game also shows battles and wins for the previous season. Mine are: 351 wins and 748 battles. I also know that I ended with a ranking of about 750. In that Reddit thread it was pointed out that (thanks to prior research) it was determined in past seasons that the game gives everyone an initial rating of 1600. Therefore the calculation for my last season rating would be: 1600 + 28×351 - 14×748 = 956 rating.
Since I actually ended up with a rating of about 750, I can calibrate the coefficients in the formula to make the formula's answer agree with the known end of season rating. That happens if I change the 28 to 37 and change the 14 to 37/2=18.5:
1600 + 37×351 - 18.5×748 = 749
There are two exceptions to the formula, encountered by players who spend time at the very top or bottom of the league rankings.
Spending time at the bottom is called "tanking". It is an easy way to get a modest amount of rewards without spending lots of time and money in the game getting the XL candy to level up the premium Pokémon attackers for the league's current "meta game".
A player who "tanks" a lot will spend time close to 300, and the game never ranks anyone below a 300 rating. That means the game cannot assign a match against anyone lower than 300 — and that means that the player's rating will not sink as quickly as it would if below-300 matchups were possible. As stated in the Wikipedia page:
If the higher-rated player wins, then only a few rating points will be taken from the lower-rated player. However, if the lower-rated player scores an upset win, many rating points will be transferred.
This means that a player whose rating is "pegged" at the 300 minimum can only ever get matched against same- or higher-ranked opponents, which in turn means that their upset wins will award proportionately more points than they lose from defeats. Also, no matter how many times they lose they cannot sink below 300.
For both of those reasons, for someone who is "tanking" the formula above predicts an answer that is lower than the actual rating given by the game.
Conversely, anyone near the very top of the rankings (Expert and Legend ranks in Pokémon GO) will have trouble finding matches with trainers that are higher than them — and this will result in the formula giving an answer that is higher than the player's actual rating in the game. This is easy to verify because the game actually shows the current rating for players who are in the Ace or higher rank, along with their season-ending rating for the past season.
This page was written in the "embarrassingly readable" markup language RHTF, and was last updated on 2023 Dec 07. s.27