Done Change to BSR Calculations

Status
Not open for further replies.

MrDollSteak

CAP 1v1 me IRL
is a Community Contributoris an Artist Alumnusis a Forum Moderator Alumnus
Hello everyone,

I'd like to introduce you all to a project that I've been working on with our lovely mod and resident statistical mathematician QxC4eva designed to improve the BSR Calculator and subsequently stats stages. This is a direct response to G-Luke's post about The Over Tuning of CAP Creations as found here, and the specific issue of inflated BSTs and highly optimised offensive dump stats. As has been mentioned in this thread, as well as the thread for the BSR itself, part of the reason for this bias is in the way that BSR is calculated as a summation of all of the individual values. Subsequently, an easy way to slide into the BSR limits for Stat stages is to dump either Attack or Sp. Atk as a means to bring down the PS and SS values enough to fit within the limits.

For those that were involved in the Stats Stages for our most recent process, CAP 28, you will remember that as TL for stats I attempted to address this problem of dumping the unused offensive stat through the use of a PS or SS mask that required the manual input of a specific PS or SS value into its respective column in the calculator to override its real value, as a means to address the way that BSR was calculated. While I think that this was suitable for the needs of that specific project as a quick, band-aid solution to address the possibility of having Mixed, as well as purely Physical or Special submissions, as seen in the diversity of submissions and slated options, choosing the specific numerical value for the mask was quite challenging due to there being little frame of reference. With this in mind, I have been interested in finding a more permanent solution to this problem.

While there have been a few different drafts that I've gone through, in the interests of brevity, I will be focusing only on what I view as the current optimal version of the BSR calculator. To summarise, I have added a new Stat Bias column to be accounted for when calculating the BSR. I have provisionally named this stat bias OSD standing for 'Offensive Stat Differential,' which is, as implied by its name and in line with the other stat biases, the standardised absolute value between a Pokemon's PS and SS values. Before I continue to explain how this works in practice, I just wanted to mention that it was quziel that first gave me the idea to include a modifier to BSR based around a Pokemon's PS and SS differential, and as such would like to thank them for the inspiration.

As part of this broader project, QxC4eva has also moved the BSR calculator spreadsheet to Google Sheets and automated the process of determining values and adding new Pokemon to the calculator which is fantastic. As such, rather than having to edit a constant to change the BSR, now all that is needed is to change the Standard Deviation values of the individual Stat Bias and BSR columns. This has allowed for finding what I consider to be an ideal OSD weighting of 22 SD that I believe In removes the disproportionate bias that the current BSR calculator has against Pokemon with two high offensive stats by better accounting for the fact that most offensive Pokemon will benefit from one high attack stat at a time, while still maintaining the principle that increasing the dump stat of PS or SS will also raise the BSR. That being said, under the new spreadsheet it is very easy to modify should that be required. OSD is designed to be a value that does not to be stipulated by the TL, but instead to allow for a diversity of spreads, either Mixed, Physical or Special, to all hit the necessary benchmarks and parameters that a TL may set.

To see how this change works in practice, I've included a comparison of the Top 20 CAP Metagame Pokemon by Usage (according to September 2020) below.
1602141053262.png


As is clear from the diagram, we can see that many mixed attackers have seen their BSR values go down fairly dramatically such as Krilowatt, Naviathan and Aurumoth, while many pure Physical or Special attackers such as Urshifu and Pajantom have seen their BSR values go up by quite a bit to reflect their dump stats. In addition it should also be clear from the later 3 columns to see how changing the SD value of OSD can have a pretty drastic effect. Changing the SD to 0 actually restores the original BSR calculation. Having discussed with a few people on discord, a value in between 20 and 25 was ideal, and as such why I decided on 22.

To demonstrate why I think this is an effective change for future stat processes, I will now compare a few different working spreads and how their values change as stats go up and down in both the old BSR and the new BSR in relation to the parameters that a TL may set, as well as discuss how the most recent slate of stat options for CAP 28 would have changed.

Let's say that hypothetically, the TL for CAP 29 set the following stat limits for the project.
PT: 150
ST: 155
PS: 100
SS: 250
BSR: 350

Under the old BSR calculator it would be possible to create the following Stat Spread and have it as legal within the limits.

91 HP / 52 Atk / 90 Def / 129 SpAtk / 90 SpDef / 108 Speed
PT:
144.465
ST: 147.194
PS: 87.694
SS: 245.211
BSR: 349.054

This spread may look familiar, and well, that's because it belongs to Keldeo, but with 20 Attack shaved off to force it into the limits. With its proper 72 Attack, Keldeo has a BSR of 371.169. Although it's perfectly possible that a TL would exclude this spread because of it being potential BSR abuse, it could theoretically slip through because it is somewhat below each of the proposed limits and isn't too far from some of our existing CAPs ie. Volkraken and Pajantom. In comparison, these two spreads reach BSR totals of 383.812 and 391.867 using the new BSR calculator.

With this in mind, it is clear that it is possible for TLs to set individually higher limits on certain stats with a lower BSR to encourage greater diversity, and avoid the problem of CAPs producing endless bulky attackers that reach the PT and ST limits and get close to either the PS or SS limit. Instead stat submitters will need to prioritise reaching individual limits that they deem important. For example Keldeo's spread would need to be modified to 80 / 48 / 80 / 129 / 80 / 108 for example, or to say 91 / 52 / 90 / 113 / 90 / 108.

To further illustrate this point, I refer back to the most recent stats stage for CAP 28. As mentioned previously a mask of 140 PS or SS was used to discourage optimised dump stats so as to allow for mixed spreads to have a reasonable chance to compete. As a reminder the limits for CAP 28 are also listed below.

PT: 120
ST: 180
PS: 220
SS: 225
BSR: 350
Minimum PS or SS: 140

The following chart displays what the selected spreads on the slate looked like with this mask added.

1602207114824.png


As you can see, with the mask applied most of the spreads hover approximately at the 330-340 BSR mark, with Quz and Jho's being the closest to the BSR limit of 350 at 347.161 and 344.794 respectively, and Pipotchi and Jas61292's the lowest at 331.124 and 309.511 respectively.

The next chart instead uses the new BSR calculation and allows for the real PS and SS values to be displayed.

1602206781413.png


Comparing this to the previous values, we can see a few notable differences. Overall the BSR on all of the spreads has lowered, although not proportionally. Jas61292's spread remains the lowest, but Jho's has now crept Quziel's to become the highest BSR. In addition Pipotchi's has overtaken Yay61's and Dogfish44's (rows 3 and 7) to enter the middle of the pack. The difference between Quziel and Jho's spread is also significantly higher than the 3rd place of Amamama's to be a difference of 11-15 instead of the original 2 point differential. Had this BSR calculator been implemented for the CAP 28 stat stage instead of the use of a mask, it is clear that a BSR limit of 330 would be more than sufficient to preserve the majority of these sets.

I realise that this is a massive wall of text, and I hope it hasn't been too daunting to get through. To anyone that wants to have a play with the updated calculator you can find a link to it here, just make sure to make your own copy to edit. I would love to hear all of your thoughts about these changes and the spreadsheet itself. With any luck this will be fully operational for CAP 29.
 
Last edited:

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
Thank you MrDollSteak for writing this proposal! It's a tricky topic so I'm gonna summarize it in my perspective to give another insight to the issue.

BSR is designed to rate base stats better than BST, but it isn't perfect - and as the recent stat submissions have shown us, one of the problems is that non-mixed attackers can afford to have a slightly lower BSR than mixed attackers, and still perform just as well. The reason for that is straightforward - non-mixed attackers have one less stat to care about. That means having a BSR limit will give mixed attacking spreads less headroom than pure physical or special attacking ones, making the former a less attractive option to go for.

A quick fix for CAP 28 utilized a 'mask' which worked quite well, but unlike the rest of BSR, it does not follow the standard of being derived from a model based on the metagame and battle mechanics. This standard is necessary to produce ratings that are objective, practical and specific to the CAP meta. Which brings us to this proposal.

Recall the BSR formula prior to standardization is PS + SS + PT + ST
The new modification proposed by MrDollSteak is PS + SS + PT + ST + (OSD × 22)
OSD is the 'offensive stat differential' i.e. the standardized difference between PS and SS. OSD measures the offensive bias of a mon - the higher it is the less likely the mon will go mixed.

In context, adding in the OSD × 22 part means adding 22 points per standard deviation of the mon's offensive bias from the mean offensive bias, onto BSR. Think of 22 as the 'weighting'. The higher this number is the more the bias will increase BSR - which is akin to raising the BSR of a pure physical or special attacker to make it more reflective of its performance in practice. The OP shows how the new BSR changes with this number set to 20, 22, 25 and 30. MrDollSteak decided that 22 produces the best results based on his experience with the metagame.

To highlight the changes, here's the CAP meta's top 50 ordered by their BSR change as a result of the proposal:
BSR_diff.png

Note that negating the number in the purple column will give you the amount of 'headroom' granted for the mon's spread. E.g. Aurumoth's spread will get a BSR limit increase of 24.8 - granting it more headroom in return for having invested in both offenses. Volkraken's spread, on the other hand, will get a BSR limit reduction of 36.7 - granting it less headroom due to having invested in SpA mostly and saving up on Atk. To put it another way, the new BSR acts as a 'flexible mask' which adjusts itself according to the distribution of the offensive stats.

Here's what I think of the proposal:
  • The proposal is kinda hacky in that it introduces the magic number 22 into the BSR formula. While the formula already has in it a few magic numbers like the 415, those were derived from X-Act's analysis which is objective. In contrast, the number 22 was derived by eyeballing some data which is subjective and not ideal.
  • Due to that reason, this model is inadequate and cannot be made official. Its concept however has a more solid grounding than the CAP 28 mask so I'm happy with it being a temporary solution for our next CAP(s). Ultimately, I'll be working on a more robust model with the same goal in mind and MrDollSteak's work here provides a good reference point for the numbers we'd expect it to hit.
  • The OSD rating by itself is objective and can be reused elsewhere if applicable. Anyone remember X-Act's PSB and ODB ratings? Well, OSD is their little sibling.

If this goes through, I'd like to put forward some adjustments to the proposal.
  • Keep the old BSR as it is and call the new BSR "modified BSR", or mBSR. The old BSR has a solid mathematical context to it which I feel should be preserved and not overwritten by this lesser model. Future stat stages will therefore set limits on mBSR rather than BSR.
  • Calibrate OSD to a mean of 0 rather than 44. The mean can be anything as it doesn't affect the results, so go with the simplest value.
  • I'm not too keen on the name "OSD", it sounds like a mental health disorder :P Maybe offensive bias (OB) or sweepiness bias (SB) sounds better.
 

Bughouse

Like ships in the night, you're passing me by
is a Site Content Manageris a Forum Moderator Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnus
I think there's several issues with this formula and I am not sure that QxC4eva's proposed solutions alone even fix it.

Let's just take 3 examples next to each other in the spreadsheet and see if the result is reasonable:

PokemonAtkSpASpePSSSOSD
Swirlpool4950285055.725.1
Coribalis69654370.773.523.3
Snaelstrom948063110.5103.226.0

