Quantifying Pitcher Stuff



Why?

Mostly out of curiousity. I was interested in some kind of measure on how tough a pitcher was to hit, but not a total effectiveness stat like ERA+. Pitchers can be effective by being hard to hit or having great control. Leave control out of this, I wanted something that tells me how tough they were to hit. Some of the stats we have point in the direction I want, like hits allowed, homeruns allowed, and strikeouts. Hits allowed are problematic because of the DIPS theory, that pitchers don't really have a lot of control of the outcome on balls in play. It's mostly defense, or luck. Strikeouts work better, but have changed quite a bit over time. In the early part of the 20th century, pitchers only struck out 3 or 4 batters per game. Mid to late 20th century, that was more like 6 per 9 innings, and today they strike out a batter per inning. But I don't want some metric that tells me Bob Feller didn't have good stuff compared to the players of today. I want something normalized to the league. Yeah, I know pitchers throw harder than ever before and are tougher to hit today, but for this purpose I want something normalized.

It might be interesting to look at how this changes over a pitcher's career. Or constructing an aging curve. It should be strongly correlated with velocity, but there's more to it than that. Movement is a big deal. Tommy John probably threw low 80s towards the end of his career, but rates about league average as late as 1982, when he only struck out 2.8 per 9 innings. He does well because he didn't allow the homerun and got soft contact. Command within the strike zone will also allow a pitcher to rate better than he would just by velocity and movement. For pitchers before the radar gun, and especially pitch tracking, it would be difficult or impossible to isolate those features, the stuff rating is just a rough approximation of the combination of those things.

Anyway, here's how it's calculated.

  1. Start with hits, innings, homers, and strikeouts.
  2. Estimate At bats. AB = IP * 2.9 + hits
  3. Calculate Batting average on balls in play (BABIP), (hits - HR)/(AB-HR-SO)
  4. Calculate BABIP for the league
  5. Get expected hits in play for the pitcher: (AB-HR-SO) * BABIP_lg
  6. Strikeouts are the driving factor for this expected hits measure
  7. In the Stuff rating, we're going to use 1/3 actual hits in play, and 2/3 expected hits in play. I'll call this Hits_use
  8. Now we're getting somewhere. Let's make this a rate state. Rate = (hits_use * 1 + HR *1.9) / AB
  9. Calculate that for the league as well, call it Rate_lg
  10. Now for Stuff Rating: 100 * (2-Rate/Rate_lg)

The coefficients used above are from WOBA. In The Book the coefficents are:

  • Single 0.90
  • Double 1.24
  • Triple 1.56
  • Homer 1.95

So why I am I using 1.0 for hits? Well, If I take the number of singles in 2022, multiply by .9, then doubles by 1.24, triples by 1.56, and divide by the total number of non-homer hits, I get something really close to 1. For 2022, actually .99. Now with a little more work we can find the exact number of singles, doubles, and triples allowed by each pitcher, but then I'm regressing to the league average of BABIP anyway, so for simplicity, I'm going to stick with using 1.0 here.

I also haven't done park adjustments. It would not be a bad idea to do that, but I've chosen to stick with the simple here.

So what seasons rate as the best?

I've set a minimum of 25 innings here, the best are a bunch of mostly recent short relievers:
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
willide03 Williams Devin 2020 NL 27 8 1 53 0.217 10.5 0.122 156
chapmar01 Chapman Aroldis 2014 NL 54 21 1 106 0.283 21.8 0.126 153
kimbrcr01 Kimbrel Craig 2021 NL 36.67 13 1 64 0.221 16.8 0.138 150
chapmar01 Chapman Aroldis 2016 NL 26.67 12 0 46 0.277 12.9 0.141 150
karinja01 Karinchak James 2020 AL 27 14 1 53 0.339 12.2 0.148 147
gagneer01 Gagne Eric 2003 NL 82.33 37 2 137 0.256 41.7 0.152 147
workmbr01 Workman Brandon 2019 AL 71.67 29 1 104 0.212 40.6 0.159 146
marmoca01 Marmol Carlos 2010 NL 77.67 40 1 138 0.309 38.4 0.15 146
chapmar01 Chapman Aroldis 2018 AL 51.33 24 2 93 0.283 25 0.153 146
janseke01 Jansen Kenley 2010 NL 27 12 0 41 0.243 14.6 0.152 145

