# Base Stats Ratings Version 2.0

#### X-Act

##### np: Biffy Clyro - Shock Shock
It's been quite long since I posted my Base Stats Ratings thread that would change the way we think about Base Stats. I thought to update the formulae a bit to reflect the new Pokemon being added in Platinum, and also, while I'm here, to make the ratings a bit better.

Firstly, a new Speed Factor chart:

Code:
``````Base Speed   Speed Factor
-------------------------
1 to 5         0
6 to 10         2
11 to 15         4
16 to 20        11
21 to 23        19
24 to 25        22
26 to 28        30
29 to 30        31
31           54
32           56
33           58
34           60
35           61
36           79
37 to 39        84
40           85
41          111
42          113
43          115
44 to 45       118
46          139
47          140
48          141
49 to 50       144
51          179
52          181
53 to 55       183
56          203
57 to 58       206
59 to 60       210
61          239
62 to 63       241
64 to 65       242
66          268
67          270
68          273
69 to 70       275
71          305
72          308
73 to 74       309
75          310
76          318
77          320
78          321
79 to 80       323
81          348
82          351
83          352
84          354
85          355
86          381
87          386
88 to 90       387
91          411
92 to 93       416
94 to 95       417
96 to 97       438
98 to 100       440
101 to 102       463
103 to 105       464
106 to 108       471
109 to 110       472
111 to 112       480
113 to 115       481
116 to 120       488
121 to 125       492
126 to 127       495
128 to 130       496
131 to 140       500
141 to 150       501
151 to 160       503
161 to 180       504
181 to 255       505``````
This is simply the amount of Pokemon you'll outspeed with your Base Speed.

We now convert each Base Stat as follows:

Code:
``````Statistical HP = Base HP * 2 + 141
Statistical Atk = Base Atk * 2 + 36
Statistical Def = Base Def * 2 + 36
Statistical SpA = Base SpA * 2 + 36
Statistical SpD = Base SpD * 2 + 36
Statistical Spe = Base Spe Speed Factor / 505``````
We'll call the above SHP, SAtk, SDef, SSpA, SSpD and SSpe respectively.

Now we find the raw physical tankiness (RPT), special tankiness (RST), physical sweepiness (RPS) and special sweepiness (RSS):

Code:
``````RPT = SHP * SDef
RST = SHP * SSpD
RPS = SAtk * (SAtk * SSpe + 415) / (SAtk * (1 - SSpe) + 415)
RSS = SSpA * (SSpA * SSpe + 415) / (SSpA * (1 - SSpe) + 415)``````
Now we convert each of these raw statistics so that their individual mean is exactly 100 and their individual standard deviation is exactly 50. These become the physical tankiness (PT), special tankiness (ST), physical sweepiness (PS) and special sweepiness (SS):

Code:
``````PT = RPT / 417.5187 - 18.9256
ST = RST / 434.8833 - 13.9044
PS = RPS / 1.855522 - 4.36533
SS = RSS / 1.947004 + 4.36062``````
Having equipped ourselves with the usual four main statistics for tankiness and sweepiness, we can now proceed to find the Offense/Defense Bias (ODB) and Physical/Special Bias (PSB). In passing, we also convert them to stats whose mean is exactly 0 and whose standard deviation is exactly 10:

Code:
``````ODB = (max(PS,SS) - max(PT,ST)) / 6.243721 - 0.326255
PSB = (PT - ST + PS - SS) / 6.840256``````
Finally, we can find the overall rating of the Pokemon. Since we have ensured that the individual stats each have the same mean and standard deviation, this is now much more easy to find than in the first BSR version. We also convert the final answer so that the overall rating has a mean of 200 and a standard deviation of 100:

Code:
``Rating = (PT + ST + PS + SS) / 1.525794 - 62.1586``
Now let's provide a few charts that explain the number provided by each stat. This is now extremely easy to do since we have converted our stats to have meaningful means and standard deviations.

For PT, ST, PS and SS, we have (assuming they are rounded to the nearest whole number):