effectively, what this says to do is to add in roughly the same amount to the BSR for all 3. They are roughly equally biased and therefore their BSR should be roughly equally modified. However, does this actually do something meaningful? I don't think so. For one thing, Snaelstrom and its prevos don't actually have an attacking dump stat. That's why their OSD comes out to ~25, which is well below the mean OSD among all Pokemon. But why should anything be getting modified for these at all, even if it's less modification than is happening for others?

A better solution would be one in which only Pokemon with dump stats are getting seriously dinged for it. I'm aware that since the "ding" here is less than the average impact to BSR, they're actually being rewarded, but that is not remotely apparent to any casual reader. This is the sort of thing that QxC is getting at re: normalizing. To be honest though I'm not sure how this design is even meant to be normalizable to 0 since that would in some sense require negative values to be possible, and negative values don't make sense in this context.

So - yes some amount of normalizing is probably necessary, though idk what it would even mean to do this.

But I don't think a lack of normalizing is the only issue. Let's look at 2 more CAPs:

PokemonAtkSpASpePSSSOSD
Jumbao6312496100214.991.5
Equilibra501216065.2145.770.6

I think here you can start to see the issues with the metric even more broadly than a lack of normalizing to 0.

Both of these CAPs were obviously heavily biased to be special attackers. In one case as a reasonably speedy one that is a genuine threat as a special sweeper and in the second case as a tanky mon that nonetheless is still a scary special attacker. This results in a huge difference between the two in terms of special sweepiness. That's fine. Turn order matters and being slow and going second will obviously hamper any sweeper's potential. At an aggregate level, if you are looking to rank whether a Pokemon will be a good special sweeper, you will need to take into account both its special attacking prowess and its speed.

What's not fine is when you then feed in these sweepiness values that are heavily influenced by speed into a determination of how much more of a physical or special attacker a Pokemon is vs a mixed attacker.
Equilibra actually has far more of a dump stat here than Jumbao does and yet it is being punished substantially less.

I think the problem stems from a confusion between what it means to have "sweepiness" and to have an attacking bias.

Jumbao is not actually in some way less likely to use its Atk stat and does not need to be punished more than Equilibra. And even if you normalize the current system to 0, normalizing won't change the fact that Jumbao is being punished more heavily. Basically, the current rules and calculations mean that Equilibra's 50 Atk is somehow less of a dump stat than Jumbao's 63 ... because of the impact of Speed. That is to say, when we are making a slow Pokemon, you won't actually get dinged for having a dump stat (i.e. 50 is being considered less of a dump stat than 63, since Equilibra's speed made being a Sweeper - whether physical or special - so unlikely anyway). But if we're making a fast Pokemon you will be dinged heavily, potentially even for a non-dump stat.

On an individual Pokemon basis, whether it is more likely to be a physical or special attacker is going to be largely ignorant of its speed, since its speed is the same whether it is trying to be a physical or special sweeper. True - speed is not an entirely independent variable and that's a small part of why a Pokemon with a base 100 stat line doesn't have equal PS and SS (the predominant factor is relative availability of low/high stats for Atk and SpA, but the correlation of those with speed stats matters somewhat too). That is to say that the comparison of PS:SS for a Pokemon with 100 Atk and 100 SpA changes as speed changes, just not by that much.

I think a far better way at getting at the general issues of mixed attackers, dump stats, and the like is going to be one that goes back to Attack and Special Attack on their own, and not one influenced by Speed.
 

quziel

I am the Scientist now
is a Site Content Manageris a Forum Moderatoris a Community Contributoris a Smogon Discord Contributoris a Top CAP Contributoris a Contributor to Smogonis a member of the Battle Simulator Staff
Moderator
I apologize as this is pushing more work on people, but would it be possible to basically do:

Bias_score = normalized{ max( [ (Atk_stat - SpA_stat) / Atk_stat, (SpA_stat - Atk_stat) / SpA_stat) ] ) }

And basically use the % difference between attack and spA (w.r.t. the higher stat) to penalize spreads with large dump stats? These differences being based on the projected (invested or uninvested, your choice) stat.
 

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
re: why modify BSR of mons lacking an attack dump stat (e.g. Snaelstrom line)
(Bughouse) Understand that BSR is a mathematical model which means it makes generalizations and not case-by-case exceptions. You can try coming up with an objective method that dings only mons with dump stats, sure - good luck with that. Until that happens, it's reasonable to expect cases where there's less modification as opposed to none.

Also remember how standardization works. Standardization is centered around the mean, not the minimum. That means the mons without BSR change are the mons that have an average attack dump stat; not the ones that have no attack dump stat. Charizard (84/109/100 offenses) is an example of having an average dump, and you can see from my chart there's virtually no change in its BSR. Likewise, mons with no dump stat are considered to be below average in dump, so their BSR ends up lowered due to how standardization works. E.g. see Toxapex and Amoonguss on my chart.

By no means that's a flaw with standardization. It just means you have to look at the numbers in a way you're probably not as used to.


re: lack of normalizing in OSD
OSD is normalized. I was suggesting not to calibrate it to a mean of 44, but to 0 (which means no calibrating at all) because doing so does not affect the results. You're confusing between normalization and calibration - both are different things. When you normalize a set of data, the mean becomes 0 and the standard deviation becomes 1. Calibration is when you transform this mean and SD to something other than 0 and 1, and is entirely optional since all it does is make your numbers more pretty. The way the BSR formula works makes it so whichever mean you calibrate OSD to will not change the results.

In fact you can go see this for yourself:
In the OP's spreadsheet, click the "BSR of all pokemon" tab and scroll down to Q658 cell. Replace 44 with 0. None of the BSR values should change. Now enter in something stupid like 99999. You'll get some bogus looking OSDs but the BSRs should all remain unchanged.


re: dump stats shouldn't be influenced by speed
That's a very good point and it was something I brought up with MrDollSteak while he was working on this. I suggested an alternate formula based only on Atk and SpA.... I believe it was ABS(LOG((Atk*2 + 36) / (SpA*2 + 36))) which is somewhat along the lines of what quziel suggested. As far as I know, it got rejected as the results didn't look right, but I'll leave this to MrDollSteak to clarify.
 

MrDollSteak

CAP 1v1 me IRL
is a Community Contributoris an Artist Alumnusis a Forum Moderator Alumnus
re: dump stats shouldn't be influenced by speed
That's a very good point and it was something I brought up with MrDollSteak while he was working on this. I suggested an alternate formula based only on Atk and SpA.... I believe it was ABS(LOG((Atk*2 + 36) / (SpA*2 + 36))) which is somewhat along the lines of what quziel suggested. As far as I know, it got rejected as the results didn't look right, but I'll leave this to MrDollSteak to clarify.
The issue with the logarithmic calculations were threefold. To be fair the actual logarithmic calculation itself did still factor in Speed because it used the raw PS and SS as opposed to just Special Attack and Attack so that could be worth exploring too. Nevertheless I think that particularly points 2 and 3 will still be retained as problems.

Firstly, it did the exact opposite of the current one, which is that it punished slow Pokemon disproportionately, and effectively allowed you to lower a Pokemon's BSR at a certain point by making the Pokemon faster.

On this note, it also had the weird side effect of lowering the BSR by raising the dump stat, which in my opinion seems completely counterintuitive.

In addition, the logarithmic calculation by organising the OSD in terms of the proportional difference between stats means that prevos have significantly higher OSDs than their evolutions for the most part. A result of this is that it often make more extreme evolved Pokemon such as Alakazam and Darmanitan have lower relative OSD values in relation to other evolved Pokemon, because they are less SDs away from the mean.
 

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
So to give this an update, MrDollSteak and I were working on a more direct solution - one that targets the underlying flaw of BSR rather than putting a bandaid over it. The original idea was from a WIP proposal I had lying around for several years but after an intensive session with MDS we've managed to get it up and running, and it turns out the results are promising. I'm gonna explain the concept and math behind it and MDS will follow up by discussing the results and practical implications for the stats stage.

As we've seen, BSR has a fundamental problem that makes it vulnerable to stat dumping. It treats the pokemon's offensive capability as a combination of its Atk and SpA, but in reality, any mon can excel in just one attacking stat and end up with similar attacking or sweeping capabilities. This prompts an overhaul to how we calculate "offense" in BSR. The solution is to streamline it into a single rating for the mon's offensive potential, regardless of what its preferred attacking method is (be it physical, special, or mixed). We'll call this new rating "Sweepiness" (S).

First let's tweak the BSR formula to account for the above changes:
  • Recall that the current BSR formula is STANDARDIZE{PT+ST+PS+SS}
  • The new BSR formula, with the offenses streamlined, is STANDARDIZE{PT+ST+S×2}
We will now derive the formula for Sweepiness (S). As already mentioned, the aim of Sweepiness is to rate the mon's offensive capability regardless of its preferred attacking method. If the mon is...
  • ...a physical attacker, the calculation will utilize its level 100 Atk stat, which we'll call Atk100
  • ...a special attacker, the calculation will utilize its level 100 SpA stat, which we'll call SpA100
  • ...a mixed attacker, the calculation will utilize its level 100 Mixed Attack stat, which we'll call MxA100
What we need to do now is select whichever one of the above is the highest: MAX{Atk100, SpA100, MxA100} and the result would be the mon's preferred attacking method. Let's call this variable A and use it to complete rest of the Sweepiness formula:
  • Recall that Physical Sweepiness (PS) = STANDARDIZE{(Atk100×SF+415)/(Atk100×(1-SF)+415)} where Atk100 = Atk×2+36
  • Also recall that Special Sweepiness (SS) = STANDARDIZE{(SpA100×SF+415)/(SpA100×(1-SF)+415)} where SpA100 = SpA×2+36
  • and optionally, Mixed Sweepiness (MS) = STANDARDIZE{(MxA100×SF+415)/(MxA100×(1-SF)+415)} where MxA100 = <see next paragraph>
  • Therefore, Sweepiness (S) = STANDARDIZE{(A×SF+415)/(A×(1-SF)+415)} where A = MAX{Atk100, SpA100, MxA100}
Finally we will derive the formula for MxA100 -- the 'Mixed Attack' stat of the mon at level 100. This formula would take in the mon's Atk and SpA and output a number corresponding to its "offensive capability" if it were to go mixed. "Offensive capability" is based on the context that, if the mon were to be a purely physical attacker, the offensive capability would be its Atk, and if it were to be a purely special attacker, the offensive capability would be its SpA. To find the Mixed Attack (MxA) equivalent, we 1) take the geometric average of the Atk and SpA, then 2) multiply them by a bonus constant for being a mixed attacker. For part 1 it's essential to use the geometric average and not the more common arithmetic average because damage from an attack is based on multiplication, not addition or subtraction. For part 2, the bonus constant is computed by simulating an attack against the weaker defense of all mons in the meta (which is the key characteristic of a mixed attacker), and comparing that via a ratio to the damage that would've been done had it gone purely physical or special. The overall formula for MxA100 comes to:
GEOM_AVERAGE{Atk100,SpA100}×AVERAGE{aRPT,aRST}/aLRT where aRPT is the average Raw (i.e. unstandardized) Physical Tankiness of all mons, aRST is the average Raw Special Tankiness of all mons, and aLRT is the average lower Raw Tankiness stat of all mons.

