A new kind of usage stats

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
I'm working on some new and exciting usage stats. I've just finished parsing some old data as a test -- 2019-12-01 through 2020-02-29. The sample data was anonymized, which means I don't have access to player ratings, so I'm unable to do any smart weighting work (although I have plenty of interesting ideas for that, too!). Despite that limitation, I think what I have so far is super useful. I wanted to share the kind of statistics my new parser is able to generate.

I generate the usual stats. You can tell how often each Pokemon is used. You can tell how often each Pokemon has a move, item, or ability. These are the stats that we already have, so they aren't that interesting. My stats have two advantages:
  1. It took about 70 minutes for me to run the stat generator over 3 months of OU logs using a single thread of execution. I am about to do some optimizations to bring that number down to probably around half of that, and I could easily cut it down a lot further.
  2. It generates more stats than that.
You can get a frequency distribution of every Pokemon's exact speed, taking into account base stats, level, IVs, EVs, nature, and item. This is currently just at the Species level, and it's straightforward to post-process that and calculate a cumulative distribution for the entire tier. You can know that 35% of all Pokemon are 326 Speed or lower (made up number, I haven't run the analysis for that yet).

Most excitingly, though, you can correlate most interesting factors with a Pokemon's move. For every Pokemon's top 20 most used move, you can determine how often that move on that Pokemon is used with every item, every ability, every Pokemon, and in fact, every other move on every Pokemon.

Let me give a couple examples to help explain what this gives you.

The data set contained 13,232,976 teams (so half that many battles, or 6,616,488). My output file is 450 MiB large. For comparison, the current Gen 8 OU chaos stats are 14 MiB. My stats just on Mew are 1.7 MiB.

The first result I looked at was Abomasnow because alphabetically, it's first. 6.6% (3112) of Abomasnow use Ice Beam.

If Abomasnow has Ice Beam:
  • it most common ability is Snow Warning (99.4%), not Soundproof (0.6%)
  • its most common item is Leftovers (29%)
  • the most common second move is Giga Drain (55.3%)
  • it's rarely used with Hippowdon (1%)
  • never used with Heatran
  • if you see a Hydreigon on its team (20.8% of the time you will), Hydreigon has a 16% chance to have U-turn

Ice Beam Abomasnow is not exactly a metagame threat, so maybe those stats aren't that interesting -- Ice Beam Abomasnow was used on 0.02% of teams in that 3 month period. Let's look at something a little more OU: Mew.

Mew was on 8.19% (541906) of teams. 29.5% (159650) of Mew use Spikes. If Mew has Spikes:
  • its most common item is Red Card (51.8%)
  • the top few most common second moves are:
    • Stealth Rock (87.8%)
    • Taunt (75.3%)
    • Self-Destruct (22.4%)
    • Flare Blitz (20.1%)
    • Skill Swap (16.3%)
  • Cloyster has a 52.8% chance of being on the same team. If they have a Cloyster, its top moves are:
    • Icicle Spear (99.3%)
    • Shell Smash (99.2%)
    • Rock Blast (94.2%)
    • Ice Shard (61.7%)
    • Liquidation (29.8%)
    • Everything else has a 2.3% chance or less
    • Despite the fact that Cloyster in general has a 5.6% chance to have Spikes, when used with Spikes Mew, it has only a 1.5% chance to have Spikes.
I have attached two charts showing the distribution of Mew's Speed. You can see that over half of all Mew were at 328 Speed. I'm considering adding a Speed distribution per move -- that seems useful.

Like I said, the file is 550 MiB. This is too large for a normal person to open and read. If you tried, it would probably crash your text editor or at least make it run very slow. Part of the reason for the current size is an arbitrary decision I made. I do correlations with the top 20 moves for each Pokemon. I didn't have any basis for the number 20, I just needed to choose something to ensure my script would be able to fit in memory (it could theoretically require 1.5 TiB of RAM just to run). I'm going to do some analysis to determine what % of move usage is accounted for by the top N moves to make a better decision based on that data. However, I also want to add even more data, which means even bigger file. I'm working on how best to let people browse the data and get useful insights -- a file probably isn't it.

I have a team generator / team predictor that can take advantage of these stats, and chain the results of multiple correlations to generate a coherent team. This is the algorithm that Technical Machine (my AI) has used to generate teams for years, but I've had to disable most of the intelligent parts of that algorithm because (until now) the usage stats generated for Pokemon Showdown have been insufficient.

There is still some work to do, but I hope to finish it up over the next few days and get something out there that people can use. Feel free to let me know if you have any suggestions for more useful stats or questions. The next steps for me are to wait for the data approval process so I can access to battle logs with user ratings in them. I'll have a follow-up post here soon explaining exactly what I plan to do with that, but it includes a (hopefully) smarter way to weight teams than we do right now.
 

Attachments

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
All data used as examples in this thread are still the 2-year-old 3-month-long logs that I had from the previous post.

I've worked on this a bit more. The process is much more optimized: I now generate unweighted stats in just under 21 minutes (down from 70 when I made this post). I spend most of that time with almost no memory usage (11 MiB or less), and I use up to 843 MiB of memory for about 30 seconds. Despite this large reduction in time, I'm generating a little more stats than I used to.

I can now calculate user ratings from the logs given, so I've been able to test out various weighting strategies. It's not as good as the real thing (I don't have data from before the logs were gathered about users' ratings, and I treat the entire 3 months as a single rating period).

I have more information about Pokemon speed. I have attached the speed distribution for the entire tier. Of note, Level 100 Shuckle with 0 Speed EVs and 31 Speed IVs is faster than 3.5% of all Pokemon. The most common Speed was 156 (3.66% of all Pokemon are exactly this fast, 126 distinct species). The slowest Pokemon had 2 Speed (Cutiefly, Magikarp, Gastly, Snom, Ditto, Meltan with an Iron Ball or Macho Brace), the fastest Pokemon had 690 (Ninjask with a Choice Scarf). I can also answer the question of "Given that I see a Tyranitar with Dragon Dance, how much Speed does it have" vs "Given that I see a Tyranitar without Dragon Dance, how much Speed does it have".

The step I'm currently working on is fixing up my team predictor / team generator to use this information. I think that is where this will start to really show how powerful this data is. Once I have that finished, I'll show sample teams that I can build with the stats we have today (they're all bad teams) vs the teams I can build with these new stats (they're really good teams!). I'll include a set of sample teams generated from each weighting system I've implemented, and describe what each of those weighting systems are. This will let me evaluate how different the usage stats end up being, subjectively, and see which of them are useful and which aren't.

Plans for the future are to gather more information from battles. Right now, I ignore the battle log entirely and just look at the teams. However, this throws away information we have in our stats right now, specifically "A switches into B, this is the outcome" kind of stats. I think those can be meaningfully integrated into a team builder in order to analyze human teams and build better teams than the kinds of teams humans are building today, and that's an exciting area to explore.
 

Attachments

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
I'm still waiting on access to logs with user ratings to be able to generate proper weighted stats. That's the last thing standing in the way. Given the time that has elapsed, I also need to do a little bit of work to add in Generation 9 support, but adding a new generation is actually just a few hours of work for me at this point (since I don't need to implement all of the mechanics for the usage stats). I'm planning on coming back to this (and pushing for data access!) probably in March.
 

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
I'd like to talk about how I'm weighting statistics. Before I can explain how I weight the statistics, I need to first explain a bit about how ratings work. The full description can be found at
https://www.smogon.com/forums/threa...layers-overall-rating-than-shoddys-cre.51169/ but the general idea is that everyone has a Glicko-1 rating. Based on this rating, it's possible to estimate how likely that player is to win a battle against a randomly selected opponent. That chance to win is the value I use for weighting decisions.

For example purposes, consider the following three players:

Bad: wins 1% of their battles if they were paired against a random user
Median: wins 50% of their battles
Good: wins 99% of their battles

My goal for these weightings is that I want bad players to not affect stats much, and I want good players to affect them a lot. This is because stats serve two purposes:

1. I use them to generate good teams. For this, we obviously want the stats to reflect the highest level play possible to generate the best teams.
2. I use them to predict foe teams. For this it is also good to reflect high level play. That helps prepare for strong players, under the assumption that weak players can be beaten even with a worse prediction. However, it is still better to use stats targeted at the player you are battling, but that's a post for another day. ;)

Based on that, I have tested several weighting strategies.

First, there is the question of whose rating to use. There are two options here.

The most obvious is to use a player's own rating to weight their stats. Players with high ratings probably have good teams, and they are the players we are trying to beat.

The other option is to use only the team of the winner and weight based on the rating of the loser. The idea here is that players use a bunch of different teams, and their own rating is an estimate of their skill across all of their teams, but the fact that they beat a player with a rating of X gives us more information about their current team. An idea I have for a future version is to build on this idea further: if Bad beats Good, that suggests their team is really good (since we know Bad is a bad player) and in fact we should assume their team is even better than we would if Good beat Good (since it overcame a giant rating gap). This has some unfortunate implications so I'm not sure of whether I want to pursue this, but it's an interesting idea.

Related to that question is whether we want to include a cut-off. For instance, we can include only those teams that beat a team with a 50% win probability. I ran stats for 50% and 75%. My theory behind 75% is that a new player has a 50% win probability (we know nothing about them), and players can make new accounts to get back to a rating with a 50% win probability, so 75% is kind of the median of somewhat serious players.

Once we decide on whose rating to use and which teams to count, there are a few more ways to actually do weighting:

* Unweighted: Every team counts the same.
* Win probability weighted: This means that Bad counts for 0.01, Median counts for 0.5, and Good counts for .99. In other words, Median is 50 times as important than Bad, and Good is approximately 2 times as important as Median. This successfully filters out bad players, but doesn't greatly distinguish the median from the good.
* Inverse lose probability weighted: Rather than multiplying by your chance to win, multiply by 1 / chance_to_lose, or, equivalently, 1 / (1 - chance_to_win). This means that Bad counts for about 1, Median counts for 2, and Good counts for 50. Here the weighting distribution is the opposite of win weighted. Median is twice as important as Bad, and Good is 50 times as important as Median.
* Combined weighted: Combine the two! Weight by chance_to_win / (1 - chance_to_win). Bad counts for about .01, Median counts for 1, and Good counts for 99.

After trying out all the different combinations and looking at what happens for Gen 1 stats, I can present usage data for unweighted no cut-off, combined-weighted winners no cut-off, combined-weighted winners 50% cut-off, and combined-weighted winners 75% cut-off. Stats are given by percent chance that Pokemon is on a team.

Unweighted
CWW
Beat 50%
Beat 75%
Tauros
71.870%​
84.610%​
89.724%​
94.483%​
Chansey
65.125%​
75.090%​
78.451%​
81.393%​
Snorlax
57.803%​
65.949%​
69.503%​
76.303%​
Exeggutor
50.992%​
56.787%​
58.107%​
58.603%​
Starmie
36.780%​
42.735%​
44.439%​
48.620%​
Alakazam
45.302%​
45.239%​
43.877%​
39.812%​
Rhydon
34.903%​
33.044%​
30.507%​
27.823%​
Gengar
26.985%​
24.861%​
23.844%​
26.514%​
Zapdos
23.591%​
24.292%​
24.689%​
24.252%​
Jynx
17.081%​
20.258%​
21.878%​
23.394%​
Cloyster
14.264%​
15.045%​
15.174%​
15.811%​
Lapras
13.610%​
14.306%​
15.080%​
14.587%​
Jolteon
18.064%​
16.697%​
15.783%​
13.194%​
Slowbro
13.044%​
12.228%​
11.181%​
8.234%​
Golem
7.448%​
7.563%​
7.511%​
7.247%​
Sandslash
3.344%​
4.155%​
5.092%​
5.408%​
Persian
5.886%​
5.744%​
5.583%​
4.830%​
Articuno
3.431%​
3.196%​
3.100%​
3.403%​
Arcanine
3.356%​
2.496%​
2.440%​
2.388%​
Dragonite
8.575%​
5.078%​
3.370%​
2.037%​
Charizard
6.145%​
2.697%​
2.203%​
2.031%​
Hypno
2.729%​
2.458%​
2.456%​
1.901%​
Victreebel
5.068%​
3.518%​
2.559%​
1.603%​
Gyarados
3.281%​
1.827%​
1.430%​
1.388%​
Venusaur
4.961%​
2.509%​
1.963%​
1.371%​
Kangaskhan
1.322%​
1.144%​
1.062%​
1.342%​
Dodrio
2.640%​
2.025%​
1.702%​
1.319%​
Kingler
1.479%​
1.237%​
1.130%​
1.088%​
Moltres
1.871%​
1.351%​
1.106%​
1.066%​
Dugtrio
2.362%​
1.651%​
1.469%​
0.956%​
Clefable
1.474%​
1.319%​
1.339%​
0.855%​
Ninetales
1.815%​
1.375%​
1.168%​
0.549%​
Onix
1.095%​
0.803%​
0.831%​
0.549%​
Raichu
2.037%​
1.101%​
0.922%​
0.545%​
Pinsir
1.168%​
0.803%​
0.700%​
0.516%​
Parasect
1.083%​
0.545%​
0.389%​
0.446%​
Flareon
0.743%​
0.388%​
0.296%​
0.444%​
Primeape
0.610%​
0.277%​
0.189%​
0.341%​
Poliwrath
1.394%​
0.664%​
0.486%​
0.339%​
Nidoqueen
0.415%​
0.208%​
0.219%​
0.306%​
Kabutops
0.832%​
0.461%​
0.421%​
0.295%​
Vaporeon
1.024%​
0.366%​
0.269%​
0.207%​
Venomoth
0.358%​
0.138%​
0.119%​
0.206%​
Nidoking
1.600%​
0.626%​
0.358%​
0.202%​
Electrode
3.014%​
1.918%​
1.248%​
0.194%​
Kadabra
0.291%​
0.176%​
0.091%​
0.176%​
Rapidash
0.966%​
0.494%​
0.331%​
0.174%​
Aerodactyl
1.683%​
0.621%​
0.402%​
0.171%​
Omastar
0.728%​
0.309%​
0.210%​
0.134%​
Arbok
0.677%​
0.331%​
0.206%​
0.127%​
Golduck
0.664%​
0.337%​
0.222%​
0.104%​
Porygon
0.443%​
0.269%​
0.208%​
0.104%​
Haunter
0.515%​
0.181%​
0.097%​
0.104%​
Farfetch'd
0.307%​
0.159%​
0.091%​
0.104%​
Slowpoke
0.055%​
0.067%​
0.080%​
0.104%​
Beedrill
0.805%​
0.225%​
0.161%​
0.103%​
Tangela
0.494%​
0.161%​
0.108%​
0.103%​
Raticate
0.519%​
0.320%​
0.267%​
0.101%​
Machamp
2.024%​
0.927%​
0.485%​
0.000%​
Blastoise
2.386%​
0.646%​
0.152%​
0.000%​
Hitmonlee
1.300%​
0.455%​
0.147%​
0.000%​
Tentacruel
0.832%​
0.356%​
0.134%​
0.000%​
Dewgong
0.468%​
0.211%​
0.125%​
0.000%​
Electabuzz
0.666%​
0.179%​
0.085%​
0.000%​
Magneton
0.448%​
0.175%​
0.077%​
0.000%​
Mr. Mime
0.396%​
0.169%​
0.077%​
0.000%​
Lickitung
0.269%​
0.111%​
0.069%​
0.000%​
Fearow
0.291%​
0.093%​
0.067%​
0.000%​
Scyther
0.801%​
0.261%​
0.056%​
0.000%​
Hitmonchan
0.325%​
0.092%​
0.053%​
0.000%​
Vileplume
0.538%​
0.150%​
0.052%​
0.000%​
Pidgeot
0.824%​
0.168%​
0.052%​
0.000%​
Pikachu
1.088%​
0.173%​
0.050%​
0.000%​
Seadra
0.375%​
0.099%​
0.045%​
0.000%​
Muk
0.537%​
0.107%​
0.043%​
0.000%​
Gastly
0.201%​
0.049%​
0.042%​
0.000%​
Magmar
0.377%​
0.125%​
0.038%​
0.000%​
Marowak
0.324%​
0.073%​
0.031%​
0.000%​
Poliwhirl
0.081%​
0.049%​
0.031%​
0.000%​
Weezing
0.278%​
0.078%​
0.029%​
0.000%​
Graveler
0.157%​
0.050%​
0.026%​
0.000%​
Seaking
0.139%​
0.052%​
0.022%​
0.000%​
Wigglytuff
0.257%​
0.076%​
0.022%​
0.000%​
Butterfree
0.811%​
0.114%​
0.019%​
0.000%​
Machoke
0.147%​
0.017%​
0.017%​
0.000%​
Dragonair
0.486%​
0.077%​
0.013%​
0.000%​
Bulbasaur
0.275%​
0.043%​
0.013%​
0.000%​
Squirtle
0.246%​
0.032%​
0.013%​
0.000%​
Staryu
0.039%​
0.008%​
0.013%​
0.000%​
Diglett
0.050%​
0.016%​
0.010%​
0.000%​
Golbat
0.266%​
0.052%​
0.009%​
0.000%​
Magikarp
0.015%​
0.008%​
0.008%​
0.000%​
Charmeleon
0.090%​
0.013%​
0.008%​
0.000%​
Magnemite
0.027%​
0.008%​
0.008%​
0.000%​
Abra
0.290%​
0.040%​
0.008%​
0.000%​
Drowzee
0.077%​
0.026%​
0.008%​
0.000%​
Ditto
0.098%​
0.022%​
0.002%​
0.000%​
Ivysaur
0.167%​
0.028%​
0.000%​
0.000%​
Exeggcute
0.115%​
0.016%​
0.000%​
0.000%​
Wartortle
0.102%​
0.010%​
0.000%​
0.000%​
Growlithe
0.022%​
0.009%​
0.000%​
0.000%​
Voltorb
0.057%​
0.007%​
0.000%​
0.000%​
Geodude
0.022%​
0.006%​
0.000%​
0.000%​
Kabuto
0.015%​
0.006%​
0.000%​
0.000%​
Eevee
0.108%​
0.006%​
0.000%​
0.000%​
Charmander
0.088%​
0.005%​
0.000%​
0.000%​
Zubat
0.031%​
0.005%​
0.000%​
0.000%​
Horsea
0.014%​
0.004%​
0.000%​
0.000%​
Rhyhorn
0.075%​
0.004%​
0.000%​
0.000%​
Poliwag
0.020%​
0.004%​
0.000%​
0.000%​
Pidgeotto
0.070%​
0.004%​
0.000%​
0.000%​
Dratini
0.040%​
0.004%​
0.000%​
0.000%​
Mankey
0.032%​
0.004%​
0.000%​
0.000%​
Tentacool
0.026%​
0.004%​
0.000%​
0.000%​
Weepinbell
0.025%​
0.004%​
0.000%​
0.000%​
Sandshrew
0.019%​
0.004%​
0.000%​
0.000%​
Psyduck
0.012%​
0.004%​
0.000%​
0.000%​
Pidgey
0.030%​
0.004%​
0.000%​
0.000%​
Vulpix
0.023%​
0.003%​
0.000%​
0.000%​
Nidoran-F
0.019%​
0.003%​
0.000%​
0.000%​
Nidoran-M
0.016%​
0.003%​
0.000%​
0.000%​
Clefairy
0.015%​
0.003%​
0.000%​
0.000%​
Omanyte
0.006%​
0.003%​
0.000%​
0.000%​
Machop
0.015%​
0.003%​
0.000%​
0.000%​
Gloom
0.025%​
0.003%​
0.000%​
0.000%​
Rattata
0.048%​
0.002%​
0.000%​
0.000%​
Meowth
0.022%​
0.002%​
0.000%​
0.000%​
Krabby
0.022%​
0.002%​
0.000%​
0.000%​
Oddish
0.012%​
0.001%​
0.000%​
0.000%​
Caterpie
0.045%​
0.000%​
0.000%​
0.000%​
Koffing
0.033%​
0.000%​
0.000%​
0.000%​
Jigglypuff
0.029%​
0.000%​
0.000%​
0.000%​
Spearow
0.019%​
0.000%​
0.000%​
0.000%​
Cubone
0.016%​
0.000%​
0.000%​
0.000%​
Nidorino
0.015%​
0.000%​
0.000%​
0.000%​
Weedle
0.014%​
0.000%​
0.000%​
0.000%​
Doduo
0.012%​
0.000%​
0.000%​
0.000%​
Grimer
0.012%​
0.000%​
0.000%​
0.000%​
Ponyta
0.012%​
0.000%​
0.000%​
0.000%​
Goldeen
0.010%​
0.000%​
0.000%​
0.000%​
Paras
0.009%​
0.000%​
0.000%​
0.000%​
Venonat
0.008%​
0.000%​
0.000%​
0.000%​
Bellsprout
0.006%​
0.000%​
0.000%​
0.000%​
Metapod
0.005%​
0.000%​
0.000%​
0.000%​
Seel
0.005%​
0.000%​
0.000%​
0.000%​
Ekans
0.003%​
0.000%​
0.000%​
0.000%​
Kakuna
0.003%​
0.000%​
0.000%​
0.000%​
Shellder
0.002%​
0.000%​
0.000%​
0.000%​
Nidorina
0.000%​
0.000%​
0.000%​
0.000%​

We can see from this that adding in a cut-off dramatically reduces the amount of Pokemon we have any stats for. No one ever beat a 50% win probability player with a Caterpie, for instance.

Of course, the whole point of these stats aren't just for making a list of Pokemon by usage (we have that already!). One thing I found interesting was looking at the most likely team in generation 1 based on these stats.
75% win50% winEvery other method
Tauros
- Body Slam
- Hyper Beam
- Blizzard
- Earthquake
Chansey
- Thunder Wave
- Soft-Boiled
- Ice Beam
- Thunderbolt
Snorlax
- Body Slam
- Rest
- Reflect
- Earthquake
Starmie
- Thunder Wave
- Recover
- Psychic
- Blizzard
Exeggutor
- Explosion
- Sleep Powder
- Psychic
- Stun Spore
Rhydon
- Body Slam
- Substitute
- Earthquake
- Rock Slide
Tauros
- Body Slam
- Hyper Beam
- Blizzard
- Earthquake
Chansey
- Thunder Wave
- Soft-Boiled
- Thunderbolt
- Ice Beam
Snorlax
- Body Slam
- Rest
- Reflect
- Ice Beam
Exeggutor
- Sleep Powder
- Psychic
- Explosion
- Mega Drain
Starmie
- Recover
- Thunder Wave
- Blizzard
- Thunderbolt
Rhydon
- Substitute
- Body Slam
- Earthquake
- Rock Slide
Tauros
- Body Slam
- Hyper Beam
- Blizzard
- Earthquake
Chansey
- Thunder Wave
- Soft-Boiled
- Ice Beam
- Thunderbolt
Snorlax
- Body Slam
- Rest
- Reflect
- Ice Beam
Exeggutor
- Sleep Powder
- Psychic
- Explosion
- Stun Spore
Starmie
- Recover
- Thunder Wave
- Blizzard
- Thunderbolt
Rhydon
- Substitute
- Body Slam
- Earthquake
- Rock Slide

Earlier predictions are more likely, later predictions take into account the data of earlier predictions.

This last team was generated by any weighting strategy I chose, even if I made bad players count for more than good players! It turns out that even bad players are most likely to use good things, they just have significantly more variance.

To summarize the differences:
* 75% win gives Starmie Psychic, but it gets Thunderbolt for the others
* 75% win gives Snorlax Earthquake, but it gets Ice Beam for the others
* 50% win gives Exeggutor Mega Drain, but it gets Stun Spore for the others

Overall, 75% win combined weighted stats seem to give me the best outcomes. So far my summary statistics haven't really shown the big difference, so I'll generate 5 sample teams at random with unweighted vs these weighted stats to give a better feel for what effect it has.

75% winUnweighted
Chansey
- Soft-Boiled
- Ice Beam
- Thunder Wave
- Thunderbolt
Tauros
- Blizzard
- Body Slam
- Hyper Beam
- Earthquake
Rhydon
- Rock Slide
- Body Slam
- Earthquake
- Submission
Exeggutor
- Psychic
- Sleep Powder
- Stun Spore
- Explosion
Jolteon
- Double Kick
- Thunderbolt
- Pin Missile
- Thunder Wave
Snorlax
- Body Slam
- Counter
- Amnesia
- Rest
Clefable
- Body Slam
- Thunderbolt
- Blizzard
- Thunder Wave
Tauros
- Hyper Beam
- Earthquake
- Blizzard
- Body Slam
Kangaskhan
- Rock Slide
- Earthquake
- Body Slam
- Hyper Beam
Parasect
- Spore
- Slash
- Swords Dance
- Stun Spore
Golem
- Rock Slide
- Explosion
- Earthquake
- Body Slam
Tentacruel
- Ice Beam
- Wrap
- Mega Drain
- Surf
Chansey
- Counter
- Soft-Boiled
- Sing
- Ice Beam
Lapras
- Thunder
- Blizzard
- Body Slam
- Sing
Tauros
- Thunderbolt
- Body Slam
- Blizzard
- Hyper Beam
Zapdos
- Light Screen
- Thunderbolt
- Drill Peck
- Thunder Wave
Sandslash
- Hyper Beam
- Body Slam
- Earthquake
- Swords Dance
Venusaur
- Sleep Powder
- Body Slam
- Razor Leaf
- Swords Dance
Tauros
- Blizzard
- Hyper Beam
- Body Slam
- Earthquake
Starmie
- Recover
- Thunder Wave
- Thunderbolt
- Blizzard
Chansey
- Soft-Boiled
- Thunder Wave
- Thunderbolt
- Ice Beam
Snorlax
- Ice Beam
- Reflect
- Rest
- Body Slam
Alakazam
- Seismic Toss
- Recover
- Thunder Wave
- Psychic
Exeggutor
- Explosion
- Sleep Powder
- Double-Edge
- Stun Spore
Alakazam
- Thunder Wave
- Seismic Toss
- Psychic
- Recover
Jynx
- Blizzard
- Psychic
- Counter
- Lovely Kiss
Tauros
- Body Slam
- Hyper Beam
- Blizzard
- Earthquake
Chansey
- Soft-Boiled
- Ice Beam
- Thunderbolt
- Thunder Wave
Starmie
- Thunderbolt
- Blizzard
- Recover
- Thunder Wave
Snorlax
- Self-Destruct
- Earthquake
- Body Slam
- Counter
Gengar
- Explosion
- Hypnosis
- Night Shade
- Psychic
Rhydon
- Surf
- Substitute
- Rock Slide
- Body Slam
Alakazam
- Thunder Wave
- Recover
- Psychic
- Seismic Toss
Persian
- Thunderbolt
- Slash
- Bubble Beam
- Hyper Beam
Tauros
- Blizzard
- Body Slam
- Hyper Beam
- Earthquake
Exeggutor
- Sleep Powder
- Explosion
- Stun Spore
- Psychic
Golem
- Body Slam
- Earthquake
- Explosion
- Rock Slide
Snorlax
- Self-Destruct
- Counter
- Earthquake
- Body Slam
Cloyster
- Hyper Beam
- Blizzard
- Explosion
- Clamp
Starmie
- Thunderbolt
- Recover
- Thunder Wave
- Blizzard
Chansey
- Soft-Boiled
- Ice Beam
- Thunder Wave
- Sing
Tauros
- Hyper Beam
- Earthquake
- Blizzard
- Body Slam
Starmie
- Surf
- Thunderbolt
- Thunder Wave
- Ice Beam
Moltres
- Fire Blast
- Agility
- Double-Edge
- Fire Spin
Snorlax
- Earthquake
- Body Slam
- Rest
- Reflect
Kingler
- Crabhammer
- Hyper Beam
- Swords Dance
- Body Slam
Zapdos
- Drill Peck
- Agility
- Thunder Wave
- Thunderbolt
Slowbro
- Psychic
- Surf
- Thunder Wave
- Blizzard
Slowbro
- Rest
- Surf
- Amnesia
- Thunder Wave
Snorlax
- Body Slam
- Earthquake
- Self-Destruct
- Ice Beam
Nidoking
- Blizzard
- Earthquake
- Substitute
- Thunderbolt
Nidoqueen
- Thunderbolt
- Counter
- Earthquake
- Blizzard
Starmie
- Psychic
- Recover
- Thunder Wave
- Thunderbolt
Tauros
- Earthquake
- Hyper Beam
- Blizzard
- Body Slam
Slowbro
- Seismic Toss
- Thunder Wave
- Amnesia
- Surf
Exeggutor
- Explosion
- Double-Edge
- Sleep Powder
- Psychic
Chansey
- Ice Beam
- Soft-Boiled
- Thunderbolt
- Thunder Wave
Alakazam
- Seismic Toss
- Psychic
- Recover
- Thunder Wave
Snorlax
- Hyper Beam
- Earthquake
- Body Slam
- Rest
Gengar
- Thunderbolt
- Night Shade
- Explosion
- Hypnosis

One important thing to remember is that there is significantly less variance in teams in generation 1, which means that generation 1 is when these stats are least useful. Proper weighting is probably significantly more important in later generations.
 

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
As I mentioned, I can generate a distribution of all speed in the game. I thought about it a bit more, and that's not as useful as I would like. So in addition to that, I'm going to generate speed stats as seen by each Pokemon. So for turns where both Pokemon used a move of the same priority, what was the speed stat of the opponent in that moment? I'm not sure if I want to make it even more fine-grained than that (for instance, what opposing speeds does Dragon Dance Dragonite have vs Choice Band Dragonite?).
 

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

Top