Setting a minimum of 162 innings:
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
martipe02 Martinez Pedro 1999 AL 213.33 160 9 313 0.331 145.5 0.203 133
martipe02 Martinez Pedro 2000 AL 217 128 17 284 0.243 153.4 0.212 130
ryanno01 Ryan Nolan 1977 AL 299 198 12 341 0.261 212.1 0.205 128
johnsra05 Johnson Randy 1995 AL 214.33 159 12 294 0.31 151.5 0.211 128
johnsra05 Johnson Randy 2001 NL 249.67 181 19 372 0.315 168.6 0.21 127
clemero02 Clemens Roger 1998 AL 234.67 169 11 271 0.278 180.1 0.219 126
burneco01 Burnes Corbin 2021 NL 167 123 7 234 0.317 113.2 0.202 126
mcdowsa01 McDowell Sam 1965 AL 273 178 9 325 0.266 178.1 0.192 126
clemero02 Clemens Roger 1997 AL 264 204 9 292 0.292 208.9 0.222 125
goodedw01 Gooden Dwight 1984 NL 218 161 7 276 0.302 150.9 0.202 125

The worst, keeping a minimum of 162 innings:
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
ogeach01 Ogea Chad 1999 NL 168 192 36 77 0.276 203 0.341 83
niekrjo01 Niekro Joe 1968 NL 177 204 18 65 0.293 191.8 0.296 83
ortegph01 Ortega Phil 1965 AL 179.67 176 33 88 0.248 186.2 0.305 83
lopezro01 Lopez Rodrigo 2010 NL 200 227 37 116 0.291 230.6 0.326 83
miltoer01 Milton Eric 2005 NL 186.33 237 40 123 0.321 219.4 0.336 83
ramospe01 Ramos Pedro 1957 AL 231 251 43 91 0.264 253.9 0.317 83
limajo01 Lima Jose 2000 NL 196.33 251 48 124 0.313 238 0.348 81
silvaca01 Silva Carlos 2006 AL 180.33 246 38 70 0.315 236.3 0.356 81
loopebr01 Looper Braden 2009 NL 194.67 226 39 100 0.287 229.9 0.334 81
arroybr01 Arroyo Bronson 2011 NL 199 227 46 108 0.278 235.8 0.341 76

Some of the greats. Note: Seasons of less than 25 innings are excluded.

Rapid Robert
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
fellebo01 Feller Bob 1936 AL 62 52 1 76 0.329 47.6 0.216 128
fellebo01 Feller Bob 1937 AL 148.67 116 4 150 0.285 119.6 0.223 124
fellebo01 Feller Bob 1938 AL 277.67 225 13 240 0.273 240 0.239 119
fellebo01 Feller Bob 1939 AL 296.67 227 13 246 0.258 252.4 0.235 119
fellebo01 Feller Bob 1940 AL 320.33 245 13 261 0.258 269.5 0.233 119
fellebo01 Feller Bob 1941 AL 343 284 15 260 0.268 296 0.239 114
fellebo01 Feller Bob 1945 AL 72 50 1 59 0.246 54.7 0.209 120
fellebo01 Feller Bob 1946 AL 371.33 277 11 348 0.267 283.6 0.215 119
fellebo01 Feller Bob 1947 AL 299 230 17 196 0.241 253.9 0.238 111
fellebo01 Feller Bob 1948 AL 280.33 255 20 164 0.266 264 0.261 105
fellebo01 Feller Bob 1949 AL 211 198 18 108 0.263 203.3 0.269 102
fellebo01 Feller Bob 1950 AL 247 230 20 119 0.26 244.4 0.272 105
fellebo01 Feller Bob 1951 AL 249.67 239 22 111 0.261 247.8 0.275 100
fellebo01 Feller Bob 1952 AL 191.67 219 13 81 0.303 194.1 0.276 96
fellebo01 Feller Bob 1953 AL 175.67 163 16 60 0.246 179.4 0.28 99
fellebo01 Feller Bob 1954 AL 140 127 13 59 0.247 137 0.273 99
fellebo01 Feller Bob 1955 AL 83 71 7 25 0.229 82.5 0.273 100
fellebo01 Feller Bob 1956 AL 58 63 7 18 0.272 63.5 0.301 92