It should be noted that Atk100, SpA100 and MxA100 all have a different 'worth' depending if the metagame is on average more physically or specially defensive. E.g. in a more physically defensive meta, an Atk100 stat of 236 is worth less than a SpA100 stat of 236, as the physical attacker would be more heavily resisted than the special attacker. Since for Sweepiness we are selecting the highest of Atk100, SpA100 and MxA100, discrepancies between their readings can lead to inaccuracy as to whether we've truly picked the highest stat of the three. We should therefore calibrate them to the same scale by introducing the same ratio multiplier concept to Atk100 and SpA100 (like we have done so for MxA100).
  • Recall that:
    • Atk100 = Atk×2+36
    • SpA100 = SpA×2+36
    • The ratio multiplier for MxA100 is AVERAGE{aRPT,aRST}/aLRT
  • Therefore:
    • Atk100 calibrated = (Atk×2+36) × AVERAGE{aRPT,aRST}/aRPT
    • SpA100 calibrated = (SpA×2+36) × AVERAGE{aRPT,aRST}/aRST
    • While MxA100 remains the same.
With all the formulas derived and calibrated, the new BSR model is complete. MrDollSteak should have a post shortly with test results and analysis showing why dump stats and various other BSR issues are no longer present in the new model. Stay tuned for the fun! I apologize if this turned out rather long and robotic to read as I tried my best to make it as easy to follow as possible. Give yourself a head pat for making it this far and if anything was unclear feel free to post here or shoot me a message :)

Summary of the new BSR model proposed:
Code:
Lv100 Atk stat [Atk100] = (Atk × 2 + 36) × AVERAGE{aRPT, aRST} / aRPT
Lv100 SpA stat [SpA100] = (SpA × 2 + 36) × AVERAGE{aRPT, aRST} / aRST
Lv100 Mixed Attack stat [MxA100] = GEOM_AVERAGE{Atk100, SpA100} × AVERAGE{aRPT, aRST} / aLRT

Sweepiness [S]           = STANDARDIZE{(MAX{Atk100, SpA100, MxA100} × SF + 415) / (MAX{Atk100, SpA100, MxA100} × (1-SF) + 415)}
Physical Sweepiness [PS] = STANDARDIZE{(Atk100 × SF + 415) / (Atk100 × (1-SF) + 415)}
Special Sweepiness [SS]  = STANDARDIZE{(SpA100 × SF + 415) / (SpA100 × (1-SF) + 415)}
Mixed Sweepiness [MS]    = STANDARDIZE{(MxA100 × SF + 415) / (MxA100 × (1-SF) + 415)}

Physical Tankiness [PT]  = STANDARDIZE{(HP × 2 + 141) × (Def × 2 + 36)}
Special Tankiness [ST]   = STANDARDIZE{(HP × 2 + 141) × (SpD × 2 + 36)}

Base Stat Rating [BSR]   = STANDARDIZE{PT + ST + S × 2}
 

MrDollSteak

CAP 1v1 me IRL
is a Community Contributoris an Artist Alumnusis a Forum Moderator Alumnus
I’d like to thank Tomomon for so comprehensively explaining the mathematical reasoning behind the changes to the BSR calculator that we’ve made with the addition of a Mixed Sweepiness rating and the use of only the highest Sweepiness rating when calculating BSR. I’d now like to discuss some of the implications of these changes, as well as what we perceive their benefits to be in terms of the accuracy of BSR as a measurement, as well as for the stat discussion process for future CAPs.

Firstly, because the BSR now only uses one standardized sweepiness rating multiplied by two to be relative to the two tankiness ratings, it can be argued that it is a more accurate reflection of how stats are actually utilised in battle. The summing together of PS and SS to determine a Pokemon’s potential to sweep as in the previous BSR, is not really mathematically accurate in the sense that over a game even a mixed Pokemon will not be sweeping with both stats separately. Instead with only one sweepiness category that uses the Pokemon’s highest sweepiness stat, BSR better represents the offensive capability of a Pokemon in any given game relative to its defenses.

What this means, in comparison to the previous BSR, is that secondary attacking stats are not counted in the final calculation unless they are close enough to the dominant attacking stat in value that the Pokemon is classified as a mixed attackers. Mixed sweepiness being used as the sweepiness category will still lead to a higher BSR than dedicated physical or special sweepiness individually because of the principle that it is able to target any opposing Pokemon’s weaker stat, but there is far less of a penalty than in the old system for the reasons mentioned above.

A further consequence of this change to the BSR, is that bulky attackers with high defensive stats, particularly HP are valued more highly than they were previously, even on Pokemon with low offensive potential such as Blissey. This change has the benefit of allowing TLs to more accurately tailor their BSR limits to defensive or offensive Pokemon as is needed for a concept without automatically trending towards the bulky attackers that CAP has historically had in stat processes. Indeed, in comparison to the previous BSR, under the new system bulky attacking CAPs with large dump stats such as Volkraken, Pajantom and Jumbao have far more inflated BSRs relative to OU Pokemon than they did previously, in effect mimicking the OSD modifier from before, though this cannot be manipulated by raising a Pokemon’s secondary attacking stat to reduce as it could have on a hypothetical OSD system.

To demonstrate these various features in action we can compare how the following hypothetical changes to Miasmaw’s stat spread impact both the original and the new BSRs. Keep in mind that the Old BSR calculation now factors in Crown Tundra Pokemon and will be lower than they were in the thread itself.

HP​
ATK​
DEF​
SPA​
SPD​
SPE​
New BSR​
Old BSR​
85​
135​
60​
115​
85​
92​
310.4​
323.4​
85​
135​
60​
40​
85​
92​
297.7​
253.8​
85​
40​
60​
135​
85​
92​
303.9​
254.3​
85​
135​
60​
135​
85​
92​
331.5​
344.3​
85​
150​
60​
115​
85​
92​
324.6​
339.6​
85​
150​
60​
40​
85​
92​
324.6​
270.0​


As we can see, dump Atk and Sp.Atk stats don’t affect Miasmaw’s BSR anywhere near as signficantly as in the old BSR. Instead, much of the spreads’ power are directly tied to their highest attacking stat. Although having two equal high attacking stats of 135 still results in a higher BSR than having an Attack of 150 and a dump stat, they are close enough that having one high attacking stat is still more punishing than in the old system, wherein a stat spread of 150 Atk 40 Spa was considered significantly less powerful than Miasmaw’s actual stat spread and not vice versa as it appears now.

Finally, I’d like to perform a brief analysis of CAP 28’s slated spreads to give a sense of how a Stats TL leader could handle the new Sweepiness and BSR limits when leading the stage.

As mentioned previously, the limits for CAP 28’s stat process were as follows:

PT: 120

ST: 180

PS: 220

SS: 225

BSR: 350

Minimum PS or SS: 140


The following table displays what the selected spreads on the slate look like with the mask added. Again, it is worth reiterating that both the New and Old BSR in the table below factor in the Crown Tundra Pokemon and as such have very different values to the thread at the time. Also included is the new ‘Sweepiness’ rating abbreviated as Sw.


HP​
ATK​
DEF​
SPA​
SPD​
SPE​
PT​
ST​
PS​
SS​
Sw​
New BSR​
Old BSR​
80​
144​
65​
40​
95​
87​
91.3​
136.1​
202.3​
140.0​
173.8​
309.2​
262.9​
60​
131​
50​
101​
115​
88​
57.3​
139.4​
183.9​
145.7​
158.3​
270.9​
283.0​
46​
131​
57​
140​
110​
86​
56.0​
116.6​
182.2​
200.1​
186.6​
291.9​
301.9​
85​
135​
60​
115​
85​
89​
87.9​
126.9​
190.2​
165.6​
172.6​
299.5​
312.1​
84​
108​
78​
127​
101​
82​
113.2​
149.0​
142.8​
172.8​
151.6​
303.6​
317.0​
70​
100​
85​
123​
88​
99​
109.8​
116.4​
153.8​
198.1​
171.7​
305.5​
317.3​
130​
55​
55​
150​
85​
60​
111.4​
170.1​
140.0​
158.5​
134.3​
294.4​
270.3​


If the new BSR and Sweepiness categories had been available at the time of CAP 28, as stat leader, I would not have needed to set a minimum PS or SS mask, or even a specific PS or SS value to allow for a range of mixed spreads, instead, I could have only set a Sweepiness limit of roughly 190, and have all of the spreads be legal. Additionally I would have been able to set a relatively low BSR of say 305 and preserved most of these sets. Interestingly the final spread was actually removed from the poll because the TL was concerned with its very high Sp. Atk, even though it had a relatively standard BSR at the time it was made and didn’t initially appear to be any more dangerous than the other spreads. Even though it still doesn’t appear to be an outlier in terms of the New BSR because of its low speed affecting its sweepiness value, it is far closer to the other spreads than it was under the old system. As such, even while the New BSR doesn’t fully solve the problem of undervaluing the potential of slow wallbreakers, it does do a better job of bringing them relatively in line with other spreads.

All in all, because of the reweighting of the BSR calculations and the removal of dump stats as an exploitable factor future Stat TLs can be more adventurous in choosing their tankiness and sweepiness limits and more conservative with BSR totals to allow for a variety of spreads. As I said at the time, I only selected a BSR of 350 for Miasmaw’s process because of the way in which mixed spreads were historically punished in the calculations, which is no longer the case with the New BSR.

Additionally in future stat stages, if it is decided that a purely physical or purely special set is required, the TL can continue to set a PS or SS value instead of Sweepiness, as Sweepiness will automatically calibrate itself based on the PS value, and will not need a minimum secondary stat value or mask to result in more interesting and varied submissions, as submitters will not be able to dump their off stat and approach both the physical and special tankiness limits. Instead, submitters will need to think far more carefully about their spreads and make sure that there are defined trade offs in terms of reaching the limits, be it in terms of lowering sweepiness or tankiness potential.

EDIT: If anyone would like to play around with the calculator to get a sense of these BSR changes, you can find a link to the updated BSR Calculator here.
 
Last edited:

quziel

I am the Scientist now
is a Site Content Manageris a Forum Moderatoris a Community Contributoris a Smogon Discord Contributoris a Top CAP Contributoris a Contributor to Smogonis a member of the Battle Simulator Staff
Moderator
Hey, so looked into some stuff related to the origins of SSweep and PSweep and er, we may have been using the wrong formula for a fair while.

unknown.png

So, in the top formula the Special sweepiness is basically this:

Special attack * (probability of being faster + average turns for a KO) / (probability of being slower + average turns for a KO)

aka: Special sweepiness is the probabilty of the speed difference mattering in a 1v1 matchup.

However the formula we are using instead basically says \bar{SpA}*t is 415 (aka the average spA in DPP * the turns to KO in DPP) and ignores the fact that slow mons are threatening offensively. This is flawed because well, it means that as your speed factor approaches zero, the second part of the equation increasingly treats your attack stat like its 300 (aka base 100), aka low speed wallbreakers cheat their BSR.

Here's a graph of the two formulas for like, base 150 attack (unrealistic, but shows that this becomes more important at high base stats and low speeds)

speed_graph.png

Aka lets fix this, its relatively small, but its fixes an issue we have with the formula atm.

assumption:
t = 1.38, = 415 / 300, this may be wrong, but I needed a number.

Source for the formula: https://www.smogon.com/forums/threads/mega-delta-worksheet.3570166/#post-6781385
 

Bughouse

Like ships in the night, you're passing me by
is a Site Content Manageris a Forum Moderator Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnus
I think this generally makes sense but I have one question