Code:
``````If PT/ST/PS/SS is     Stat is      Examples
------------------------------------------------------------------------------------------------
Less than 25        Horrible     Ralts (PT), Magikarp (ST), Shuckle (PS), <none> (SS)
25 to 49            Bad        Shuppet (PT), Pikachu (ST), Smeargle (PS), Wooper (SS)
50 to 74            Poor       Alakazam (PT), Swellow (ST), Probopass (PS), Bastiodon (SS)
75 to 99       Below Average   Gengar (PT), Breloom (ST), Spiritomb (PS), Slowbro (SS)
100 to 124      Above Average   Ludicolo (PT), Mamoswine (ST), Hariyama (PS), Tyranitar (SS)
125 to 149           Good       Machamp (PT), Roserade (ST), Kingdra (PS), Flygon (SS)
150 to 174         Very Good    Magnezone (PT), Heatran (ST), Metagross (PS), Rotom-A (SS)
175 to 199         Excellent    Gliscor (PT), Vaporeon (ST), Heracross (PS), Charizard (SS)
200 to 224         Fantastic    Tangrowth (PT), Milotic (ST), Electivire (PS), Porygon-Z (SS)
More than 224        Amazing     Steelix (PT), Snorlax (ST), Weavile (PS), Espeon (SS)``````
For ODB, we have:

Code:
``````  If ODB is     Pokemon is                          Examples
-------------------------------------------------------------------------
Less than -20   Absolutely biased towards defense   Blissey, Aggron
-20 to -15     Heavily biased towards defense      Hippowdon, Slowking
-15 to -10     Biased towards defense              Skarmory, Hypno
-10 to -5     Moderately biased towards defense   Walrein, Miltank
-5 to 0      Slightly biased towards defense     Ampharos, Metagross
0 to 5      Slightly biased towards offense     Gyarados, Dragonite
5 to 10      Moderately biased towards offense   Mismagius, Magmortar
10 to 15     Biased towards offense              Zapdos, Staraptor
15 to 20     Heavily biased towards offense      Manectric, Salamence
More than 20   Absolutely biased towards offense   Azelf, Alakazam``````
For PSB, we have:

Code:
``````  If PSB is     Pokemon is                           Examples
--------------------------------------------------------------------------
Less than -20   Absolutely biased towards special    Regice, Gardevoir
-20 to -15     Heavily biased towards special       Latias, Togekiss
-15 to -10     Biased towards special               Porygon-Z, Houndoom
-10 to -5     Moderately biased towards special    Rotom-A, Empoleon
-5 to 0      Slightly biased towards special      Yanmega, Abomasnow
0 to 5      Slightly biased towards physical     Swampert, Electivire
5 to 10      Moderately biased towards physical   Weezing, Machamp
10 to 15     Biased towards physical              Aerodactyl, Heracross
15 to 20     Heavily biased towards physical      Mamoswine, Forretress
More than 20   Absolutely biased towards physical   Rhyperior, Cloyster``````
Finally, for overall Rating, we have (assuming Rating is rounded to the nearest whole number):

Code:
``````If Rating is       Rating is    Examples
-----------------------------------------------------
Less than 50       Horrible     Pichu, Feebas
50 to 99           Bad        Smeargle, Ditto
100 to 149          Poor       Delibird, Farfetch'd
150 to 199     Below Average   Beedrill, Sunflora
200 to 249     Above Average   Spiritomb, Shuckle
250 to 299          Good       Scizor, Gliscor
300 to 349       Very Good     Infernape, Umbreon
350 to 399       Excellent     Entei, Jirachi
400 to 449       Fantastic     Garchomp, Deoxys
More than 449      Amazing      Slaking, Regigigas``````
Example: Let's calculate the Base Stat Ratings for Shiftry.

Shiftry's Base Stats are:

HP: 90
Atk: 100
Def: 60
SpA: 90
SpD: 60
Spe: 80

We first find the Statistical stats:

SHP: 90*2+141 = 321
SAtk: 100*2+36 = 236
SDef: 60*2+36 = 156
SSpA: 90*2+36 = 216
SSpD: 60*2+36 = 156
SSpe: Base Speed is 80, which corresponds to a Speed Factor of 323. Hence SSpe = 323/505 = 0.6396.

Now we find the raw tankiness and sweepiness stats:

RPT: 321*156 = 50076
RST: 321*156 = 50076
RPS: 236*(236*0.6396+415)/(236*(1-0.6396)+415) = 267.0982

Now we find the real tankiness and sweepiness stats:

PT: 50076/417.5187-18.9256 = 101.0115 (Above Average)
ST: 50076/434.8833-13.9044 = 101.2437 (Above Average)
PS: 267.0982/1.855522-4.36533 = 139.5824 (Good)
SS: 242.4317/1.947004+4.36062 = 128.8759 (Good)

Now we find the ODB and PSB:

