Interested in joining the Silph Research group? Learn More »

Silph Study: #021

Published:
01.09.2019

Measuring Up Pokémon

As we approach Pokémon GO’s third anniversary, many travelers are still chasing their Youngster and Fisherman medals. These objectives focus on the height and weight of wild Pokémon – a part of each Pokémon’s unique identity that has no other known effect in-game thus far.

While pondering these Pokémon attributes many months ago, the Silph Research Group set out to uncover how Pokémon height and weight are determined.

After weighing and measuring nearly 50,000 Pokémon in a large-scale study, we discovered workings behind the height and weight system. This simple but elegant model explains:

  • How height and weight are generated
  • How the two values are interlinked
  • How they persist across evolutions
  • The mechanics behind Pokémon size appraisals
  • The odds of receiving a tiny Rattata or big Magikarp

Due to the contemporary launch of several exciting new features (like PvP, the weather system, Community Days, and a full year of events), these findings were never published. Fortunately, this discovery will finally see the light of day! We’re proud to be able to say that the efforts of dedicated Silph Researchers both new and old will result in another entry into the ever-growing canon of solved mysteries of Pokémon GO. Without any further delay – let’s dive in!

The Data

The data for this study was gathered in four segments:

# Amount Type Purpose Values
1 >2,000 Magikarp Explore height and weight in relation to other Pokémon attributes Height and weight
2 27,000 Common Pokémon Speed up data gathering
3 10,000 Species with mean height ≥ 1.5 m Investigate how rounding affects distribution
4 8,500 Special cases Narrow down exact appraisal boundaries Full appraisal

As the third and fourth segment only clarified results from the earlier data sets, an exception was made to allow historical data from January 2017 forward. Data from 2016 was excluded to ensure the results weren’t biased by the early evolution bug¹.

Generating Height and Weight

With this dataset, Silph Scientists were able to reverse engineer the method used to generate height and weight. Starting with the simplest possible distribution (uniform between two values) the data was checked to see if it fit a number of possible distributions. Each model was rejected if it didn’t fit the data. This process was repeated several times until the hidden methodology used to generate a Pokémon’s height and weight was uncovered.

Height

A few simple steps determine the height of a Pokémon.

  1. First, a random number is drawn from a normal distribution² with a mean of 1 and a standard deviation of 1/8. We call this random number random height, and it is independent of the Pokémon species in question.
  2. Next, random height is multiplied by the height value listed in the Pokémon’s Pokédex entry (or more specifically the game master file, which contains full, unrounded values) in order to get the final height of the Pokémon. Simple as that!
Weight

Determining the weight variable involves a couple extra steps. The first step in generating weight is identical to generating height. A random number is drawn from a normal distribution with a mean of 1 and a standard deviation of 1/8. We call this number random weight. Next, random weight is multiplied by random height squared to get an intermediate variable. Let’s call this variable intermediate weight. Mathematically this looks like:

intermediate weight = random weight * random height2

Finally, intermediate weight is multiplied by the weight value listed in the Pokédex (or game master file) to get the final weight of the Pokémon.

Implications

Generating the weight in this way has a couple of different effects. First, the weight of a Pokémon is more variable than its height. In fact, it has a standard deviation nearly 2.8 times that of height. This is why more Pokémon have an XS or XL displayed on their weight in the Pokémon appraisal screen than height. Secondly, because the random height variable is used to calculate the final weight of the Pokémon, the height and weight of a Pokémon are well-correlated. You wouldn’t want a Snorlax that is in the top 1% of height, but the bottom 1% of weight! This algorithm keeps that from happening, but also provides some nice variability.

Here’s a plot to help visualize this relationship. The height and weight of each Pokémon have been normalized by its mean species height and weight in order to properly compare them. This is essentially a plot of the random height and intermediate weight variables.

Normalized height and weight distribution for all Pokémon species

Evolutions and Rounding

Now that we’ve laid out a simple framework for generating height and weight, predicting the new values after evolving your Pokémon is easy. Simply divide the height and weight values shown in the Pokémon appraisal screen by the mean values shown in the Pokédex entry for that species, and then multiply by the new mean for the evolved form. We can do this because the random height and random weight values don’t change when a Pokémon is evolved.

Now, if you were to actually try this on a Pokémon, you might find that the values don’t match perfectly. This is because of rounding errors. We were able to show this thanks to a very lucky triplet of identical Pidgeys (nicknamed Harpo, Groucho, and Chico), provided to us by Silph Scientist Constituent (DonLothario). Here are their height and weight values before and after evolution.