Lv100 Atk stat [Atk100] = (Atk × 2 + 36) × AVERAGE{aRPT, aRST} / aRPT
Lv100 SpA stat [SpA100] = (SpA × 2 + 36) × AVERAGE{aRPT, aRST} / aRST
Lv100 Mixed Attack stat [MxA100] = GEOM_AVERAGE{Atk100, SpA100} × AVERAGE{aRPT, aRST} / aLRT

Since it is these Atk100 and SpA100 that feed into what ultimately calculates Sw (alongside MxA100), I want to make sure these are all appropriate.

Has BSR in the past factored in opposing tankiness as a contributing factor to sweepiness? I didn't think so, and doing so here feels a little strange.
Why should for example the special tankiness of the metagame have any impact on the physical sweepiness of a Pokemon? It does here, and I didn't think it did before.
 

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
Has BSR in the past factored in opposing tankiness as a contributing factor to sweepiness? I didn't think so, and doing so here feels a little strange.
Why should for example the special tankiness of the metagame have any impact on the physical sweepiness of a Pokemon? It does here, and I didn't think it did before.
The old BSR did that as well in the 415 constant. 415 was derived from the average turns to KO which takes in the average tankiness of the meta. Yes, we're still using 415 so it means tankiness is used twice now - just saying. ;P The old BSR only needed it once cause it didn't really do anything fancy with PS and SS. New BSR on the other hand would pick out the highest of the lv100 offensive stats, which it can only do properly if they all had the same 'worth'. In a more physically defensive meta, Atk100 values would be slightly more inflated than SpA100 values that's why we have to calibrate them to the same scale. Without calibration, the BSR of a spread will stay exactly the same if you swap Atk and SpA around.

Also note that AVERAGE{aRPT, aRST} / aRPT etc are merely constants and I could write it this way if you like:
Code:
Atk100 = (Atk × 2 + 36) × 0.98792
SpA100 = (SpA × 2 + 36) × 1.01238
MxA100 = sqrt{Atk100 × SpA100} × 1.10976
But I think it's better to avoid magic numbers.

However the formula we are using instead basically says \bar{SpA}*t is 415 (aka the average spA in DPP * the turns to KO in DPP) and ignores the fact that slow mons are threatening offensively. This is flawed because well, it means that as your speed factor approaches zero, the second part of the equation increasingly treats your attack stat like its 300 (aka base 100), aka low speed wallbreakers cheat their BSR.
That's an observation I'm aware of too but decided to stick to one change at a time. I do have an upcoming solution to the sweepiness problem to make it better account for wallbreakers, which will also fix what you mentioned, and MrDollSteak had implemented it earlier today. The results aren't as groundbreaking as the first change but it does seem to alleviate the problem which is a good thing. We'll post more about it in the coming days.

At this point I should clarify that I made a slight mistake explaining 415 in those old posts. 415 is indeed based on t × average attack but the t part is what I mucked up explaining - it's not the average number of turns for an average mon to KO an average mon in the meta. Rather, it is the average number of turns for an average mon we are targeting to KO an average mon in the meta, divided by the average number of mons we expect to be able to KO in a single run:

t = AVERAGE{aRPT,aRST} / (AVERAGE{aAtk100,aSpA100} × aBP × aM × n × 0.777)

where
  • aRPT is the average Raw Physical Tankiness of all mons in the metagame
  • aRST is the average Raw Special Tankiness of all mons in the metagame
  • aAtk100 is the average lv100 Atk stat of all the mons we are targeting
  • aSpA100 is the average lv100 SpA stat of all the mons we are targeting
  • aBP is the average base power of a typical attacking move in the metagame
  • aM is the average modifier applied a typical attack (e.g. STAB, life orb etc) in the metagame
  • n is the average number of mons we expect to be able to KO in a single run
Assuming aRPT = 64000, aRST = 64000, aBP = 90, and aM = 1.3, the formula simplifies to:

t.gif

  • A sweeper targets all mons in the meta: aAtk100 ≈ 220, and aSpA100 ≈ 220
  • We expect a sweeper to be able to KO around 2-3 mons in a single run (any less and it's not really a sweeper): n ≈ 2.5
Therefore, t for sweepiness is 1408 / (2.5 × (220+ 220)) = 1.28
This is very close to the 1.38 quz suggested above, and the 1.5 I suggested for the gen 6 metagame constant in this old post.
  • A wallbreaker targets just walls in the meta: aAtk100 ≈ 170, and aSpA100 ≈ 170
  • We expect a wallbreaker to be able to KO one wall at a time: n = 1
Therefore, t for the wallbreaker rating is 1408 / (1 × (170 + 170)) = 4.14
Me and MDS will have more on the solution to adapt BSR for wallbreakers soon!
 

Bughouse

Like ships in the night, you're passing me by
is a Site Content Manageris a Forum Moderator Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnus
I certainly agree about avoiding magic numbers. Not sure my question came through clearly though.

In the past, Mew's 100/100 attacking stat line did not come through as having equal PS and SS. But I thought that the basis of the same raw attacking stat (and obviously the same Speed, since it's for the same mon) resulting in a different sweepiness rating was a comparison of the availability of Atk and SpA (along with Speed) in other mons in the metagame. i.e. Mew's 100/100/100 stat line resulted in higher SS than PS because a stat line as good as 100 Spe / 100 SpA was somewhat rarer to come by in the metagame than a stat line of 100 Spe / 100 Atk. This relative availability, I thought, was what gave Mew a better sweepiness rating for special attacking than physical attacking.

Now however, for Mew, the way that it is determining whether 100 Atk or 100 SpA is better (since they are the same raw stat) is based on whether the metagame has better special tanks or physical tanks. And in fact in order to do so, it has to compare PT to ST, meaning that in the extreme case of lets say a mon having 255 Atk and 1 SpA, the PS rating will be affected based on increasing the SpD of every mon in the meta by 5 point, since this impacts aRST. That thought puzzle of what happens if you take the logic to the extreme I think shows why considering the aRST to the PS rating or the aRPT to the SS rating is a bit wrongheaded and why PS and SS should still be based on comparisons to other attackers, and not to the metagame's physical/special tilt in terms of bulk. I kinda get why the defensive bulk biases should factor into mixed sweepiness, but it feels wrong for them to impact PS or SS at all.

I hope that makes more sense now.
 

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
The inequality between PS and SS values has nothing to do with the Atk100 and SpA100 calibrations. As soon as we fix the problem quziel brought up, all PS and SS values in the new model would be identical to what they are in the old model. This is due to the calculator standardizing PS and SS to a mean of 100 and standard deviation of 50, so whether I multiply the raw values by 1, 1.01238, or by a million, they will ultimately end up with a standard deviation of 50 and the final numbers will be exactly the same.

It seems like you agree that MxA100 should factor in tankiness so let's start with that. The reason why MxA100 needs to do this is straightforward - mixed attackers owe their existence to the bonus damage they can get by targeting the opponent's lower defense. Otherwise, say in a metagame where all mons have the same physical and special tankiness, there would be no reason to ever go mixed. MxA100 calculates the bonus by simulating an attack against the lower defense of every mon, and by doing so, is inherently calibrating itself to aRPT and aRST.

So with that in mind, the reason why Sweepiness also needs the calibration should be clear. S needs to find the highest of Atk100, SpA100 and MxA100. With MxA100 being calibrated to tankiness while Atk100 and SpA100 are not, we would be comparing different things and the operation becomes mathematically invalid. I've taken a slightly unusual perspective to explain this but hopefully it shows why the calibration step is necessary.

One last thing - you keep bringing up the concern about Atk100 taking in aRST, and SpA100 taking in aRPT. There's actually no purpose to the AVERAGE{aRPT, aRST} part of the formulas other than aesthetic reasons. It's only there to give them lv100 stat-like numbers so they no longer show values between 0.002 to 0.01 which is very hard to read. Taking it out will not make any difference to the final S, PS, SS, MS or BSR numbers, as per the standardization reason I discussed earlier.

Atk100 = (Atk × 2 + 36) × AVERAGE{aRPT, aRST} / aRPT
SpA100 = (SpA × 2 + 36) × AVERAGE{aRPT, aRST} / aRST
MxA100 = sqrt{Atk100 × SpA100} × AVERAGE{aRPT, aRST} / aLRT

base prettifier calibration
 

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
We should wrap this up soon so here's a last minute fix to the sweepiness problem quziel mentioned. The old formula was

Old Formula.png


which is roughly equivalent to, and will be changed to:

New Formula.png

T = average tankiness * (average attack * base power * modifier * expected number of targets of a sweeper * 0.777) ^ -1

The new formula stops sweepiness from blowing up when the input stats are extremely high or low. For what the value of T should be, I think we can discuss after CAP 29 is done. Meanwhile I did a quick calculation by taking the top 50 mons in Snake Draft (November) and with the settings at base power = 95, modifier = 1.3, and expected targets = 2. T comes out to be 1.496. There's a concern though that sweepiness is a rating for sweepers and doesn't account for wallbreakers very well. Any mon with high attack and low speed would be rated lower than what they deserve. Me and MDS decided a quick hack is to lower the expected targets value to 1.5 in order to hit a middle ground between wallbreaker and sweeper. It can be thought of as a midspeed attacker that would typically get around 1 or 2 (i.e. 1.5) KOs per battle. With n=1.5 and all the other settings the same, the value of T comes to 1.995 which will be used for CAP 29. While currently it's a one size fits all, we can in future CAPs give the TL an option to decide what T is to better suit the mon we're building.

Here's a graph comparing the old and new formulas with different speed factors, and base 100 attack. Black is the old formula, green is the new. Red uses the sweeper T value and blue uses the T for wallbreaker. Notice the wallbreaker plot (blue) is a lot less affected by speed than the sweeper plot (red). And the middle ground (green) sits roughly in between.
Sweepiness Graph.png

You can see there's not a lot of change between the old (black) and new (green), and the difference will be even less so once they're standardized. What we've done though is simplify the formula so it behaves better in extreme cases. If there are no objections to the change I'll assume we're okay with it and will go ahead and update the calculator for CAP 29. Any questions / concerns etc please bring them up now as we need to wrap up soon!
 

Bughouse

Like ships in the night, you're passing me by
is a Site Content Manageris a Forum Moderator Alumnusis a CAP Contributor Alumnusis a Tiering Contributor Alumnusis a Contributor Alumnus
Since I’ve been the person asking the most questions ha, just chiming in to say I think I’m good.

nice work!
 

MrDollSteak

CAP 1v1 me IRL
is a Community Contributoris an Artist Alumnusis a Forum Moderator Alumnus
We should wrap this up soon so here's a last minute fix to the sweepiness problem quziel mentioned. The old formula was

View attachment 308078

which is roughly equivalent to, and will be changed to:

View attachment 308079
T = average tankiness * (average attack * base power * modifier * expected number of targets of a sweeper * 0.777) ^ -1

The new formula stops sweepiness from blowing up when the input stats are extremely high or low. For what the value of T should be, I think we can discuss after CAP 29 is done. Meanwhile I did a quick calculation by taking the top 50 mons in Snake Draft (November) and with the settings at base power = 95, modifier = 1.3, and expected targets = 2. T comes out to be 1.496. There's a concern though that sweepiness is a rating for sweepers and doesn't account for wallbreakers very well. Any mon with high attack and low speed would be rated lower than what they deserve. Me and MDS decided a quick hack is to lower the expected targets value to 1.5 in order to hit a middle ground between wallbreaker and sweeper. It can be thought of as a midspeed attacker that would typically get around 1 or 2 (i.e. 1.5) KOs per battle. With n=1.5 and all the other settings the same, the value of T comes to 1.995 which will be used for CAP 29. While currently it's a one size fits all, we can in future CAPs give the TL an option to decide what T is to better suit the mon we're building.