ODB: (max(139.5824,128.8759) - max(101.0115,101.2437))/6.243721-0.326255 = 5.8141 (Moderately biased towards offense)
PSB: (101.0115-101.2437+139.5824-128.8759)/6.840256 = 1.5313 (Slightly biased towards physical)

Finally we find the overall rating!

Rating: (101.0115+101.2437+139.5824+128.8759)/1.525794-62.1586 = 246.3454 (Above Average)

#### DougJustDoug

##### Knows the great enthusiasms
Moderator
Thanks for the update, X-Act.

I'm considering making a proposal that we stop using ODB and PSB for setting the stat limits, and instead use the four Tankiness and Sweepiness ratings instead. I think ODB and PSB is good for comparing pokemon to each other, but when setting stat limits for making new pokemon, I think using the more specific stat ratings would probably be more appropriate. Of course, if I make such a proposal, there will be some other process-related changes that would accompany it.

I don't want to hijack this thread and turn it into a pseudo-PR thread. But, I think your presentation of the stat ratings formulae is helpful to set the stage for a discussion of how we use the stat ratings here in CAP.

On another note, I'd really like to get more stat ratings info on the website -- either the main Smogon website or the CAP website. I'd like to have a fully populated table with the PT, ST, PS, SS, ODB, PSB, and BSR for every pokemon. If we used the "Sortable" class for the table (for those of you familiar with the Smogon CSS), then we could sort the entire dex on any of the various stat ratings. I think that would make these stat ratings really "hit home" with casual readers. Most people do not intuitively understand the magnitude of the stat ratings numbers themselves, but they would intuitively understand if those ratings are mapped to a list of pokemon and presented in order.

I don't have time to work on it myself, so I'm just mentioning it as an idea for the future. Since the CAP project relies heavily on these stats, I think it makes sense for us to distribute lots of information about your stat ratings.

Thanks again for the work you put into this, X-Act!

#### Deck Knight

##### Blast Off At The Speed Of Light! That's Right!
Have you updated the calculator online to reflect the changes?

If so, getting the BSRs for every pokemon is just a matter of applying the formula to something like an Excel Spreadsheet. You could calculate all of them at once and then just copy in the data. There's already Pokedexes that are Excel based, all we'd need to do is get it into a presentable format.

Good work as always X-Act.

Actually, I particularly like the new Rating system in tiers of 50 points each. As a noted stat-whore, I basically abused the hell out of the latitude the oddball BSR numbers gave us.

#### Ritsi_Time

I while ago I tweaked CardsOfTheHeart's Pokémon Resource to include the ratings. I haven't used it for a few months and so some things are out of date and unfinished but it's mostly there. Might make a new one later using the new formula.

Here it is:

#### familyguyman

These stats make me a happy person. I love the work you have done here since these kinds of metrics are beautiful and meaningful.

One question though, do you think there is a way to combine typing (also ability and movepool but those are far more complex) in the overall rating of pokemon?

#### X-Act

##### np: Biffy Clyro - Shock Shock
First of all, I might not have been posting in the CAP forums much lately, but I hope this thread shows that I haven't forgotten about them. :)

I've already made an Excel sheet of this - in fact, that's from where I get the formulae. I've made an Excel Sheet just for all of you. You can download it here. You can sort the ratings however you like. EDIT: Now with CAP Pokemon as well!

I should be able to update the BSR applet this weekend.

The main difference between the new BSR and the old one is that all ratings are 'clean', in the sense that every rating has an exact mean and standard deviation, which makes it extremely easy to reason about how 'good' or 'bad' the Pokemon is with respect to other ones. This has interesting repercussions. For example, a Pokemon with 80 Base Atk and 80 Base SpA won't have the same Physical Sweepiness and Special Sweepiness now. Similarly, a Pokemon with 80 Base Def and 80 Base SpD won't have the same Physical Tankiness and Special Tankiness.

About combining typing, I think it is possible to be implemented in the future, yes. I'll think about it.

#### zarator

##### ^_^
Nice work, X-Act^^

If CAP revision project starts, we could test this new rating calculator there.

#### X-Act

##### np: Biffy Clyro - Shock Shock
Base Stats Ratings applet now updated to version 2.0.

I'm checking out Colossoil's stats here. Notice that even though it has equal Def and SpD stats, its Physical Tankiness is slightly better than its Special Tankiness statistically (meaning 133/72 in Defense is slightly better than 133/72 in Special Defense statistically).

It's in the usual URL: http://users.smogon.com/X-Act/BaseStatsRatings.html.

Enjoy! :)