Name Pidgey Pigeotto Pidgeot
Harpo 0.29 m / 2 kg 1.06 m / 33.39 kg 1.44 m / 43.97 kg
Groucho 0.29 m / 2 kg 1.06 m / 33.36 kg 1.45 m / 43.93 kg
Chico 0.29 m / 2 kg 1.05 m / 33.4 kg 1.43 m / 43.97 kg


For this scenario to be true, each of the Pidgey’s height values must be saved to a higher degree of accuracy than shown on the appraisal screen. The stored weight must be between 1.995 kg and 2.005 kg while the height is between 0.285 m and 0.295 m.

Appraisals

Knowing that displayed values are rounded is helpful for the last part of the research that investigated the boundaries of the appraisal system. There are three independent appraisals which are either displayed on screen or can be checked via the appraisal function. They are:

  1. The XS and XL displayed next to a Pokémon’s height.
  2. The XS and XL displayed next to a Pokémon’s weight.
  3. The size appraisal given by your team leader.

The XL and XS displayed next to a Pokémon’s height or weight on its information screen are determined by the deviation from the mean height or weight of that species. Anything more than 2 standard deviations above the mean height or weight is XL, and anything less than 2 standard deviations below the mean height or weight is XS.

However, the size appraisal from your team leader is different from the XS and XL tags. It can be predicted by adding together the random height and intermediate weight variables discussed previously. We can then compare this value to the boundaries shown in the table below.

Possible appraisals Sum of random height and intermediate weight
Tinier or the tiniest or so tiny Less than 1.5
Below average in size or a little small or rather cute Between 1.5 and 1.75
Above average in size or BIG one or rather sizeable Between 2.25 and 2.5
 Colossal or just HUGE or gigantic Greater than 2.5


All of this is best illustrated in a graph again.

Appraisal boundaries added to the distribution of height and weight

The XS and XL markings shown on a Pokémon’s information screen are represented as horizontal or vertical lines in the plot on the left. Interestingly, because of rounding, there are several height and weight values of specific Pokémon species that can display the exact same height/weight on their information page, but differ in their XS or XL symbol from one another. The size appraisals from each of the team leaders are diagonal lines shown in the right plot.

Overlaying these boundaries, we can see that several combinations are possible. For example, a Pokémon could be colossal but not XL. You can also clearly see that the XL and XS are far more common for weight than height.

All size appraisals in Pokémon Go overlaid on one graph

Fisherman and Youngster Medals

Finally, we would be remiss if we left out the Fisherman and Youngster medal boundaries from a discussion on height and weight! These boundaries are found at about 2.5 standard deviations away from the mean. This equates to a “tiny Rattata” being any that are lighter than 2.41 kg and a “large Magikarp” being any that are heavier than 13.13 kg. These values have been reported by other travelers on The Silph Road, and our data confirms them. Simulating 10,000,000 height and weight values in R based on the algorithm described above, we were able to determine that the probability for getting a tiny Rattata³ is 11.7% and for large Magikarp it’s 14.6%. These boundaries are shown in the figure below:

Parting Words

We hope that you’ve enjoyed this peek behind the curtain of the height and weight system of Pokémon GO! As of now, height and weight don’t affect your Pokémon’s battle readiness or movesets, but simply provide a more realistic backdrop for the game. Hopefully, this article helps you to determine if you’ve caught yourself a once-in-a-lifetime Pokémon. We’ll see you on the road, travelers!

Notable Researchers

The Silph Research Group would like to give a special shoutout to longtime Scientist, DrThod who single-handedly cracked the formula behind Height and Weight. Without his hard work, all these discoveries would not have been possible.

Footnotes

¹ In the early days of Pokémon GO it seemed that nearly all Pokémon that were evolved turned out to be XS in weight. This was a bug in the calculation of new weight and height after the evolution. It seems that Niantic used the mean height of the evolved species and the mean weight of the unevolved form when calculating the new evolved values. All early Eeveelutions, therefore, appear to be XS with values outside our plot while some Pokémon like Venomoth turned out XL as their pre-evolution species was heavier.

² Based on our data, a normal distribution was the best fitting and most parsimonious distribution based on the Akaike Information Criterion. However, there was an interesting case that surfaced during the July Community Day where a traveler managed to catch a Squirtle weighing 0.01kg. Using simulations in R, Silph Scientists tried to reproduce the aforementioned Squirtle using the normal distribution and the transformation outlined above but were unsuccessful in over 500,000,000 trials. This may indicate that the distribution for weight has slightly heavier tails than a standard normal distribution (e.g. t-distribution), but the current dataset could not validate this hypothesis.

³ Alolan Rattata has a slightly higher average weight, but the required weight of 2.41 remains constant for either form. This means that the Alolan form is less likely than its counterpart to be “tiny.”