Base Stats Ratings Version 2.0

X-Act

np: Biffy Clyro - Shock Shock
is a Site Content Manager Alumnusis a Top Programmer Alumnusis a Top Smogon Discord Contributor Alumnusis a Top Researcher Alumnusis a Top CAP Contributor Alumnusis a Top Tiering Contributor Alumnusis a Top Contributor Alumnusis a Smogon Media Contributor Alumnusis an Administrator Alumnus
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
RSS: 216*(216*0.6396+415)/(216*(1-0.6396)+415) = 242.4317

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)
 
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!
 
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.
 
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?
 
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.
 
Base Stats Ratings applet now updated to version 2.0.

bsr2.png


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! :)
 
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)?
 
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.
 
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...
 
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.
 
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.
 
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.
 
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.
 
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
 
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.
 
Back
Top