#### zarator

##### ^_^
Now we convert each of these raw statistics so that their individual mean is exactly 100 and their individual standard deviation is exactly 50. These become the physical tankiness (PT), special tankiness (ST), physical sweepiness (PS) and special sweepiness (SS):

Code:
``````PT = RPT / 417.5187 - 18.9256
ST = RST / 434.8833 - 13.9044
PS = RPS / 1.855522 - 4.36533
SS = RSS / 1.947004 + 4.36062``````
Sorry X-Act, could you explain this passage a bit more in depth? Especially the bolded part. I know what deviation is when we talk about Shoddy ratings, for example, but what is the meaning of this word in the context of Stat ratings? Does this mean you give more weight to how much a specific "tankiness" or "sweepiness" deviates from the medium values (i.e., assuming the medium PT is higher than the medium ST, giving a higher PT than ST to Pokémon like Mew or Jirachi with equal Def and SDef)? And what does "mean" mean (no pun intended)?

#### X-Act

##### np: Biffy Clyro - Shock Shock
First of all, 'mean' here means 'average'. So I convert the numbers so that they have a mean, or an average, of 100. I do the same for ODB and PSB (so that they have an average of zero) and rating (so that it has an average of 200).

Next, standard deviation. The standard deviation of a set of data is a measure of how much the data is spread away from the mean, or average, value. According to Chebyshev's inequality, the probability that a number is more than k standard deviations away from the mean is at most 1/k^2. So, in our case, if we have a set of data that has a mean of 100 and a standard deviation of 50, it means that, for example, no more than 1/2^2 of the data lies outside the range from 100 - 2*50 and 100 + 2*50. This means that at least 75% of our data must necessarily be between 0 and 200. Another example is if we put k = sqrt(2): according to Chebyshev, no more than 1/sqrt(2)^2 of the data lies from 100 - 50*sqrt(2) and 100 + 50*sqrt(2). This means that at least 50% of our data must be between 29.289 and 170.711. Typically the percentages are much more than this, but Chebyshev tells us that that is the smallest percentage for ANY set of data.

Because of this, the standard deviation can be used to reason about a certain number, something which we couldn't do well before. For example, if a Pokemon has a physical tankiness of 200, this means that its physical tankiness is, at the very worst, among the top 25% of Pokemon. This is the reason why I then rated each stat by putting them in ranges of 25 (half the standard deviation) for PT, PS, ST and SS, in ranges of 50 (half the standard deviation) for the rating itself, and in ranges of 5 (half the standard deviation again) for the ODB and PSB.

In a nutshell, by converting the stats to ones that have a 'nice' mean and standard deviation, I could rate each stat easily without worrying if the ranges I impose are right. To be honest with you, the ranges I imposed for the old Base Stats Ratings were basically pulled out of my ass (especially the ones for the rating itself), with very little reasoning behind them. I hope that this second version is a massive improvement at least in this respect.

#### Umbreon Dan

thanks a lot for all your work, x-act.

while i'm here, i'm going to take this opportunity to say that all serious stat spread submissions for the CAP revisions will require the four ratings (physical tankiness, special tankiness, physical sweepiness and special sweepiness) to be posted with them using the new formula. the revision project will hopefully be started later today...

#### zarator

##### ^_^
Thanks for the explaination, X-Act. It is much clearer now - although the fact that despite my love for math I wasn't that good with statistics hampers me a little here^^ (You know, that Chebyshev's inequality you told about does not belong to standard high school math where I studied :-P)

To be honest with you, the ranges I imposed for the old Base Stats Ratings were basically pulled out of my ass
What a charming visual image you have conjured. Truly, you are a painter with words.

#### petrie911

Comparing BSR to BST, I got the following relation.

BSR=(BST/30.3714)^2 +/- 14.2

I suppose this makes sense given that SS, PS, ST, and PT are all approximately second-order in the base stats.

BSR vs usage is more interesting, of course, but I don't have the usage stats in a convenient form to check that.

#### Alex_Dino

Would your formula change depending on what Generation you were basing your statistics on? I'm doing a statistical analysis of base stats throughout the generations, and I was wondering whether your numbers would change due to things such as less Pokémon existing, IV changes, and the stat split.

#### Umbreon Dan

the speed factor would be different, but i see no reason why anything else would change.

#### Alex_Dino

the speed factor would be different, but i see no reason why anything else would change.
Because i.e. Gen I, instead of 505 Pokémon there would be 151... Okay that makes sense.