The left arm of God
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
koufasa01 Koufax Sandy 1955 NL 41.67 33 2 30 0.254 34.3 0.232 117
koufasa01 Koufax Sandy 1956 NL 58.67 66 10 30 0.286 62 0.306 90
koufasa01 Koufax Sandy 1957 NL 104.33 83 14 122 0.276 82.6 0.247 112
koufasa01 Koufax Sandy 1958 NL 158.67 132 19 131 0.256 141 0.262 107
koufasa01 Koufax Sandy 1959 NL 153.33 136 23 173 0.294 130.3 0.263 106
koufasa01 Koufax Sandy 1960 NL 175 133 20 197 0.267 136.9 0.24 112
koufasa01 Koufax Sandy 1961 NL 255.67 212 27 269 0.281 210.4 0.247 113
koufasa01 Koufax Sandy 1962 NL 184.33 134 13 216 0.275 137.4 0.221 121
koufasa01 Koufax Sandy 1963 NL 311 214 18 306 0.248 233.4 0.218 117
koufasa01 Koufax Sandy 1964 NL 223 154 13 223 0.25 171.7 0.222 118
koufasa01 Koufax Sandy 1965 NL 335.67 216 26 382 0.243 240.9 0.215 119
koufasa01 Koufax Sandy 1966 NL 323 241 19 317 0.264 255.5 0.227 117

Some guy who threw 7 no-hitters
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
ryanno01 Ryan Nolan 1968 NL 134 93 12 133 0.241 104.2 0.231 109
ryanno01 Ryan Nolan 1969 NL 89.33 60 3 92 0.254 65.5 0.208 122
ryanno01 Ryan Nolan 1970 NL 131.67 86 10 125 0.228 104.5 0.229 117
ryanno01 Ryan Nolan 1971 NL 152 125 8 137 0.278 123.7 0.232 113
ryanno01 Ryan Nolan 1972 AL 284 166 14 329 0.235 184.1 0.193 123
ryanno01 Ryan Nolan 1973 AL 326 238 18 383 0.281 235.5 0.213 123
ryanno01 Ryan Nolan 1974 AL 332.67 221 18 367 0.254 239 0.21 123
ryanno01 Ryan Nolan 1975 AL 198 152 13 186 0.264 158 0.231 115
ryanno01 Ryan Nolan 1976 AL 284.33 193 13 327 0.266 198.7 0.205 123
ryanno01 Ryan Nolan 1977 AL 299 198 12 341 0.261 212.1 0.205 128
ryanno01 Ryan Nolan 1978 AL 234.67 183 12 260 0.289 174.1 0.218 121
ryanno01 Ryan Nolan 1979 AL 222.67 169 15 223 0.267 176.5 0.23 120
ryanno01 Ryan Nolan 1980 NL 233.67 205 10 200 0.29 198.3 0.237 112
ryanno01 Ryan Nolan 1981 NL 149 99 2 140 0.249 109 0.202 123
ryanno01 Ryan Nolan 1982 NL 250.33 196 20 245 0.268 203.9 0.238 112
ryanno01 Ryan Nolan 1983 NL 196.33 134 9 183 0.244 151.2 0.218 119
ryanno01 Ryan Nolan 1984 NL 183.67 143 12 197 0.281 143.6 0.228 115
ryanno01 Ryan Nolan 1985 NL 232 205 12 209 0.294 192.6 0.236 112
ryanno01 Ryan Nolan 1986 NL 178 119 14 194 0.246 133.2 0.222 117
ryanno01 Ryan Nolan 1987 NL 211.67 154 14 270 0.289 151.9 0.215 123
ryanno01 Ryan Nolan 1988 NL 220 186 18 228 0.291 176.4 0.238 109
ryanno01 Ryan Nolan 1989 AL 239.33 162 17 301 0.269 169.8 0.213 123
ryanno01 Ryan Nolan 1990 AL 204 137 18 232 0.249 153.4 0.225 118
ryanno01 Ryan Nolan 1991 AL 173 102 12 203 0.232 122 0.209 125
ryanno01 Ryan Nolan 1992 AL 157.33 138 9 157 0.301 129.3 0.236 114
ryanno01 Ryan Nolan 1993 AL 66.33 54 5 46 0.251 61.5 0.258 109

