Pokémon Go Stat Mechanics

Experienced Pokémon players may be left confused by Pokémon Go's stat system. Instead of the familiar levels and six stats - HP, Attack, Defense, Special Attack, Special Defense and Speed - Pokémon in Go only appear to have an HP stat and a single Combat Power value (CP), which varies by species but can also be boosted for individual Pokémon. How exactly does this work, and what's really going on behind the scenes?

The Relevant Variables

Pokémon Go's stat system is actually more similar to the main series than it looks. Pokémon do have a level, as well as Attack and Defense stats. The CP value is not a fundamental quantity, but rather a measure of overall strength calculated from the true underlying stat values in order to make the game simpler and more accessible: it provides one simple number to regard as a rough estimate of how strong the Pokémon is instead of having to weigh many numbers against one another.


Oddly, in Pokémon Go, Pokémon levels can be either whole or half numbers. Your Pokémon's level is indicated by the white arc above it on its status screen. The bottom left corner of the arc stands for level 1, while the bottom right corner stands for your trainer level + 1.5; the possible positions are not linearly distributed, though, so raising a level 1 Pokémon to level 2 results in a more significant shift on the arc than raising a level 20 Pokémon to level 21. Powering up a Pokémon will raise its level by a half; there is no other way to increase the level of a Pokémon. Evolving a Pokémon will only change its species to one with higher base stats, while keeping its level the same.

Pokémon can be caught in the wild at any level up to and including your trainer level, with a maximum of 30; Pokémon hatched from eggs will always turn out at your trainer level at the time of obtaining the egg, up to a maximum of 20.

Base Stats

Like in the main series games, each species of Pokémon has certain base stats that determine the general range of stats they can have at a given level. Pokémon Go ditches the physical/special distinction and the Speed stat in favor of a single Attack stat, a single Defense stat, and the familiar visible HP stat. Pokémon Go base stats are simply values set in the game data, but these values are actually calculated from the Pokémon's main series sixth-generation base stats, as follows, where Stathigher denotes the higher out of the physical and special main series base stat and Statlower denotes the lower, and Statmain denotes an individual main series base stat:

`"Attack" = round(round(2 * 7/8 * "Atk"_"higher" + 1/8 * "Atk"_"lower") * (1 + ("Speed"_"main" - 75) / 500))`

`"Defense" = round(round(2 * 7/8 * "Def"_"higher" + 1/8 * "Def"_"lower") * (1 + ("Speed"_"main" - 75) / 500))`

`"HP" = 2 * "HP"_"main"`

You'll notice the main series Speed base stat is part of the formulas for Attack and Defense; this might seem odd, but it's necessary to ensure speedy Pokémon get a fair deal in a game that has no Speed stat, since otherwise all the stat points they wasted on Speed in the main series would be moot in Go. The Speed factor essentially scales the stat according to the main series base Speed, boosting or reducing it by 1% for every five points of Speed it has above or below 75.

There is one exception to these formulas: Lapras's base Attack and Defense are still in accordance with the old conversion formulas, used prior to a November 2016 update. It was likely kept as is when all other base stats were changed because of an ongoing Lapras event in Japan; the change would have significantly lowered Lapras's stats and diminished the value of the event. The old formulas looked like this:

`"Attack" = 2 * round(sqrt("Atk"_"main" * "SpAtk"_"main") + sqrt("Speed"_"main"))`

`"Defense" = 2 * round(sqrt("Def"_"main" * "SpDef"_"main") + sqrt("Speed"_"main"))`

The change was made because the old formulas were crucially flawed and affected the game balance in a counterintuitive way: the way they were calculated gave greater weight to the lower of the physical and special stats, punishing highly specialized Pokémon, and by using the square root of the Speed, speedy Pokémon got less bang for their buck than slower ones. Pokémon like Alakazam, who in the main series excel in Speed and one attacking stat while never using the other, ended up with subpar Attack in Go and nothing to make up for their weak defenses. With the new formula, the better stats are given greater weight, and they're scaled according to Speed in a linear fashion, giving speedy Pokémon a more appropriate boost.