Here's a graph comparing the old and new formulas with different speed factors, and base 100 attack. Black is the old formula, green is the new. Red uses the sweeper T value and blue uses the T for wallbreaker. Notice the wallbreaker plot (blue) is a lot less affected by speed than the sweeper plot (red). And the middle ground (green) sits roughly in between.
View attachment 308082
You can see there's not a lot of change between the old (black) and new (green), and the difference will be even less so once they're standardized. What we've done though is simplify the formula so it behaves better in extreme cases. If there are no objections to the change I'll assume we're okay with it and will go ahead and update the calculator for CAP 29. Any questions / concerns etc please bring them up now as we need to wrap up soon!
Excellent write up Tomo! These values all look really good! For some extra context to anyone else interested, we first did some manual testing of overall averages to determine T as the average number of turns that an average base power move (80) coming from the average combined Attack and Sp.Atk would do against the average Defense and Sp.Def and input that into the Showdown Damage calculator. This gave us a value of roughly 3 that we wanted to aim for, and as Tomo explained, divided by 2 as sweepers need to take out at least two pokemon to be considered sweepers which would then give us the Sweepiness value of 1.5. This helped to set up the rough values that Tomo then used to calculate properly, and automate using a proper calculator within Excel. At some stage we simulated the average attack of walls which gave us a wallbreaker turn value of more like 4 than 3 which gave some arguably better results with Glastier and Spectrier ending up on the same BSR when using the wallbreaker T value. Overall I think having it automated is better than eyeballing the numbers, and approximately 3 for wallbreakers still produces good results!
Just something to keep in mind for TLs in case they want to input some manual numbers or change their target list.
 

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
Hi all I'm in the middle of updating the spreadsheet and another idea came up - this will be the last one I promise!! I was struck as to why we keep standardizing to 100 and 50 SD, a scale most of us aren't even familiar with. Why not standardize to pokemon BST instead? It's something we all recognize and will help make BSR numbers hell of a lot easier to read.

Mean & SD of all mons:
Base Stats Mean SD.png

Going by these figures, I decided to standardize sweepiness/tankiness to mean=75 and SD=30, and BSR to mean=420 and SD=120.
Color Map SweepTank.png
Color Map BSR.png

Sweep/tank numbers should now look very much like a pokemon base attack/defense, and BSR numbers should look very much like BST. Mew for example, base 100 across the board with 600 BST comes to roughly 600 BSR and 100 sweepiness & tankiness (instead of 390 BSR and 170 S/T like it used to have). Here's some of the new numbers:
New Standardization.png

Just to be clear, we're only making BSR numbers align more with BST. We're not by any means trying to make BSR behave like BST. In cases where BSR would rate differently to BST it will naturally deviate from the BST value. See the chart above - an efficient stat dumper like Alakazam will have its BSR shoot up way higher than its BST, whereas a mon with poor stat distribution like Diancie has a much lower BSR than BST. Barring exceptional cases, a typical mon's ratings should be expected to look quite similar to its base stats.

The only way this affects the stats stage is that bigger numbers will be shown. Instead of Miasmaw's BSR limit set to 350, it would be set to something easier to visualize like 570 -- which we can now gauge is around the power of a UB or Tapu. And it'll still be rated as yellow / "excellent."

Please post here if you object to this. It's a purely aesthetic change which does not affect how BSR fundamentally works. I just thought it'd be nice to have BSR numbers read the same way as base stats and BST.
 
I like this last proposal.
Being able to set the BSR limits to a value close to the BST of a mon with similar Stat distribution or overall stats looks to be much easier, than having to figure out the BSR of those mons before. Especially when discussing stat limits, this might come in handy and make the process more approachable.
 

MrDollSteak

CAP 1v1 me IRL
is a Community Contributoris an Artist Alumnusis a Forum Moderator Alumnus
Echoing Amamama's support for this! I think the examples you've shown demonstrate how effective it is! In the case of balanced Pokemon like Mew the BSR to BST ratio is almost perfect, whereas with Pokemon like Diancie and Alakazam that have some rather extreme distributions we see an appropriate variation. It is clear from looking at the demonstrated options that HP and Speed factor fairly extremely in the overall BSR calculation which I think is more than appropriate. Being able to set limits that look similar to overall stats helps too, as saying something like PS limit of 135 is easier to rationalise as meaning a mon with approximately 130 Attack with decent speed.
 

QxC4eva

is an Artistis a Forum Moderatoris a Community Contributor
Moderator
Thank you all for sharing your insights! The proposed changes have been implemented in the spreadsheet which can be found here. For reference, let's call this update 'BSR 4.0' as it is distinct enough from BSR 3.0 (the version CAP has been using up to now). BSR 4.0 will be used starting from CAP 29.

BSR 4.0 summary
Code:
Average Raw Physical Tankiness [aRPT] = 53736.6
Average Raw Special Tankiness [aRST]  = 52437.9
Average lower Raw Tankiness [aLRT]    = 47836.5
Turn value [T] = 1.99517
Speed Factor [SF] = PERCENTILE{Spe}  (see graph below)
Speed Factor.png

Code:
Sweepiness [S]           = STANDARDIZE{MAX{(Atk×2+36) / aRPT, (SpA×2+36) / aRST, SQRT{(Atk×2+36) × (SpA×2+36)} / aLRT} × (aRPT+aRST) / 2 × (SF+T) / (1-SF+T)}
Physical Sweepiness [PS] = STANDARDIZE{(Atk×2+36) × (SF+T) / (1-SF+T)}
Special Sweepiness [SS]  = STANDARDIZE{(SpA×2+36) × (SF+T) / (1-SF+T)}
Mixed Sweepiness [MS]    = STANDARDIZE{SQRT{(Atk×2+36) × (SpA×2+36)} / aLRT × (aRPT+aRST) / 2 × (SF+T) / (1-SF+T)}
Code:
Physical Tankiness [PT]  = STANDARDIZE{(HP × 2 + 141) × (Def × 2 + 36)}
Special Tankiness [ST]   = STANDARDIZE{(HP × 2 + 141) × (SpD × 2 + 36)}
Code:
Base Stat Rating [BSR] = STANDARDIZE{PT + ST + S × 2}
BSR is standardized to a normal distribution mean of 420 and standard deviation of 120. Sweepiness and tankiness are standardized to a mean of 75 and standard deviation 30. The data points are then classified into half-SD tiers with the following ratings:
Color Map BSR.png
Color Map SweepTank.png