Pedro Martinez
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
martipe02 Martinez Pedro 1993 NL 107 76 5 119 0.271 80.8 0.217 123
martipe02 Martinez Pedro 1994 NL 144.67 115 11 142 0.273 123.6 0.244 115
martipe02 Martinez Pedro 1995 NL 194.67 158 21 174 0.26 176.1 0.262 108
martipe02 Martinez Pedro 1996 NL 216.67 189 19 222 0.295 188.4 0.252 111
martipe02 Martinez Pedro 1997 NL 241.33 158 16 305 0.265 173.8 0.213 124
martipe02 Martinez Pedro 1998 AL 233.67 188 26 251 0.275 201.4 0.255 114
martipe02 Martinez Pedro 1999 AL 213.33 160 9 313 0.331 145.5 0.203 133
martipe02 Martinez Pedro 2000 AL 217 128 17 284 0.243 153.4 0.212 130
martipe02 Martinez Pedro 2001 AL 116.67 84 5 163 0.311 79.8 0.203 130
martipe02 Martinez Pedro 2002 AL 199.33 144 13 239 0.279 149.3 0.221 124
martipe02 Martinez Pedro 2003 AL 186.67 147 7 206 0.295 145.3 0.221 125
martipe02 Martinez Pedro 2004 AL 217 193 26 227 0.293 194.5 0.264 111
martipe02 Martinez Pedro 2005 NL 217 159 19 208 0.249 182.9 0.244 115
martipe02 Martinez Pedro 2006 NL 132.67 108 19 137 0.264 118.3 0.268 108
martipe02 Martinez Pedro 2007 NL 28 33 0 32 0.401 24.5 0.239 118
martipe02 Martinez Pedro 2008 NL 109 127 19 87 0.32 118.8 0.313 91
martipe02 Martinez Pedro 2009 NL 44.67 48 7 37 0.307 46.1 0.299 94

And one more who isn't quite finished yet
playerID Last First yearID lgID IP H HR SO BABIP xHits xWOBA Stuff_Rate
verlaju01 Verlander Justin 2006 AL 186 187 21 124 0.286 195.4 0.291 102
verlaju01 Verlander Justin 2007 AL 201.67 181 20 183 0.286 189.4 0.267 108
verlaju01 Verlander Justin 2008 AL 201 195 18 163 0.297 194.7 0.271 106
verlaju01 Verlander Justin 2009 AL 240 219 20 269 0.318 205.9 0.249 114
verlaju01 Verlander Justin 2010 AL 224.33 190 14 219 0.29 190.8 0.242 114
verlaju01 Verlander Justin 2011 AL 251 174 24 250 0.239 206.7 0.241 114
verlaju01 Verlander Justin 2012 AL 238.33 192 19 239 0.277 200.9 0.243 114
verlaju01 Verlander Justin 2013 AL 218.33 212 19 217 0.317 199.3 0.261 107
verlaju01 Verlander Justin 2014 AL 206 223 18 159 0.319 209.1 0.28 97
verlaju01 Verlander Justin 2015 AL 133.33 113 13 113 0.268 122.5 0.262 106
verlaju01 Verlander Justin 2016 AL 227.67 171 30 254 0.258 192.5 0.255 111
verlaju01 Verlander Justin 2017 AL 206 170 27 219 0.274 181.3 0.263 108
verlaju01 Verlander Justin 2018 AL 214 156 28 290 0.279 163.7 0.24 115
verlaju01 Verlander Justin 2019 AL 223 137 36 300 0.226 170.3 0.244 116
verlaju01 Verlander Justin 2022 AL 175 116 12 185 0.244 134.8 0.223 117

Here's a text file with all pitchers from 1893 (the first year of the 60'6" pitching distance) on who pitched at least 25 innings in a season: Download CSV

This page was last modified 03/10/2023


All content Copyright © 2008-2023 by Sean Smith.