Also like in the main series, Pokémon in Go have individual values, or IVs, that fuel individual stat differences among Pokémon of the same species. Each Pokémon has one IV for each of its three stats, and each IV is a number ranging from 0 to 15, with a higher IV yielding a higher value for the corresponding stat.

IVs are set at random to any number between 0 and 15 when you catch a Pokémon in the wild, but when one hatches from an egg, they'll be set to a number between 10 and 15, ensuring that Pokémon hatched from eggs have significantly better IVs on average than wild Pokémon. IVs cannot be changed; your Pokémon is stuck with the IVs it's had from the start forever, even if you power up or evolve it.

There are various fanmade IV calculators that'll try to estimate your exact IVs (here's one), but the Appraisal feature also allows you to get a rough idea of your Pokémon's IVs in-game. If you open the bottom-right menu on the Pokémon screen, selecting Appraise will call up the leader of your team and they will assess the strengths of your Pokémon. They will make three relevant statements: first, they will give the Pokémon an overall rating based on the sum of its three IVs (which can range from 0-45); then they will name the stat(s) with the highest IV for this Pokémon; and finally, they will assess how high that highest IV is. (After this they might also comment on the size of the Pokémon, but this is unrelated to IVs and whether it has any gameplay function is unknown.) This can be a little confusing, since the leaders will sometimes say that a Pokémon is subpar in battle only to follow it up with saying its stats are incredible; that simply means that the IV sum is lackluster but the Pokémon does have one good IV that the second sentence refers to. The messages, and their meanings, are as follows:

Overall rating
Candela (Team Valor) Blanche (Team Mystic) Spark (Team Instinct) IV sum
Overall, your Pokémon simply amazes me. It can accomplish anything! Overall, your Pokémon is a wonder! What a breathtaking Pokémon! Overall, your Pokémon looks like it can really battle with the best of them! 37+
Overall, your Pokémon is a strong Pokémon. You should be proud! Overall, your Pokémon has certainly caught my attention. Overall, your Pokémon is really strong! 30-36
Overall, your Pokémon is a decent Pokémon. Overall, your Pokémon is above average. Overall, your Pokémon is pretty decent! 23-29
Overall, your Pokémon may not be great in battle, but I still like it! Overall, your Pokémon is not likely to make much headway in battle. Overall, your Pokémon has room for improvement as far as battling goes. 0-22
Highest IV rating
Candela (Team Valor) Blanche (Team Mystic) Spark (Team Instinct) Highest IV
I'm blown away by its stats. WOW! Its stats exceed my calculations. It's incredible! Its stats are the best I've ever seen! No doubt about it! 15
It's got excellent stats! How exciting! I am certainly impressed by its stats, I must say. Its stats are really strong! Impressive. 13-14
Its stats indicate that in battle, it'll get the job done. Its stats are noticeably trending to the positive. It's definitely got some good stats. Definitely! 8-12
Its stats don't point to greatness in battle. Its stats are not out of the norm, in my estimation. Its stats are all right, but kinda basic, as far as I can see. 0-7

Stat Calculation

The actual value of each of your Pokémon's stats is given by the formula (base stat + IV) * level multiplier; the Attack and Defense stats are not rounded at all and can have fractional values since they are hidden from the player, but the HP stat is rounded down to the nearest whole number for display and in battle. The level multiplier (referred to as "CP multiplier" on some other sites; I think that's a misleading and confusing term, so I will be using "level multiplier") is a fractional multiplier based on the Pokémon's level; the exact values are programmed as a lookup table that has been extracted from the game data, but the multiplier is close to being 0.095 * sqrt(level * 2 - 1) for level 1-30, while for the higher levels (31-40) it starts to rise more slowly, with the formula turning into something closer to 0.05 * sqrt(level * 2 - 1) + 0.35. Overall, it ranges from 0.094 (level 1) to 0.7903 (level 40), with the difference between consecutive levels being greater for lower levels. This is the level multiplier table:

Level Multiplier
1 0.094
1.5 0.135137432
2 0.16639787
2.5 0.192650919
3 0.21573247
3.5 0.236572661
4 0.25572005
4.5 0.273530381
5 0.29024988
5.5 0.306057377
6 0.3210876
6.5 0.335445036
7 0.34921268
7.5 0.362457751
8 0.37523559
8.5 0.387592406
9 0.39956728
9.5 0.411193551
10 0.42250001
10.5 0.432926419
11 0.44310755
11.5 0.4530599578
12 0.46279839
12.5 0.472336083
13 0.48168495
13.5 0.4908558
14 0.49985844
14.5 0.508701765
15 0.51739395
15.5 0.525942511
16 0.53435433
16.5 0.542635767
17 0.55079269
17.5 0.558830576
18 0.56675452
18.5 0.574569153
19 0.58227891
19.5 0.589887917
20 0.59740001
20.5 0.604818814
21 0.61215729
21.5 0.619399365
22 0.62656713
22.5 0.633644533
23 0.64065295
23.5 0.647576426
24 0.65443563
24.5 0.661214806
25 0.667934
25.5 0.674577537
26 0.68116492
26.5 0.687680648
27 0.69414365
27.5 0.700538673
28 0.70688421
28.5 0.713164996
29 0.71939909
29.5 0.725571552
30 0.7317
30.5 0.734741009
31 0.73776948
31.5 0.740785574
32 0.74378943
32.5 0.746781211
33 0.74976104
33.5 0.752729087
34 0.75568551
34.5 0.758630378
35 0.76156384
35.5 0.764486065
36 0.76739717
36.5 0.770297266
37 0.7731865
37.5 0.776064962
38 0.77893275
38.5 0.781790055
39 0.78463697
39.5 0.787473578
40 0.79030001

So What Is CP Anyway?

CP is simply meant to be an overall measure of the Pokémon's battle strength. It is calculated from the Pokémon's unrounded Attack, Defense and HP stats using the following formula:

`CP = max(|__("Attack" * sqrt("Defense") * sqrt("HP")) / 10__|, 10)`

This means that the maximum possible CP for a given Pokémon species at a given level can be calculated as follows, after plugging the stat formula in for the stat values and doing a bit of rearranging:

`CP_(max) = max(|__(("Atk"_"base" + 15) * sqrt("Def"_"base" + 15) * sqrt("HP"_"base" + 15) * "level multiplier"^2) / 10__|, 10)`

CP variation by IV is proportionally greater for Pokémon with lower base stats, since then the difference between an IV of 0 and an IV of 15 is proportionally greater. For example, a level 20 Caterpie (base stats 62 Attack, 66 Defense and 90 HP) can range from 170 CP to 253 CP, the latter being almost 49% higher, while a level 20 Butterfree (base stats 144 Attack, 144 Defense and 120 HP) can range from 675 CP to 831 CP, only a 23% increase. The Attack IV has the biggest effect on the CP on average, but again, that also depends on the base stat.

CP itself is not actually used in any calculations during battle; only the actual underlying Attack, Defense and HP stats are. CP determines the order of Pokémon in gyms and how much experience and prestige you gain for training at a friendly gym, but that's about it. Don't focus too much on CP - it may give a rough idea of a Pokémon's strength, but it arguably overweighs Attack compared to Defense and HP (Niantic likely made it this way in order to give equal weight to the single offensive stat and the two defensive stats, but this is arguably incorrect), and there's no guarantee that a Pokémon with a higher CP is necessarily better than one with a lower CP.

Page last modified November 22 2016 at 21:44 GMT