However, what about the stat split? Would you calculate it like (changes in bold, this example would be Gen I):

Converting Base Stats:

Code:
``````Statistical HP = Base HP * 2 + 141
Statistical Atk = Base Atk * 2 + 36
Statistical Def = Base Def * 2 + 36
[B]Statistical Spc = Base Spc * 2 + 36[/B]
Statistical Spe = Base Spe Speed Factor / [B]151[/B]``````
Now for physical tankiness (RPT), special tankiness (RST), physical sweepiness (RPS) and special sweepiness (RSS) (Statistical Spc will be called SSpc):

Code:
``````RPT = SHP * SDef
RST = SHP * [B]SSpc[/B]
RPS = SAtk * (SAtk * SSpe + 415) / (SAtk * (1 - SSpe) + 415)
RSS = [B]SSpc[/B] * ([B]SSpc[/B] * SSpe + 415) / ([B]SSpc[/B] * (1 - SSpe) + 415)``````
Then everything else would proceed as normal, correct? I want to make sure I'm getting this right before I start working on implementing it into my statistics.

#### SupremeDirt

Because i.e. Gen I, instead of 505 Pokémon there would be 151... Okay that makes sense.

However, what about the stat split? Would you calculate it like (changes in bold, this example would be Gen I):

Converting Base Stats:

Code:
``````Statistical HP = Base HP * 2 + 203
Statistical Atk = Base Atk * 2 + 98
Statistical Def = Base Def * 2 + 98
[B]Statistical Spc = Base Spc * 2 + 98[/B]
Statistical Spe = Base Spe Speed Factor / [B]151[/B]``````
Now for physical tankiness (RPT), special tankiness (RST), physical sweepiness (RPS) and special sweepiness (RSS) (Statistical Spc will be called SSpc):

Code:
``````RPT = SHP * SDef
RST = SHP * [B]SSpc[/B]
RPS = SAtk * (SAtk * SSpe + 415) / (SAtk * (1 - SSpe) + 415)
RSS = [B]SSpc[/B] * ([B]SSpc[/B] * SSpe + 415) / ([B]SSpc[/B] * (1 - SSpe) + 415)``````
Then everything else would proceed as normal, correct? I want to make sure I'm getting this right before I start working on implementing it into my statistics.
IVs in gen 1 provided 30 total points, instead of 31. So reduce them by 1. Also, add 63, as all Pokémon have max stats in Gen 1. Thus, add 62.

*EDIT* I hereby present the 5th gen speed factor chart.
Code:
``````Base Speed   Speed Factor
-------------------------
1 to   5         0
6 to  10         2
11 to  15         5
16 to  20        14
21 to  22        27
23            28
24            31
25            32
26 to  28        42
29            43
30            44
31            75
32            77
33            81
34            83
35            84
36           105
37 to  38       109
39           110
40           111
41           142
42           144
43           149
44           153
45           154
46           181
47           182
48           184
49 to  50       189
51           229
52           231
53 to  55       233
56           262
57           265
58           267
59           273
60           274
61           313
62 to  63       315
64           317
65           321
66           357
67           361
68           365
69           368
70           369
71           402
72           405
73 to 74       407
75           410
76           421
77           424
78           426
79           428
80           429
81           458
82           461
83           462
84           465
85           466
86           493
87           498
88           499
89 to  90       500
91           529
92           534
93           536
94 to  95       538
96 to  97       562
98           566
99           569
100           570
101           595
102           599
103           600
104 to 105       601
106           611
107 to 108       612
109           618
110           619
111           628
112           630
113           632
114           633
115           634
116           642
117 to 120       644
121 to 125       648
126 to 127       651
128           652
129 to 130       653
131 to 140       657
141 to 145       658
146 to 150       659
151 to 160       661
161 to 180       662
181 to 255       663``````

#### Alex_Dino

IVs in gen 1 provided 30 total points, instead of 31. So reduce them by 1. Also, add 63, as all Pokémon have max stats in Gen 1. Thus, add 62.
Thanks for the explanation.

However I've run into a snag, even by modifying the formula to reflect Gen 1, the means for PT, ST, PS, and SS aren't 100 (they're in the 140s) and the average for ODB isn't 0 (it's -6ish). I'm going to try to tinker around with the numbers in the formula but I'm sure this is out of my current math knowledge. Help would be appreciated, but since this isn't the right place to ask it I don't really expect any.

Anyway, thanks for the help guys. I'm one step closer to finishing my power creep analysis.