Results
List of mons by change in BSR - in this table BSR 4.0 has been standardized to the old settings (mean=200, SD=100) so it can be compared directly to BSR 3.0.
Code:
+-----------------------+-------------------------+-------+-------+---------+
|        POKEMON        |       BASE STATS        |  BSR  |  BSR  |   BSR   |
|                       |  HP/Atk/Def/SpA/SpD/Spe |  3.0  |  4.0  |  Diff.  |
+-----------------------+-------------------------+-------+-------+---------+
|  Darmanitan-Galar-Zen | 105/160/ 55/ 30/ 55/135 | 312.4 | 372.2 | +59.733 |
|                  Abra |  25/ 20/ 15/105/ 55/ 90 |  95.3 | 149.9 | +54.559 |
|               Kadabra |  40/ 35/ 30/120/ 70/105 | 172.0 | 226.0 | +54.005 |
|            Darmanitan | 105/140/ 55/ 30/ 55/ 95 | 242.0 | 295.8 | +53.782 |
|      Darmanitan-Galar | 105/140/ 55/ 30/ 55/ 95 | 242.0 | 295.8 | +53.782 |
|              Alakazam |  55/ 50/ 45/135/ 95/120 | 263.1 | 307.2 | +44.105 |
|                  Sawk |  75/125/ 75/ 30/ 75/ 85 | 220.7 | 264.3 | +43.626 |
|           Stonjourner | 100/125/135/ 20/ 20/ 70 | 229.8 | 273.3 | +43.454 |
|             Volkraken | 100/ 45/ 80/135/100/ 95 | 317.5 | 358.0 | +40.592 |
|        Darmanitan-Zen | 105/ 30/105/140/105/ 55 | 288.3 | 327.9 | +39.631 |
|             Hitmonlee |  50/120/ 53/ 35/110/ 87 | 203.8 | 243.0 | +39.212 |
|            Chandelure |  60/ 55/ 90/145/ 90/ 80 | 257.0 | 295.8 | +38.796 |
|               Kartana |  59/181/131/ 59/ 31/109 | 352.0 | 389.0 | +36.992 |
|               Sneasel |  55/ 95/ 55/ 35/ 75/115 | 183.6 | 220.3 | +36.688 |
|               Weavile |  70/120/ 65/ 45/ 85/125 | 263.4 | 299.5 | +36.146 |
|                Gastly |  30/ 35/ 30/100/ 35/ 80 |  92.9 | 128.9 | +35.989 |
|               Haunter |  45/ 50/ 45/115/ 55/ 95 | 170.4 | 205.3 | +34.917 |
|             Heracross |  80/125/ 75/ 40/ 95/ 85 | 252.6 | 286.9 | +34.293 |
|                Mollux |  95/ 45/ 83/131/105/ 76 | 286.6 | 320.9 | +34.291 |
|             Excadrill | 110/135/ 60/ 50/ 65/ 88 | 262.2 | 294.7 | +32.437 |
|               Tactite |  70/ 40/ 65/100/ 65/ 95 | 192.7 | 225.1 | +32.407 |
|                  Jynx |  65/ 50/ 35/115/ 95/ 95 | 211.9 | 244.1 | +32.158 |
|              Nihilego | 109/ 53/ 47/127/131/103 | 339.0 | 369.4 | +30.400 |
|              Pajantom |  84/133/ 71/ 51/111/101 | 314.7 | 345.0 | +30.290 |
|             Plasmanta |  60/ 57/119/131/ 98/100 | 310.5 | 340.7 | +30.159 |
|             Passimian | 100/120/ 90/ 40/ 60/ 80 | 246.0 | 276.0 | +30.072 |
|                Tauros |  75/100/ 95/ 40/ 70/110 | 243.8 | 273.8 | +30.017 |
|               Kingler |  55/130/115/ 50/ 50/ 75 | 215.3 | 244.9 | +29.554 |
|             Volcarona |  85/ 60/ 65/135/105/100 | 312.2 | 341.6 | +29.397 |
|               Haxorus |  76/147/ 90/ 60/ 70/ 97 | 300.9 | 330.0 | +29.066 |
|               Fraxure |  66/117/ 70/ 40/ 50/ 67 | 164.3 | 193.3 | +29.029 |
|                Durant |  58/109/112/ 48/ 48/109 | 236.3 | 264.0 | +27.679 |
|                Krabby |  30/105/ 90/ 25/ 25/ 50 |  92.1 | 119.6 | +27.445 |
|            Togedemaru |  65/ 98/ 63/ 40/ 73/ 96 | 192.7 | 220.1 | +27.387 |
|             Spectrier | 100/ 65/ 60/145/ 80/130 | 348.7 | 375.8 | +27.135 |
|               Duosion |  65/ 40/ 50/125/ 60/ 30 | 118.5 | 145.4 | +26.895 |
|             Heliolisk |  62/ 55/ 52/109/ 94/109 | 236.3 | 263.0 | +26.697 |
|               Dugtrio |  35/100/ 50/ 50/ 70/120 | 179.8 | 206.5 | +26.652 |
|            Hitmonchan |  50/105/ 79/ 35/110/ 76 | 197.6 | 224.0 | +26.396 |
|                Gengar |  60/ 65/ 60/130/ 75/110 | 265.5 | 291.7 | +26.278 |
|              Buzzwole | 107/139/139/ 53/ 53/ 79 | 322.7 | 349.0 | +26.265 |
|             Stratagem |  90/ 60/ 65/120/ 70/130 | 289.0 | 315.2 | +26.152 |
|              Mr. Mime |  40/ 45/ 65/100/120/ 90 | 198.2 | 224.1 | +25.929 |
|             Xurkitree |  83/ 89/ 71/173/ 71/ 83 | 310.7 | 336.5 | +25.720 |
|                Rebble |  45/ 25/ 65/ 75/ 55/ 80 | 113.5 | 138.6 | +25.092 |
|         Dugtrio-Alola |  35/100/ 60/ 50/ 70/110 | 181.4 | 206.5 | +25.078 |
|                Espeon |  65/ 65/ 60/130/ 95/110 | 287.3 | 312.1 | +24.828 |
|              Togekiss |  85/ 50/ 95/120/115/ 80 | 293.4 | 318.1 | +24.731 |
|         Lycanroc-Dusk |  75/117/ 65/ 55/ 65/110 | 249.0 | 273.7 | +24.716 |
<<<<<<<<<<<<<<<<<<<<<<<<<< (TRUNCATED 700 ENTRIES) >>>>>>>>>>>>>>>>>>>>>>>>>>
|             Marshadow |  90/125/ 80/ 90/ 90/125 | 364.7 | 348.2 | -16.538 |
|                 Lugia | 106/ 90/130/ 90/154/110 | 452.1 | 435.4 | -16.719 |
|                Wynaut |  95/ 23/ 48/ 23/ 48/ 23 |  84.7 |  67.7 | -17.049 |
|              Aurumoth | 110/120/ 99/117/ 60/ 94 | 357.1 | 340.0 | -17.090 |
|               Miasmaw |  85/135/ 60/115/ 85/ 92 | 326.3 | 309.0 | -17.285 |
|               Carbink |  50/ 50/150/ 50/150/ 50 | 233.5 | 215.7 | -17.757 |
|               Zeraora |  88/112/ 75/102/ 80/143 | 350.1 | 332.0 | -18.100 |
|             Registeel |  80/ 75/150/ 75/150/ 50 | 321.1 | 302.8 | -18.311 |
|             Hydreigon |  92/105/ 90/125/ 90/ 98 | 361.5 | 342.6 | -18.922 |
|               Bronzor |  57/ 24/ 86/ 24/ 86/ 23 | 114.3 |  95.4 | -18.945 |
|               Toxapex |  50/ 63/152/ 53/142/ 35 | 228.6 | 209.4 | -19.252 |
|              Genesect |  71/120/ 95/120/ 95/ 99 | 354.7 | 335.3 | -19.391 |
|               Cosmoem |  43/ 29/131/ 29/131/ 37 | 166.2 | 146.4 | -19.796 |
|               Syclant |  70/116/ 70/114/ 64/121 | 325.7 | 305.6 | -20.121 |
|              Giratina | 150/100/120/100/120/ 90 | 471.2 | 450.3 | -20.963 |
|          Kyurem-White | 125/120/ 90/170/100/ 95 | 476.9 | 455.9 | -21.088 |
|             Dragapult |  88/120/ 75/100/ 75/142 | 354.0 | 332.8 | -21.222 |
|              Landorus |  89/125/ 90/115/ 80/101 | 368.7 | 346.8 | -21.943 |
|             Wobbuffet | 190/ 33/ 58/ 33/ 58/ 33 | 204.7 | 182.2 | -22.526 |
|                 Ho-Oh | 106/130/ 90/110/154/ 90 | 440.3 | 417.5 | -22.795 |
|       Giratina-Origin | 150/120/100/120/100/ 90 | 456.3 | 433.3 | -23.037 |
|             Salamence |  95/135/ 80/110/ 80/100 | 368.2 | 344.7 | -23.489 |
|              Tornadus |  79/115/ 70/125/ 80/111 | 354.9 | 331.0 | -23.921 |
|             Thundurus |  79/115/ 70/125/ 80/111 | 354.9 | 331.0 | -23.921 |
|              Reshiram | 100/120/100/150/120/ 90 | 435.6 | 410.7 | -24.879 |
|                Dialga | 100/120/120/150/100/ 90 | 435.7 | 410.8 | -24.886 |
|                Kyurem | 125/130/ 90/130/ 90/ 95 | 429.7 | 403.7 | -25.958 |
|               Shuckle |  20/ 10/230/ 10/230/  5 | 213.0 | 186.6 | -26.451 |
|                Zekrom | 100/150/120/120/100/ 90 | 435.8 | 409.2 | -26.644 |
|                 Azelf |  75/125/ 70/125/ 70/115 | 358.4 | 330.8 | -27.630 |
|              Archeops |  75/140/ 65/112/ 65/110 | 346.6 | 318.3 | -28.288 |
|          Kyurem-Black | 125/170/100/120/ 90/ 95 | 477.2 | 448.7 | -28.482 |
|                Lunala | 137/113/ 89/137/107/ 97 | 462.5 | 433.4 | -29.080 |
|              Solgaleo | 137/137/107/113/ 89/ 97 | 462.7 | 433.5 | -29.167 |
|               Xerneas | 126/131/ 95/131/ 98/ 99 | 460.4 | 429.6 | -30.734 |
|               Yveltal | 126/131/ 95/131/ 98/ 99 | 460.4 | 429.6 | -30.734 |
|                Mewtwo | 106/110/ 90/154/ 90/130 | 470.7 | 439.0 | -31.778 |
|                Palkia |  90/120/100/150/120/100 | 451.7 | 418.4 | -33.290 |
|           Blacephalon |  53/127/ 53/151/ 79/107 | 353.5 | 319.1 | -34.407 |
|              Rayquaza | 105/150/ 90/150/ 90/ 95 | 448.6 | 413.8 | -34.727 |
|             Pheromosa |  71/137/ 37/137/ 37/151 | 352.3 | 310.5 | -41.778 |
+-----------------------+-------------------------+-------+-------+---------+
List of mons by BSR 4.0
Code:
+-----------------------+-------------------------+-----+-------+-------+------+------+------+
|        POKEMON        |       BASE STATS        | BST |  BSR  |  BSR  | BST  | BSR3 | BSR4 |
|                       |  HP/Atk/Def/SpA/SpD/Spe |     |  3.0  |  4.0  | rank | rank | rank |
+-----------------------+-------------------------+-----+-------+-------+------+------+------+
|        Zacian-Crowned |  92/170/115/ 80/115/148 | 720 | 495.9 | 772.3 |    1 |    1 |    1 |
|             Eternatus | 140/ 85/ 95/145/ 95/130 | 690 | 480.6 | 751.8 |    5 |    3 |    2 |
|     Zamazenta-Crowned |  92/130/145/ 80/145/128 | 720 | 482.7 | 746.2 |    1 |    2 |    3 |
|             Regigigas | 110/160/110/ 80/110/100 | 670 | 451.7 | 728.7 |   24 |   16 |    4 |
|  Calyrex-Shadow-Rider | 100/ 85/ 80/165/100/150 | 680 | 454.1 | 727.7 |    6 |   13 |    5 |
|          Kyurem-White | 125/120/ 90/170/100/ 95 | 700 | 476.9 | 727.0 |    3 |    5 |    6 |
|              Giratina | 150/100/120/100/120/ 90 | 680 | 471.2 | 720.3 |    6 |    6 |    7 |
|          Kyurem-Black | 125/170/100/120/ 90/ 95 | 700 | 477.2 | 718.4 |    3 |    4 |    8 |
|                Mewtwo | 106/110/ 90/154/ 90/130 | 680 | 470.7 | 706.7 |    6 |    7 |    9 |
|                 Lugia | 106/ 90/130/ 90/154/110 | 680 | 452.1 | 702.5 |    6 |   14 |   10 |
|              Solgaleo | 137/137/107/113/ 89/ 97 | 680 | 462.7 | 700.2 |    6 |    8 |   11 |
|                Lunala | 137/113/ 89/137/107/ 97 | 680 | 462.5 | 700.0 |    6 |    9 |   12 |
|       Giratina-Origin | 150/120/100/120/100/ 90 | 680 | 456.3 | 699.9 |    6 |   12 |   13 |
|               Xerneas | 126/131/ 95/131/ 98/ 99 | 680 | 460.4 | 695.6 |    6 |   10 |   14 |
|               Yveltal | 126/131/ 95/131/ 98/ 99 | 680 | 460.4 | 695.6 |    6 |   10 |   14 |
|                Kyogre | 100/100/ 90/150/140/ 90 | 670 | 426.4 | 684.5 |   24 |   26 |   16 |
|                Zacian |  92/130/115/ 80/115/138 | 670 | 426.9 | 683.4 |   24 |   23 |   17 |
|             Zamazenta |  92/130/115/ 80/115/138 | 670 | 426.9 | 683.4 |   24 |   23 |   17 |
|                Palkia |  90/120/100/150/120/100 | 680 | 451.7 | 682.1 |    6 |   15 |   19 |
|                 Ho-Oh | 106/130/ 90/110/154/ 90 | 680 | 440.3 | 681.0 |    6 |   18 |   20 |
|               Groudon | 100/150/140/100/ 90/ 90 | 670 | 426.8 | 677.4 |   24 |   25 |   21 |
|              Rayquaza | 105/150/ 90/150/ 90/ 95 | 680 | 448.6 | 676.6 |    6 |   17 |   22 |
|                Dialga | 100/120/120/150/100/ 90 | 680 | 435.7 | 673.0 |    6 |   20 |   23 |
|              Reshiram | 100/120/100/150/120/ 90 | 680 | 435.6 | 672.9 |    6 |   21 |   24 |
|                Zekrom | 100/150/120/120/100/ 90 | 680 | 435.8 | 671.0 |    6 |   19 |   25 |
|   Necrozma-Dawn-Wings |  97/113/109/157/127/ 77 | 680 | 413.7 | 667.9 |    6 |   28 |   26 |
|     Calyrex-Ice-Rider | 100/165/150/ 85/130/ 50 | 680 | 388.3 | 664.8 |    6 |   29 |   27 |
|                Kyurem | 125/130/ 90/130/ 90/ 95 | 660 | 429.7 | 664.5 |   29 |   22 |   28 |
|    Necrozma-Dusk-Mane |  97/157/127/113/109/ 77 | 680 | 413.9 | 661.0 |    6 |   27 |   29 |
|               Kartana |  59/181/131/ 59/ 31/109 | 570 | 352.0 | 646.8 |   90 |   53 |   30 |
|             Spectrier | 100/ 65/ 60/145/ 80/130 | 580 | 348.7 | 631.0 |   61 |   56 |   31 |
|  Darmanitan-Galar-Zen | 105/160/ 55/ 30/ 55/135 | 540 | 312.4 | 626.6 |  125 |  106 |   32 |
|                Zarude | 105/120/105/ 70/ 95/105 | 600 | 368.5 | 625.9 |   31 |   33 |   33 |
|              Nihilego | 109/ 53/ 47/127/131/103 | 570 | 339.0 | 623.2 |   90 |   68 |   34 |
|              Garchomp | 108/130/ 95/ 80/ 85/102 | 600 | 371.2 | 622.7 |   31 |   31 |   35 |
|             Cresselia | 120/ 70/120/ 75/130/ 85 | 600 | 376.3 | 614.3 |   31 |   30 |   36 |
|                Latios |  80/ 90/ 80/130/110/110 | 600 | 365.5 | 610.5 |   31 |   35 |   37 |
|                Keldeo |  91/ 72/ 90/129/ 90/108 | 580 | 345.1 | 610.1 |   61 |   60 |   38 |
|             Volkraken | 100/ 45/ 80/135/100/ 95 | 555 | 317.5 | 609.7 |  111 |  100 |   39 |
|                Jumbao |  92/ 63/ 97/124/104/ 96 | 576 | 335.2 | 604.5 |   88 |   76 |   40 |
|             Terrakion |  91/129/ 90/ 72/ 90/108 | 580 | 345.3 | 602.7 |   61 |   59 |   41 |
|               Zygarde | 108/100/121/ 81/ 95/ 95 | 600 | 363.3 | 600.0 |   31 |   41 |   42 |
|                Latias |  80/ 80/ 90/110/130/110 | 600 | 355.0 | 599.3 |   31 |   46 |   43 |
|                   Mew | 100/100/100/100/100/100 | 600 | 363.4 | 599.2 |   31 |   37 |   44 |
|                Celebi | 100/100/100/100/100/100 | 600 | 363.4 | 599.2 |   31 |   37 |   44 |
|               Jirachi | 100/100/100/100/100/100 | 600 | 363.4 | 599.2 |   31 |   37 |   44 |
|               Victini | 100/100/100/100/100/100 | 600 | 363.4 | 599.2 |   31 |   37 |   44 |
|              Buzzwole | 107/139/139/ 53/ 53/ 79 | 570 | 322.7 | 598.8 |   90 |   92 |   48 |
|             Marshadow |  90/125/ 80/ 90/ 90/125 | 600 | 364.7 | 597.8 |   31 |   36 |   49 |
|              Landorus |  89/125/ 90/115/ 80/101 | 600 | 368.7 | 596.2 |   31 |   32 |   50 |
|              Pajantom |  84/133/ 71/ 51/111/101 | 551 | 314.7 | 593.9 |  116 |  102 |   51 |
|               Blissey | 255/ 10/ 10/ 75/135/ 55 | 540 | 338.6 | 593.7 |  125 |   69 |   52 |
|             Salamence |  95/135/ 80/110/ 80/100 | 600 | 368.2 | 593.6 |   31 |   34 |   53 |
|             Hydreigon |  92/105/ 90/125/ 90/ 98 | 600 | 361.5 | 591.1 |   31 |   42 |   54 |
|             Volcarona |  85/ 60/ 65/135/105/100 | 550 | 312.2 | 589.9 |  117 |  107 |   55 |
|             Plasmanta |  60/ 57/119/131/ 98/100 | 565 | 310.5 | 588.8 |  107 |  110 |   56 |
|              Aurumoth | 110/120/ 99/117/ 60/ 94 | 600 | 357.1 | 588.0 |   31 |   44 |   57 |
|      Landorus-Therian |  89/145/ 90/105/ 80/ 91 | 600 | 355.1 | 587.5 |   31 |   45 |   58 |
|               Heatran |  91/ 90/106/130/106/ 77 | 600 | 339.4 | 585.3 |   31 |   67 |   59 |
|     Thundurus-Therian |  79/105/ 70/145/ 80/101 | 580 | 351.3 | 585.3 |   61 |   54 |   60 |
|              Melmetal | 135/143/143/ 80/ 65/ 34 | 600 | 330.0 | 583.8 |   31 |   80 |   61 |
|             Xurkitree |  83/ 89/ 71/173/ 71/ 83 | 570 | 310.7 | 583.8 |   90 |  109 |   62 |
|                Raikou |  90/ 85/ 75/115/100/115 | 580 | 343.1 | 582.7 |   61 |   61 |   63 |
|                Zapdos |  90/ 90/ 85/125/ 90/100 | 580 | 342.2 | 582.6 |   61 |   62 |   64 |
|              Genesect |  71/120/ 95/120/ 95/ 99 | 600 | 354.7 | 582.3 |   31 |   49 |   65 |
|          Zapdos-Galar |  90/125/ 90/ 85/ 90/100 | 580 | 341.9 | 581.3 |   61 |   64 |   66 |
|        Articuno-Galar |  90/ 85/ 85/125/100/ 95 | 580 | 335.3 | 581.3 |   61 |   75 |   67 |
|             Dragapult |  88/120/ 75/100/ 75/142 | 600 | 354.0 | 579.3 |   31 |   50 |   68 |
|               Zeraora |  88/112/ 75/102/ 80/143 | 600 | 350.1 | 578.4 |   31 |   55 |   69 |
|              Tornadus |  79/115/ 70/125/ 80/111 | 580 | 354.9 | 577.2 |   61 |   47 |   70 |
|             Thundurus |  79/115/ 70/125/ 80/111 | 580 | 354.9 | 577.2 |   61 |   47 |   70 |
|             Colossoil | 133/122/ 72/ 71/ 72/ 95 | 565 | 325.8 | 577.1 |  107 |   85 |   72 |
|                 Azelf |  75/125/ 70/125/ 70/115 | 580 | 358.4 | 577.0 |   61 |   43 |   73 |
|                 Entei | 115/115/ 85/ 90/ 75/100 | 580 | 345.8 | 576.6 |   61 |   58 |   74 |
|               Urshifu | 100/130/100/ 63/ 60/ 97 | 550 | 312.5 | 576.1 |  117 |  104 |   75 |
|  Urshifu-Rapid-Strike | 100/130/100/ 63/ 60/ 97 | 550 | 312.5 | 576.1 |  117 |  104 |   75 |
|               Haxorus |  76/147/ 90/ 60/ 70/ 97 | 540 | 300.9 | 576.0 |  125 |  121 |   77 |
|            Kerfluffle |  84/ 78/ 86/115/ 88/119 | 570 | 328.3 | 575.6 |   90 |   83 |   78 |
|                Goodra |  90/100/ 70/110/150/ 80 | 600 | 342.1 | 575.5 |   31 |   63 |   79 |
|              Cobalion |  91/ 90/129/ 90/ 72/108 | 580 | 337.7 | 574.1 |   61 |   71 |   80 |
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (TRUNCATED 700 ENTRIES) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|               Azurill |  50/ 20/ 40/ 20/ 40/ 20 | 190 |  33.4 | 203.3 |  787 |  778 |  781 |
|                 Ralts |  28/ 25/ 25/ 45/ 35/ 40 | 198 |  23.0 | 202.8 |  785 |  785 |  782 |
|             Igglybuff |  90/ 30/ 15/ 40/ 20/ 15 | 210 |  30.6 | 201.6 |  776 |  781 |  783 |
|                Cosmog |  43/ 29/ 31/ 29/ 31/ 37 | 200 |  26.9 | 199.6 |  782 |  782 |  784 |
|                  Snom |  30/ 25/ 35/ 45/ 30/ 20 | 185 |  23.1 | 198.9 |  788 |  783 |  785 |
|              Caterpie |  45/ 30/ 35/ 20/ 20/ 45 | 195 |  20.8 | 194.1 |  786 |  786 |  786 |
|              Magikarp |  20/ 10/ 55/ 15/ 20/ 80 | 200 |   8.6 | 190.3 |  782 |  789 |  787 |
|                Feebas |  20/ 15/ 20/ 10/ 55/ 80 | 200 |   8.5 | 190.2 |  782 |  790 |  788 |
|               Blipbug |  25/ 20/ 20/ 25/ 45/ 45 | 180 |  12.7 | 185.0 |  789 |  787 |  789 |
|            Wishiwashi |  45/ 20/ 20/ 25/ 25/ 40 | 175 |   9.9 | 180.4 |  790 |  788 |  790 |
+-----------------------+-------------------------+-----+-------+-------+------+------+------+
List of mons by Sweepiness
Code:
+-----------------------+-------------+-------+
|        POKEMON        | Atk/SpA/Spe |   S   |
+-----------------------+-------------+-------+
|        Zacian-Crowned | 170/ 80/148 | 171.8 |
|  Calyrex-Shadow-Rider |  85/165/150 | 171.6 |
|               Kartana | 181/ 59/109 | 169.8 |
|  Darmanitan-Galar-Zen | 160/ 30/135 | 161.8 |
|             Pheromosa | 137/137/151 | 159.8 |
|                Mewtwo | 110/154/130 | 159.4 |
|             Eternatus |  85/145/130 | 151.3 |
|             Spectrier |  65/145/130 | 151.3 |
|          Kyurem-White | 120/170/ 95 | 150.7 |
|           Blacephalon | 127/151/107 | 149.5 |
|              Rayquaza | 150/150/ 95 | 147.7 |
|          Kyurem-Black | 170/120/ 95 | 147.2 |
|             Regigigas | 160/ 80/100 | 145.7 |
|                 Azelf | 125/125/115 | 141.6 |
|                Palkia | 120/150/100 | 141.1 |
|              Alakazam |  50/135/120 | 139.9 |
|             Xurkitree |  89/173/ 83 | 139.5 |
|              Archeops | 140/112/110 | 139.5 |
|     Thundurus-Therian | 105/145/101 | 138.8 |
|                Zacian | 130/ 80/138 | 135.6 |
|             Zamazenta | 130/ 80/138 | 135.6 |
|               Xerneas | 131/131/ 99 | 135.6 |
|               Yveltal | 131/131/ 99 | 135.6 |
|              Tornadus | 115/125/111 | 135.5 |
|             Thundurus | 115/125/111 | 135.5 |
|               Syclant | 116/114/121 | 134.1 |
|     Zamazenta-Crowned | 130/ 80/128 | 133.9 |
|             Naganadel |  73/127/121 | 133.4 |
|               Haxorus | 147/ 60/ 97 | 132.5 |
|                Gengar |  65/130/110 | 131.7 |
|                Espeon |  65/130/110 | 131.7 |
|                Latios |  90/130/110 | 131.7 |
|             Dragapult | 120/100/142 | 131.7 |
|              Inteleon |  85/125/120 | 131.1 |
|                Kyurem | 130/130/ 95 | 130.7 |
|                Kyogre | 100/150/ 90 | 130.2 |
|                Dialga | 120/150/ 90 | 130.2 |
|              Reshiram | 120/150/ 90 | 130.2 |
|                Zekrom | 150/120/ 90 | 129.3 |
|             Salamence | 135/110/100 | 129.2 |
|           Barraskewda | 123/ 60/136 | 129.2 |
|             Marshadow | 125/ 90/125 | 129.2 |
|               Zeraora | 112/102/143 | 129.1 |
|                Keldeo |  72/129/108 | 129.1 |
|              Landorus | 125/115/101 | 129.1 |
|             Volcarona |  60/135/100 | 128.9 |
|             Stratagem |  60/120/130 | 128.8 |
|              Solgaleo | 137/113/ 97 | 128.6 |
|                Lunala | 113/137/ 97 | 128.6 |
|               Groudon | 150/100/ 90 | 127.1 |
|             Terrakion | 129/ 72/108 | 126.1 |
|              Pajantom | 133/ 51/101 | 125.9 |
|              Genesect | 120/120/ 99 | 125.9 |
|             Plasmanta |  57/131/100 | 125.6 |
|      Landorus-Therian | 145/105/ 91 | 125.6 |
|             Tapu Koko | 115/ 95/130 | 125.5 |
|               Weavile | 120/ 45/125 | 124.8 |
|              Nihilego |  53/127/103 | 124.7 |
|            Darmanitan | 140/ 30/ 95 | 124.4 |
|      Darmanitan-Galar | 140/ 30/ 95 | 124.4 |
|      Tornadus-Therian | 100/110/121 | 124.3 |
|               Zoroark | 105/120/105 | 124.0 |
|              Garchomp | 130/ 80/102 | 124.0 |
|               Miasmaw | 135/115/ 92 | 123.8 |
|             Volkraken |  45/135/ 95 | 123.5 |
|             Regieleki | 100/100/200 | 123.0 |
|   Necrozma-Dawn-Wings | 113/157/ 77 | 122.8 |
|            Kerfluffle |  78/115/119 | 121.9 |
|              Mienshao | 125/ 95/105 | 121.3 |
|                Raikou |  85/115/115 | 120.8 |
|                Zapdos |  90/125/100 | 120.8 |
|             Hydreigon | 105/125/ 98 | 120.8 |
|               Kadabra |  35/120/105 | 120.0 |
|    Necrozma-Dusk-Mane | 157/113/ 77 | 119.9 |
|             Cinderace | 116/ 65/119 | 119.9 |
|               Jolteon |  65/110/130 | 119.8 |
|             Tapu Lele |  85/130/ 95 | 119.6 |
|               Urshifu | 130/ 63/ 97 | 119.3 |
|  Urshifu-Rapid-Strike | 130/ 63/ 97 | 119.3 |
|              Aurumoth | 120/117/ 94 | 119.1 |
<<<<<<<<<<< (TRUNCATED 700 ENTRIES) >>>>>>>>>>>
|                Feebas |  15/ 10/ 80 |  27.6 |
|               Blipbug |  20/ 25/ 45 |  26.6 |
|            Wishiwashi |  20/ 25/ 40 |  25.5 |
|                Marill |  20/ 20/ 40 |  24.3 |
|               Metapod |  20/ 25/ 30 |  24.0 |
|               Bronzor |  24/ 24/ 23 |  23.9 |
|                Wynaut |  23/ 23/ 23 |  23.5 |
|               Azurill |  20/ 20/ 20 |  21.9 |
|               Happiny |   5/ 15/ 30 |  19.0 |
|               Shuckle |  10/ 10/  5 |  17.0 |
+-----------------------+-------------+-------+
List of mons by Mixed Attack (MxA) stat
Code:
+-----------------------+---------+-------+-------+-------+
|        POKEMON        |   Base  | Lv100 | Lv100 | Lv100 |
|                       | Atk/SpA |  Atk  |  SpA  |  MxA  |
+-----------------------+---------+-------+-------+-------+
|              Rayquaza | 150/150 |  336  |  336  | 372.9 |
|          Kyurem-Black | 170/120 |  376  |  276  | 357.5 |
|          Kyurem-White | 120/170 |  276  |  376  | 357.5 |
|       Aegislash-Blade | 140/140 |  316  |  316  | 350.7 |
|     Wishiwashi-School | 140/140 |  316  |  316  | 350.7 |
|           Blacephalon | 127/151 |  290  |  338  | 347.4 |
|             Pheromosa | 137/137 |  310  |  310  | 344.0 |
|                Dialga | 120/150 |  276  |  336  | 338.0 |
|                Palkia | 120/150 |  276  |  336  | 338.0 |
|              Reshiram | 120/150 |  276  |  336  | 338.0 |
|                Zekrom | 150/120 |  336  |  276  | 338.0 |
|    Necrozma-Dusk-Mane | 157/113 |  350  |  262  | 336.1 |
|   Necrozma-Dawn-Wings | 113/157 |  262  |  350  | 336.1 |
|               Xerneas | 131/131 |  298  |  298  | 330.7 |
|               Yveltal | 131/131 |  298  |  298  | 330.7 |
|                Mewtwo | 110/154 |  256  |  344  | 329.3 |
|                Kyurem | 130/130 |  296  |  296  | 328.5 |
|              Archeops | 140/112 |  316  |  260  | 318.1 |
|                 Azelf | 125/125 |  286  |  286  | 317.4 |
|             Xurkitree |  89/173 |  214  |  382  | 317.3 |
|               Miasmaw | 135/115 |  306  |  266  | 316.6 |
|              Solgaleo | 137/113 |  310  |  262  | 316.3 |
|                Lunala | 113/137 |  262  |  310  | 316.3 |
|     Thundurus-Therian | 105/145 |  246  |  326  | 314.3 |
|      Landorus-Therian | 145/105 |  326  |  246  | 314.3 |
|                Kyogre | 100/150 |  236  |  336  | 312.5 |
|               Groudon | 150/100 |  336  |  236  | 312.5 |
|             Salamence | 135/110 |  306  |  256  | 310.6 |
|       Giratina-Origin | 120/120 |  276  |  276  | 306.3 |
|              Genesect | 120/120 |  276  |  276  | 306.3 |
|              Tornadus | 115/125 |  266  |  286  | 306.1 |
|             Thundurus | 115/125 |  266  |  286  | 306.1 |
|              Landorus | 125/115 |  286  |  266  | 306.1 |
|                 Ho-Oh | 130/110 |  296  |  256  | 305.5 |
|             Volcanion | 110/130 |  256  |  296  | 305.5 |
|     Calyrex-Ice-Rider | 165/ 85 |  366  |  206  | 304.7 |
|  Calyrex-Shadow-Rider |  85/165 |  206  |  366  | 304.7 |
|              Aurumoth | 120/117 |  276  |  270  | 302.9 |
|        Zacian-Crowned | 170/ 80 |  376  |  196  | 301.3 |
|               Cursola |  95/145 |  226  |  326  | 301.2 |
|              Necrozma | 107/127 |  250  |  290  | 298.8 |
|             Dragonite | 134/100 |  304  |  236  | 297.3 |
|               Syclant | 116/114 |  268  |  264  | 295.2 |
|              Blaziken | 120/110 |  276  |  256  | 295.0 |
|       Exeggutor-Alola | 105/125 |  246  |  286  | 294.4 |
|             Hydreigon | 105/125 |  246  |  286  | 294.4 |
|             Regigigas | 160/ 80 |  356  |  196  | 293.1 |
|             Metagross | 135/ 95 |  306  |  226  | 291.8 |
|             Tyranitar | 134/ 95 |  304  |  226  | 290.9 |
|               Lucario | 110/115 |  256  |  266  | 289.6 |
|               Zoroark | 105/120 |  246  |  276  | 289.2 |
|               Moltres | 100/125 |  236  |  286  | 288.3 |
|             Eternatus |  85/145 |  206  |  326  | 287.6 |
|               Flareon | 130/ 95 |  296  |  226  | 287.0 |
|              Magearna |  95/130 |  226  |  296  | 287.0 |
|             Hatterene |  90/136 |  216  |  308  | 286.2 |
|             Dragapult | 120/100 |  276  |  236  | 283.2 |
|             Exeggutor |  95/125 |  226  |  286  | 282.1 |
|             Magmortar |  95/125 |  226  |  286  | 282.1 |
|              Mienshao | 125/ 95 |  286  |  226  | 282.1 |
|                Latios |  90/130 |  216  |  296  | 280.6 |
|               Heatran |  90/130 |  216  |  296  | 280.6 |
|            Electivire | 123/ 95 |  282  |  226  | 280.2 |
|              Melmetal | 143/ 80 |  322  |  196  | 278.8 |
|               Zeraora | 112/102 |  260  |  240  | 277.2 |
|              Sharpedo | 120/ 95 |  276  |  226  | 277.2 |
|                Luxray | 120/ 95 |  276  |  226  | 277.2 |
|            Grimmsnarl | 120/ 95 |  276  |  226  | 277.2 |
|             Duraludon |  95/120 |  226  |  276  | 277.2 |
|              Dhelmise | 131/ 86 |  298  |  208  | 276.3 |
|                Zapdos |  90/125 |  216  |  286  | 275.8 |
|             Marshadow | 125/ 90 |  286  |  216  | 275.8 |
|               Kartana | 181/ 59 |  398  |  154  | 274.7 |
|            Toxtricity |  98/114 |  232  |  264  | 274.6 |
|             Tapu Lele |  85/130 |  206  |  296  | 274.0 |
|             Tapu Bulu | 130/ 85 |  296  |  206  | 274.0 |
|             Octillery | 105/105 |  246  |  246  | 273.0 |
|               Mesprit | 105/105 |  246  |  246  | 273.0 |
|              Arcanine | 110/100 |  256  |  236  | 272.8 |
|             Tangrowth | 100/110 |  236  |  256  | 272.8 |
<<<<<<<<<<<<<<<<< (TRUNCATED 700 ENTRIES) >>>>>>>>>>>>>>>>>
|               Metapod |  20/ 25 |   76  |   86  |  89.7 |
|            Wishiwashi |  20/ 25 |   76  |   86  |  89.7 |
|               Blipbug |  20/ 25 |   76  |   86  |  89.7 |
|                Marill |  20/ 20 |   76  |   76  |  84.3 |
|               Azurill |  20/ 20 |   76  |   76  |  84.3 |
|               Chansey |   5/ 35 |   46  |  106  |  77.5 |
|              Magikarp |  10/ 15 |   56  |   66  |  67.5 |
|                Feebas |  15/ 10 |   66  |   56  |  67.5 |
|               Shuckle |  10/ 10 |   56  |   56  |  62.1 |
|               Happiny |   5/ 15 |   46  |   66  |  61.1 |
+-----------------------+---------+-------+-------+-------+
The first graph below compares old BSR 3.0 with new BSR 4.0. Second graph compares them to BST - notice that BSR 4.0 has a better 1:1 trend (due to the new standardization) but also more variance due to being less affected by dump stats.
Graph BSR.png
Graph BST vs BSR.png



What's next
In this thread we've made substantial improvements to the BSR calculations but there are ongoing issues that would need to be addressed in the future. Further improvements include:
  • ratings to better account for slow wallbreakers and fast walls
  • streamlining the defense calculations (we've only looked into streamlining the offenses this PRC)
  • account for EV investments instead of assuming EVs don't exist
  • simplify the Sweep/Tank model
  • revise the sampling pool of mons where the averages are taken
  • improve the accuracy of standardizations
Any comments or questions you can hook me up in PM/discord/voice chat!
As well as that, me and MrDollSteak will be happy to walk anyone through the ins and outs of BSR no matter how much or little you know about it - especially if you're a TL :-)


Versions archive
 
Status
Not open for further replies.

Users Who Are Viewing This Thread (Users: 1, Guests: 0)

Top