Quantifying the Benefit of Spray Angle to xwOBA
Expected weighted on-base average (xwOBA) is one of Statcast’s most important additions to the Sabermetric sphere. It’s a simple premise — estimate a hitter’s deserved production based, simply, on his combinations of exit velocity (EV) and launch angle (LA) — with robust implications and applications. It’s remarkable how powerful the metric is with just two inputs.
However, the metric is not without its faults (or complaints from those who use it). Its simplicity is beautiful but inherently and knowingly lacking, accounting minimally or not at all for:
- spray (lateral) angle (touched upon here),
- a player’s foot speed (discussed more thoroughly here),
- park factors, and
- opposing defense.
None of this necessarily serves as an indictment of xwOBA. The number of inputs you include affects the purpose you want it to serve. That is, do you want it to be descriptive or predictive? How about both? Maybe defense shouldn’t be included, then, if we can’t reasonably expect a hitter to face the same caliber of defense each year, something that is out of his control.
The same could possibly be said of spray angle, although I don’t believe its exclusion from xwOBA to be theoretically sound. Its exclusion implies it’s not a skill the way launch angle is a skill, and I’m not sure that’s true. That said, the inclusion of spray angle into xwOBA would make every EV-LA combination that underpins xwOBA quite a bit noisier — something that might actually reduce the effectiveness of xwOBA. But we can see, pretty clearly from this post, that spray angle (and park factors) matter.
While updating my Pitch Leaderboard ahead of the 2020 season, I have been cleaning up Statcast data, including making minor adjustments to xwOBA to account for some of the factors mentioned in the bulleted list above. Here, I want to demonstrate what effect some general binning of spray angle can have on xwOBA on contact (xwOBAcon), the variable portion of xwOBA. (The three elements of xwOBA: strikeouts, walks, and xwOBA on contact. The former two are fixed, while the latter two depend on EV and LA, as previously noted.)
First, I calculated spray angle using colleague Jeff Zimmerman’s equation cited here by Bill Petti. In theory, we have 90 individual degrees, when rounded to the whole number: -45° (left field) to 0° (dead center) to 45° (right field). I binned all launch angles into nine 10-degree ranges, such that all balls in play between -45° and -35° were grouped together, and so on. This method of binning implies some semblance of repeatability (i.e., so-and-so hits it to left-center field 15 percent of the time) as opposed to assuming he will repeat his exact distribution of launch angles (i.e., he hits it at -30° exactly 6% of the time).
An underrated, although fairly intuitive, element of spray angle: its importance depends on the type and quality of batted ball. I have tried to account for that here as well, using “Quality of Contact” (‘estimated_woba_using_speedangle,’ per CSV documentation) and Batted Ball Type (‘bb_type’) to create additional groups. I have consolidated all weak batted balls (“Poorly/Under,” “Poorly/Topped,” and “Poorly/Weak”) into a single “weak” category alongside barrels, solid contact, and flare/burners.
Lastly, I account for hitter handedness.
All told, this establishes a ton of individual bins — 288, to be exact (two types of handedness times nine spray angle bins times four types of batted balls times four batted ball quality distinctions). Fortunately, we have more than 120,000 batted balls in 2019, leaving an average sample size of roughly 400 batted balls per bin. It is not distributed that neatly, but I think it all comes out in the wash. (A bin with a sample size of one — this actually exists, a lone “barreled” ground ball — will have an extremely small effect on the population.)
I’ve gotten this far but, naturally, I’ve buried the lede: how will I quantify the bias caused by xwOBAcon’s lack of spray angle? Simple: calculate the average difference between wOBAcon and xwOBAcon (wOBAcon–xwOBAcon) for each bin and apply it to every batted ball event (BBE) in 2019. xwOBAcon does all the heavy lifting for us — we know what it “thinks” the value of a particular BBE should be, and we can compare how far off its estimates are from what actually occurred over fairly large samples.
As noted, there are nearly 300 bins, so it’s not worth showing all of their individual wOBAcon–xwOBAcon “biases” here. Instead, I will simply list the ones that occurred most frequently in 2019. Note that “spray_direction” below does not coincidence with location; a ground ball hit toward right-center field does not mean it ended up there (in fact, it was probably fielded by the second baseman).
stand | bb_type | bb_quality | spray_direction | count | wOBAcon–xwOBAcon |
---|---|---|---|---|---|
R | ground_ball | weak | LCF | 6,949 | 0.002 |
R | ground_ball | weak | C-LCF | 5,343 | -0.063 |
R | ground_ball | weak | L-LCF | 5,043 | 0.014 |
L | ground_ball | weak | RCF | 4,699 | -0.070 |
L | ground_ball | weak | R-RCF | 4,592 | -0.037 |
R | ground_ball | weak | RCF | 2,527 | 0.041 |
R | ground_ball | weak | CF | 2,416 | 0.188 |
R | ground_ball | weak | C-RCF | 2,304 | -0.055 |
L | ground_ball | weak | C-RCF | 2,297 | 0.000 |
R | fly_ball | weak | RCF | 2,027 | -0.061 |
R | fly_ball | weak | R-RCF | 1,924 | 0.059 |
R | line_drive | flare | LCF | 1,908 | -0.091 |
R | fly_ball | weak | C-RCF | 1,763 | -0.062 |
R | line_drive | flare | CF | 1,731 | -0.051 |
R | line_drive | flare | C-LCF | 1,701 | 0.039 |
C-LCF = shading right of left-center (between LCF and CF)
C-RCF = shading left of right-center (between CF and RCF)
R-RCF = shading right of right-center (between RCF and RF)
Per the table above, the average xwOBAcon for a ground ball toward right-center field exceeds the average actual wOBAcon by about 70 points — that is, the xwOBAcon value for this particular BBE bin is potentially 70 points too high. Let’s adjust for that!
This is probably why you’re here, beyond the drudgery of my methodology: here is a list of all hitters with 150+ BBE in 2019, with their xwOBAcon pre- and post-spray angle adjustments, sorted descending by biggest changes in xwOBAcon (‘delta’). Basically, a large positive delta suggests that xwOBAcon had been undervaluing so-and-so’s BBEs (by virtue of contact quality), and vice versa.
Above all, remember that the bins used here are somewhat generalized. It’s the nature of the bast. But I imagine something more specific than this would still yield similar results. However, incorporating park factors might change these estimates slightly, too, especially to dead left, center, and right fields (I doubt the gaps matter as much). Consider these estimates below effectively park-neutral.
It’s an extremely good Friday for Jose Ramirez, Willie Calhoun, Matt Olson, and Jeff McNeil fans (me!!!!).
Hitter_Name | count | wOBAcon | old xwOBAcon | old diff | delta | new xwOBAcon | new diff |
---|---|---|---|---|---|---|---|
Tom Murphy | 170 | 0.498 | 0.413 | 0.085 | 0.043 | 0.457 | 0.041 |
Matt Adams | 190 | 0.438 | 0.463 | -0.025 | 0.039 | 0.502 | -0.064 |
Matt Joyce | 153 | 0.401 | 0.391 | 0.011 | 0.037 | 0.427 | -0.026 |
Tucker Barnhart | 227 | 0.349 | 0.324 | 0.025 | 0.035 | 0.360 | -0.011 |
Tyler Flowers | 163 | 0.439 | 0.405 | 0.034 | 0.033 | 0.438 | 0.001 |
Jose Ramirez | 408 | 0.351 | 0.352 | -0.001 | 0.033 | 0.384 | -0.034 |
Kurt Suzuki | 243 | 0.356 | 0.360 | -0.004 | 0.032 | 0.392 | -0.037 |
Willie Calhoun | 249 | 0.395 | 0.362 | 0.033 | 0.029 | 0.391 | 0.004 |
Francisco Mejia | 164 | 0.402 | 0.340 | 0.062 | 0.029 | 0.369 | 0.033 |
Matt Olson | 333 | 0.468 | 0.495 | -0.027 | 0.028 | 0.523 | -0.055 |
Dylan Moore | 150 | 0.401 | 0.354 | 0.047 | 0.027 | 0.381 | 0.020 |
Brett Gardner | 377 | 0.394 | 0.314 | 0.080 | 0.027 | 0.341 | 0.053 |
Kris Bryant | 396 | 0.452 | 0.397 | 0.055 | 0.026 | 0.423 | 0.029 |
Greg Garcia | 228 | 0.344 | 0.292 | 0.052 | 0.025 | 0.317 | 0.027 |
Josh Phegley | 250 | 0.330 | 0.321 | 0.008 | 0.025 | 0.346 | -0.017 |
Brian McCann | 226 | 0.336 | 0.350 | -0.014 | 0.025 | 0.375 | -0.039 |
Jeff McNeil | 430 | 0.411 | 0.369 | 0.042 | 0.024 | 0.393 | 0.018 |
Byron Buxton | 200 | 0.428 | 0.369 | 0.058 | 0.024 | 0.393 | 0.034 |
Andrelton Simmons | 350 | 0.301 | 0.272 | 0.029 | 0.024 | 0.296 | 0.005 |
Fernando Tatis Jr. | 226 | 0.541 | 0.439 | 0.102 | 0.023 | 0.462 | 0.079 |
Rhys Hoskins | 389 | 0.401 | 0.389 | 0.012 | 0.023 | 0.412 | -0.011 |
Marcell Ozuna | 363 | 0.379 | 0.444 | -0.065 | 0.023 | 0.467 | -0.088 |
Freddy Galvis | 410 | 0.393 | 0.350 | 0.043 | 0.023 | 0.373 | 0.020 |
Eric Sogard | 328 | 0.376 | 0.329 | 0.047 | 0.023 | 0.352 | 0.024 |
Jake Marisnick | 199 | 0.389 | 0.314 | 0.075 | 0.023 | 0.336 | 0.053 |
Brian Dozier | 305 | 0.375 | 0.378 | -0.002 | 0.022 | 0.400 | -0.025 |
Stephen Vogt | 189 | 0.406 | 0.410 | -0.004 | 0.022 | 0.432 | -0.026 |
Mark Canha | 297 | 0.447 | 0.403 | 0.044 | 0.022 | 0.425 | 0.022 |
Cesar Hernandez | 505 | 0.349 | 0.314 | 0.036 | 0.022 | 0.335 | 0.014 |
Edwin Encarnacion | 302 | 0.435 | 0.436 | -0.001 | 0.021 | 0.457 | -0.022 |
Steve Wilkerson | 223 | 0.371 | 0.311 | 0.060 | 0.020 | 0.331 | 0.039 |
Mitch Garver | 219 | 0.517 | 0.478 | 0.040 | 0.020 | 0.498 | 0.019 |
Max Kepler | 418 | 0.393 | 0.370 | 0.024 | 0.020 | 0.390 | 0.004 |
Ildemaro Vargas | 176 | 0.325 | 0.302 | 0.023 | 0.020 | 0.321 | 0.004 |
Victor Robles | 406 | 0.376 | 0.328 | 0.048 | 0.020 | 0.348 | 0.028 |
Robinson Chirinos | 245 | 0.417 | 0.387 | 0.030 | 0.020 | 0.406 | 0.011 |
Hunter Renfroe | 282 | 0.437 | 0.423 | 0.015 | 0.020 | 0.442 | -0.005 |
Randal Grichuk | 409 | 0.396 | 0.385 | 0.011 | 0.019 | 0.404 | -0.008 |
Adam Frazier | 478 | 0.332 | 0.325 | 0.007 | 0.019 | 0.344 | -0.011 |
Joc Pederson | 333 | 0.431 | 0.400 | 0.031 | 0.019 | 0.418 | 0.012 |
Christin Stewart | 268 | 0.347 | 0.380 | -0.033 | 0.019 | 0.399 | -0.052 |
Leonys Martin | 154 | 0.326 | 0.310 | 0.016 | 0.018 | 0.328 | -0.003 |
Mike Tauchman | 189 | 0.442 | 0.374 | 0.068 | 0.018 | 0.392 | 0.049 |
Michael Chavis | 213 | 0.451 | 0.398 | 0.053 | 0.018 | 0.416 | 0.035 |
Daniel Murphy | 364 | 0.365 | 0.319 | 0.046 | 0.018 | 0.337 | 0.028 |
J.P. Crawford | 260 | 0.328 | 0.322 | 0.006 | 0.018 | 0.340 | -0.012 |
Yordan Alvarez | 216 | 0.552 | 0.515 | 0.037 | 0.018 | 0.533 | 0.020 |
Nolan Arenado | 482 | 0.434 | 0.371 | 0.063 | 0.017 | 0.389 | 0.045 |
Steven Duggar | 185 | 0.340 | 0.333 | 0.006 | 0.017 | 0.350 | -0.011 |
Michael Conforto | 396 | 0.414 | 0.429 | -0.015 | 0.017 | 0.446 | -0.032 |
Dee Gordon | 338 | 0.312 | 0.271 | 0.041 | 0.017 | 0.288 | 0.023 |
Welington Castillo | 155 | 0.379 | 0.404 | -0.025 | 0.017 | 0.421 | -0.042 |
Trea Turner | 402 | 0.421 | 0.376 | 0.046 | 0.017 | 0.392 | 0.029 |
Xander Bogaerts | 491 | 0.444 | 0.392 | 0.052 | 0.016 | 0.408 | 0.036 |
Paul DeJong | 423 | 0.364 | 0.367 | -0.002 | 0.016 | 0.383 | -0.019 |
Alex Bregman | 462 | 0.434 | 0.371 | 0.063 | 0.016 | 0.388 | 0.047 |
Maikel Franco | 307 | 0.327 | 0.349 | -0.022 | 0.016 | 0.366 | -0.038 |
Austin Nola | 172 | 0.414 | 0.353 | 0.061 | 0.016 | 0.369 | 0.045 |
Christian Vazquez | 382 | 0.393 | 0.373 | 0.019 | 0.016 | 0.389 | 0.003 |
Gordon Beckham | 151 | 0.358 | 0.368 | -0.010 | 0.016 | 0.384 | -0.026 |
Ketel Marte | 480 | 0.449 | 0.400 | 0.049 | 0.016 | 0.415 | 0.033 |
Didi Gregorius | 268 | 0.330 | 0.316 | 0.014 | 0.016 | 0.332 | -0.002 |
Jose Iglesias | 429 | 0.343 | 0.309 | 0.034 | 0.016 | 0.325 | 0.018 |
Austin Hedges | 197 | 0.309 | 0.352 | -0.043 | 0.016 | 0.368 | -0.059 |
Yulieski Gurriel | 493 | 0.395 | 0.339 | 0.055 | 0.015 | 0.355 | 0.040 |
Derek Dietrich | 170 | 0.384 | 0.416 | -0.032 | 0.015 | 0.431 | -0.047 |
Rougned Odor | 337 | 0.404 | 0.425 | -0.021 | 0.015 | 0.441 | -0.036 |
Wilmer Flores | 230 | 0.387 | 0.355 | 0.032 | 0.015 | 0.371 | 0.016 |
Eduardo Escobar | 509 | 0.391 | 0.369 | 0.022 | 0.015 | 0.384 | 0.007 |
Ben Gamel | 206 | 0.392 | 0.364 | 0.028 | 0.015 | 0.379 | 0.013 |
Tim Beckham | 198 | 0.428 | 0.398 | 0.029 | 0.015 | 0.413 | 0.014 |
Austin Riley | 160 | 0.485 | 0.479 | 0.006 | 0.015 | 0.494 | -0.009 |
Adeiny Hechavarria | 154 | 0.371 | 0.342 | 0.029 | 0.015 | 0.356 | 0.014 |
Miguel Sano | 214 | 0.562 | 0.534 | 0.028 | 0.015 | 0.549 | 0.013 |
Renato Nunez | 386 | 0.395 | 0.408 | -0.013 | 0.014 | 0.422 | -0.027 |
Albert Pujols | 420 | 0.321 | 0.343 | -0.022 | 0.014 | 0.357 | -0.037 |
Ronny Rodriguez | 192 | 0.376 | 0.376 | 0.001 | 0.014 | 0.390 | -0.013 |
Eugenio Suarez | 386 | 0.506 | 0.461 | 0.044 | 0.014 | 0.475 | 0.030 |
Anthony Rendon | 455 | 0.451 | 0.451 | 0.000 | 0.014 | 0.465 | -0.014 |
Billy Hamilton | 223 | 0.293 | 0.275 | 0.018 | 0.014 | 0.288 | 0.005 |
Brian Anderson | 339 | 0.407 | 0.398 | 0.009 | 0.014 | 0.412 | -0.005 |
Ehire Adrianza | 165 | 0.351 | 0.349 | 0.002 | 0.014 | 0.363 | -0.012 |
Austin Barnes | 153 | 0.311 | 0.285 | 0.026 | 0.014 | 0.298 | 0.013 |
Trevor Story | 410 | 0.494 | 0.419 | 0.075 | 0.014 | 0.433 | 0.061 |
Melky Cabrera | 333 | 0.322 | 0.316 | 0.006 | 0.013 | 0.330 | -0.008 |
Jonathan Lucroy | 241 | 0.298 | 0.327 | -0.029 | 0.013 | 0.340 | -0.042 |
Cheslor Cuthbert | 236 | 0.342 | 0.346 | -0.004 | 0.013 | 0.359 | -0.018 |
Brandon Belt | 397 | 0.348 | 0.388 | -0.040 | 0.013 | 0.402 | -0.053 |
Niko Goodrum | 283 | 0.413 | 0.388 | 0.025 | 0.013 | 0.401 | 0.012 |
Ian Kinsler | 191 | 0.323 | 0.285 | 0.038 | 0.013 | 0.298 | 0.025 |
Jurickson Profar | 380 | 0.311 | 0.342 | -0.031 | 0.013 | 0.355 | -0.044 |
Kevin Pillar | 514 | 0.340 | 0.330 | 0.010 | 0.013 | 0.343 | -0.003 |
Mike Moustakas | 413 | 0.398 | 0.402 | -0.004 | 0.013 | 0.414 | -0.017 |
Kyle Seager | 304 | 0.374 | 0.400 | -0.026 | 0.013 | 0.412 | -0.038 |
Starling Marte | 444 | 0.398 | 0.393 | 0.005 | 0.013 | 0.406 | -0.008 |
Mike Trout | 342 | 0.504 | 0.524 | -0.021 | 0.012 | 0.536 | -0.033 |
Gary Sanchez | 266 | 0.449 | 0.484 | -0.035 | 0.012 | 0.496 | -0.047 |
Todd Frazier | 327 | 0.385 | 0.361 | 0.024 | 0.012 | 0.373 | 0.012 |
Eric Thames | 251 | 0.476 | 0.423 | 0.053 | 0.012 | 0.435 | 0.041 |
Jake Bauers | 256 | 0.356 | 0.344 | 0.013 | 0.012 | 0.355 | 0.001 |
Willson Contreras | 251 | 0.449 | 0.399 | 0.050 | 0.012 | 0.410 | 0.038 |
Hanser Alberto | 474 | 0.339 | 0.310 | 0.029 | 0.012 | 0.322 | 0.017 |
Tommy Edman | 262 | 0.414 | 0.369 | 0.045 | 0.012 | 0.380 | 0.034 |
Jose Altuve | 411 | 0.412 | 0.366 | 0.046 | 0.012 | 0.377 | 0.035 |
Francisco Lindor | 493 | 0.391 | 0.359 | 0.032 | 0.011 | 0.370 | 0.020 |
Juan Lagares | 178 | 0.321 | 0.301 | 0.020 | 0.011 | 0.313 | 0.009 |
Garrett Hampson | 209 | 0.372 | 0.310 | 0.062 | 0.011 | 0.321 | 0.051 |
Kevan Smith | 154 | 0.333 | 0.389 | -0.056 | 0.011 | 0.400 | -0.067 |
Leury Garcia | 449 | 0.356 | 0.313 | 0.043 | 0.011 | 0.324 | 0.033 |
Isiah Kiner-Falefa | 154 | 0.309 | 0.284 | 0.026 | 0.011 | 0.295 | 0.015 |
Joe Panik | 388 | 0.271 | 0.302 | -0.031 | 0.011 | 0.313 | -0.042 |
Carson Kelly | 232 | 0.400 | 0.408 | -0.007 | 0.010 | 0.418 | -0.018 |
Kevin Newman | 426 | 0.366 | 0.312 | 0.054 | 0.010 | 0.322 | 0.044 |
Omar Narvaez | 330 | 0.398 | 0.374 | 0.024 | 0.010 | 0.384 | 0.014 |
Mike Zunino | 161 | 0.323 | 0.391 | -0.067 | 0.010 | 0.401 | -0.078 |
Rafael Devers | 517 | 0.435 | 0.416 | 0.019 | 0.010 | 0.426 | 0.009 |
Rio Ruiz | 278 | 0.333 | 0.332 | 0.002 | 0.010 | 0.341 | -0.008 |
Matt Chapman | 423 | 0.421 | 0.420 | 0.001 | 0.010 | 0.430 | -0.008 |
Luis Arraez | 297 | 0.359 | 0.327 | 0.033 | 0.010 | 0.336 | 0.023 |
Adam Eaton | 457 | 0.365 | 0.341 | 0.024 | 0.010 | 0.351 | 0.014 |
Brock Holt | 204 | 0.370 | 0.328 | 0.043 | 0.010 | 0.337 | 0.033 |
Dwight Smith Jr. | 274 | 0.351 | 0.340 | 0.012 | 0.010 | 0.349 | 0.002 |
Enrique Hernandez | 312 | 0.355 | 0.362 | -0.007 | 0.009 | 0.371 | -0.016 |
Delino DeShields | 258 | 0.347 | 0.295 | 0.052 | 0.009 | 0.304 | 0.043 |
Anthony Santander | 285 | 0.384 | 0.377 | 0.007 | 0.009 | 0.386 | -0.003 |
Johan Camargo | 182 | 0.326 | 0.331 | -0.005 | 0.009 | 0.340 | -0.014 |
Yan Gomes | 226 | 0.347 | 0.355 | -0.008 | 0.009 | 0.364 | -0.017 |
Jorge Polanco | 515 | 0.396 | 0.373 | 0.023 | 0.009 | 0.381 | 0.014 |
Pete Alonso | 395 | 0.487 | 0.473 | 0.014 | 0.009 | 0.481 | 0.006 |
Adam Jones | 377 | 0.361 | 0.367 | -0.006 | 0.008 | 0.375 | -0.014 |
Kyle Schwarber | 373 | 0.447 | 0.471 | -0.025 | 0.008 | 0.480 | -0.033 |
Dexter Fowler | 346 | 0.374 | 0.387 | -0.013 | 0.008 | 0.395 | -0.021 |
Jarrod Dyson | 310 | 0.299 | 0.267 | 0.032 | 0.008 | 0.275 | 0.024 |
Andrew McCutchen | 163 | 0.394 | 0.381 | 0.013 | 0.008 | 0.390 | 0.005 |
Starlin Castro | 525 | 0.355 | 0.357 | -0.002 | 0.008 | 0.365 | -0.010 |
Jonathan Schoop | 302 | 0.418 | 0.401 | 0.017 | 0.008 | 0.409 | 0.009 |
J.T. Realmuto | 414 | 0.408 | 0.400 | 0.007 | 0.008 | 0.408 | 0.000 |
Daniel Vogelbach | 310 | 0.386 | 0.416 | -0.030 | 0.008 | 0.423 | -0.038 |
Danny Jansen | 263 | 0.309 | 0.360 | -0.051 | 0.008 | 0.368 | -0.059 |
David Fletcher | 529 | 0.318 | 0.316 | 0.002 | 0.008 | 0.323 | -0.005 |
Lorenzo Cain | 452 | 0.326 | 0.352 | -0.027 | 0.008 | 0.360 | -0.034 |
Nicky Lopez | 327 | 0.276 | 0.245 | 0.031 | 0.007 | 0.252 | 0.024 |
Adalberto Mondesi | 288 | 0.410 | 0.363 | 0.046 | 0.007 | 0.371 | 0.039 |
Tim Anderson | 386 | 0.453 | 0.387 | 0.066 | 0.007 | 0.395 | 0.058 |
Marcus Semien | 544 | 0.393 | 0.370 | 0.023 | 0.007 | 0.377 | 0.015 |
Jay Bruce | 227 | 0.405 | 0.444 | -0.038 | 0.007 | 0.451 | -0.046 |
Jordan Luplow | 164 | 0.463 | 0.400 | 0.062 | 0.007 | 0.407 | 0.055 |
Chad Pinder | 254 | 0.364 | 0.390 | -0.025 | 0.007 | 0.397 | -0.033 |
Oscar Mercado | 356 | 0.363 | 0.337 | 0.027 | 0.007 | 0.344 | 0.020 |
Pedro Severino | 231 | 0.366 | 0.391 | -0.025 | 0.007 | 0.398 | -0.032 |
Kolten Wong | 397 | 0.356 | 0.302 | 0.054 | 0.007 | 0.308 | 0.048 |
Mike Yastrzemski | 257 | 0.467 | 0.448 | 0.018 | 0.006 | 0.455 | 0.012 |
Jorge Soler | 401 | 0.482 | 0.505 | -0.023 | 0.006 | 0.512 | -0.029 |
Tyler White | 162 | 0.318 | 0.319 | 0.000 | 0.006 | 0.325 | -0.007 |
Javier Baez | 374 | 0.472 | 0.436 | 0.036 | 0.006 | 0.442 | 0.030 |
Billy McKinney | 176 | 0.355 | 0.342 | 0.013 | 0.006 | 0.348 | 0.007 |
Ender Inciarte | 154 | 0.345 | 0.293 | 0.052 | 0.006 | 0.299 | 0.046 |
Danny Santana | 322 | 0.492 | 0.467 | 0.025 | 0.006 | 0.473 | 0.019 |
Chris Taylor | 256 | 0.426 | 0.376 | 0.050 | 0.006 | 0.381 | 0.045 |
Willians Astudillo | 180 | 0.283 | 0.327 | -0.044 | 0.006 | 0.332 | -0.049 |
Whit Merrifield | 546 | 0.398 | 0.364 | 0.034 | 0.006 | 0.369 | 0.028 |
Anthony Rizzo | 421 | 0.396 | 0.400 | -0.004 | 0.006 | 0.405 | -0.009 |
Eddie Rosario | 471 | 0.377 | 0.370 | 0.007 | 0.006 | 0.376 | 0.001 |
Tyler Naquin | 208 | 0.404 | 0.393 | 0.011 | 0.005 | 0.398 | 0.006 |
Asdrubal Cabrera | 347 | 0.362 | 0.349 | 0.013 | 0.005 | 0.354 | 0.008 |
Bryan Reynolds | 369 | 0.449 | 0.426 | 0.023 | 0.005 | 0.431 | 0.018 |
Curtis Granderson | 216 | 0.314 | 0.362 | -0.048 | 0.005 | 0.367 | -0.053 |
Mallex Smith | 363 | 0.325 | 0.275 | 0.050 | 0.005 | 0.280 | 0.046 |
Franmil Reyes | 339 | 0.446 | 0.478 | -0.032 | 0.005 | 0.482 | -0.036 |
Jose Osuna | 214 | 0.354 | 0.360 | -0.007 | 0.005 | 0.365 | -0.011 |
Yasmani Grandal | 372 | 0.403 | 0.418 | -0.015 | 0.004 | 0.422 | -0.019 |
Martin Maldonado | 245 | 0.331 | 0.352 | -0.021 | 0.004 | 0.357 | -0.025 |
Tony Wolters | 295 | 0.305 | 0.300 | 0.005 | 0.004 | 0.304 | 0.001 |
Phil Ervin | 171 | 0.419 | 0.354 | 0.064 | 0.004 | 0.359 | 0.060 |
Robinson Cano | 321 | 0.339 | 0.374 | -0.036 | 0.004 | 0.378 | -0.040 |
Bryce Harper | 395 | 0.451 | 0.476 | -0.024 | 0.004 | 0.479 | -0.028 |
Jon Berti | 180 | 0.405 | 0.365 | 0.039 | 0.004 | 0.369 | 0.036 |
Eric Hosmer | 459 | 0.387 | 0.378 | 0.009 | 0.003 | 0.381 | 0.006 |
Ronald Guzman | 169 | 0.381 | 0.422 | -0.041 | 0.003 | 0.426 | -0.044 |
John Hicks | 203 | 0.372 | 0.353 | 0.019 | 0.003 | 0.356 | 0.016 |
Corey Dickerson | 200 | 0.463 | 0.394 | 0.069 | 0.003 | 0.397 | 0.066 |
Roberto Perez | 270 | 0.394 | 0.396 | -0.002 | 0.003 | 0.399 | -0.005 |
Ramon Laureano | 312 | 0.451 | 0.427 | 0.024 | 0.003 | 0.429 | 0.021 |
Manuel Margot | 301 | 0.334 | 0.292 | 0.042 | 0.003 | 0.295 | 0.040 |
Harold Castro | 271 | 0.373 | 0.354 | 0.019 | 0.003 | 0.356 | 0.017 |
Wilson Ramos | 404 | 0.346 | 0.346 | 0.001 | 0.002 | 0.348 | -0.002 |
Adam Haseley | 161 | 0.382 | 0.313 | 0.069 | 0.002 | 0.316 | 0.066 |
Jean Segura | 497 | 0.339 | 0.324 | 0.015 | 0.002 | 0.326 | 0.013 |
Martin Prado | 204 | 0.269 | 0.310 | -0.041 | 0.002 | 0.312 | -0.043 |
Albert Almora | 277 | 0.311 | 0.321 | -0.010 | 0.002 | 0.323 | -0.012 |
Mitch Haniger | 160 | 0.414 | 0.420 | -0.006 | 0.002 | 0.422 | -0.008 |
David Dahl | 269 | 0.473 | 0.429 | 0.045 | 0.002 | 0.431 | 0.043 |
Josh Reddick | 433 | 0.332 | 0.336 | -0.004 | 0.002 | 0.338 | -0.006 |
Brandon Drury | 296 | 0.342 | 0.399 | -0.057 | 0.002 | 0.401 | -0.059 |
Jonathan Villar | 465 | 0.412 | 0.368 | 0.044 | 0.002 | 0.370 | 0.042 |
Brandon Crawford | 385 | 0.313 | 0.351 | -0.038 | 0.002 | 0.353 | -0.040 |
Corey Seager | 390 | 0.387 | 0.374 | 0.014 | 0.002 | 0.375 | 0.012 |
Victor Caratini | 188 | 0.384 | 0.393 | -0.009 | 0.002 | 0.395 | -0.011 |
Victor Reyes | 212 | 0.402 | 0.346 | 0.056 | 0.002 | 0.347 | 0.054 |
Raimel Tapia | 324 | 0.379 | 0.338 | 0.040 | 0.002 | 0.340 | 0.039 |
Richie Martin | 202 | 0.309 | 0.283 | 0.026 | 0.002 | 0.285 | 0.025 |
Luis Urias | 159 | 0.311 | 0.324 | -0.013 | 0.002 | 0.325 | -0.014 |
Josh VanMeter | 171 | 0.355 | 0.366 | -0.011 | 0.001 | 0.367 | -0.012 |
Colin Moran | 344 | 0.399 | 0.405 | -0.006 | 0.001 | 0.406 | -0.007 |
Clint Frazier | 157 | 0.445 | 0.416 | 0.029 | 0.001 | 0.418 | 0.028 |
Tommy La Stella | 261 | 0.363 | 0.367 | -0.004 | 0.001 | 0.368 | -0.005 |
Hunter Pence | 214 | 0.453 | 0.413 | 0.040 | 0.001 | 0.414 | 0.039 |
Yoan Moncada | 357 | 0.510 | 0.467 | 0.042 | 0.001 | 0.468 | 0.042 |
Jose Abreu | 480 | 0.425 | 0.446 | -0.021 | 0.000 | 0.446 | -0.022 |
Greg Allen | 179 | 0.310 | 0.302 | 0.008 | 0.000 | 0.302 | 0.008 |
Marwin Gonzalez | 325 | 0.369 | 0.386 | -0.016 | 0.000 | 0.386 | -0.017 |
Christian Yelich | 365 | 0.538 | 0.495 | 0.043 | 0.000 | 0.495 | 0.043 |
Khris Davis | 330 | 0.366 | 0.415 | -0.049 | 0.000 | 0.415 | -0.049 |
Michael Brantley | 507 | 0.384 | 0.380 | 0.004 | 0.000 | 0.380 | 0.004 |
Giovanny Urshela | 352 | 0.441 | 0.414 | 0.027 | 0.000 | 0.413 | 0.028 |
Brandon Lowe | 180 | 0.517 | 0.488 | 0.029 | 0.000 | 0.487 | 0.030 |
Yolmer Sanchez | 384 | 0.311 | 0.298 | 0.014 | 0.000 | 0.297 | 0.014 |
Austin Meadows | 388 | 0.464 | 0.452 | 0.012 | -0.001 | 0.451 | 0.013 |
James McCann | 301 | 0.443 | 0.430 | 0.013 | -0.001 | 0.429 | 0.014 |
Gleyber Torres | 415 | 0.438 | 0.413 | 0.026 | -0.001 | 0.412 | 0.026 |
David Peralta | 291 | 0.393 | 0.338 | 0.054 | -0.001 | 0.338 | 0.055 |
Josh Bell | 408 | 0.440 | 0.444 | -0.004 | -0.001 | 0.443 | -0.003 |
Josh Donaldson | 381 | 0.451 | 0.468 | -0.017 | -0.001 | 0.467 | -0.016 |
Miguel Rojas | 423 | 0.320 | 0.315 | 0.005 | -0.001 | 0.313 | 0.006 |
Lewis Brinson | 151 | 0.250 | 0.302 | -0.052 | -0.002 | 0.300 | -0.050 |
Ozzie Albies | 522 | 0.399 | 0.383 | 0.016 | -0.002 | 0.381 | 0.018 |
Nick Senzel | 269 | 0.394 | 0.365 | 0.029 | -0.002 | 0.363 | 0.031 |
Willy Adames | 375 | 0.395 | 0.397 | -0.002 | -0.002 | 0.395 | 0.000 |
Matt Beaty | 213 | 0.349 | 0.341 | 0.008 | -0.002 | 0.339 | 0.010 |
A.J. Pollock | 232 | 0.402 | 0.390 | 0.012 | -0.002 | 0.388 | 0.014 |
Jason Kipnis | 371 | 0.335 | 0.350 | -0.015 | -0.002 | 0.348 | -0.013 |
Hunter Dozier | 370 | 0.453 | 0.417 | 0.036 | -0.002 | 0.414 | 0.039 |
Kole Calhoun | 383 | 0.406 | 0.424 | -0.018 | -0.002 | 0.422 | -0.016 |
Logan Forsythe | 214 | 0.358 | 0.393 | -0.035 | -0.002 | 0.391 | -0.033 |
Jordy Mercer | 191 | 0.394 | 0.394 | 0.000 | -0.002 | 0.392 | 0.002 |
David Bote | 211 | 0.405 | 0.370 | 0.035 | -0.003 | 0.367 | 0.038 |
Lourdes Gurriel | 226 | 0.465 | 0.436 | 0.028 | -0.003 | 0.434 | 0.031 |
Tim Locastro | 163 | 0.323 | 0.271 | 0.052 | -0.003 | 0.269 | 0.054 |
Yadier Molina | 359 | 0.327 | 0.365 | -0.038 | -0.003 | 0.362 | -0.035 |
Robbie Grossman | 333 | 0.311 | 0.342 | -0.031 | -0.003 | 0.339 | -0.028 |
Justin Turner | 388 | 0.403 | 0.413 | -0.010 | -0.003 | 0.410 | -0.007 |
Hernan Perez | 166 | 0.352 | 0.325 | 0.027 | -0.003 | 0.322 | 0.030 |
Donovan Solano | 167 | 0.426 | 0.421 | 0.006 | -0.003 | 0.418 | 0.009 |
Scott Kingery | 309 | 0.445 | 0.414 | 0.031 | -0.003 | 0.411 | 0.034 |
Charlie Blackmon | 471 | 0.440 | 0.406 | 0.034 | -0.003 | 0.402 | 0.037 |
Nick Markakis | 354 | 0.343 | 0.373 | -0.030 | -0.003 | 0.369 | -0.026 |
Nicholas Castellanos | 472 | 0.434 | 0.439 | -0.005 | -0.004 | 0.435 | -0.001 |
Elvis Andrus | 505 | 0.332 | 0.340 | -0.009 | -0.004 | 0.337 | -0.005 |
Ian Desmond | 319 | 0.411 | 0.416 | -0.005 | -0.004 | 0.413 | -0.002 |
Ryan McMahon | 312 | 0.437 | 0.429 | 0.008 | -0.004 | 0.426 | 0.011 |
Orlando Arcia | 391 | 0.302 | 0.317 | -0.015 | -0.004 | 0.313 | -0.011 |
George Springer | 366 | 0.471 | 0.461 | 0.010 | -0.004 | 0.457 | 0.014 |
Aledmys Diaz | 184 | 0.348 | 0.332 | 0.016 | -0.004 | 0.328 | 0.020 |
Yonder Alonso | 220 | 0.295 | 0.351 | -0.056 | -0.004 | 0.347 | -0.052 |
J.D. Davis | 310 | 0.447 | 0.467 | -0.020 | -0.004 | 0.463 | -0.015 |
Paul Goldschmidt | 428 | 0.422 | 0.442 | -0.020 | -0.004 | 0.438 | -0.016 |
Jackie Bradley Jr. | 338 | 0.384 | 0.393 | -0.009 | -0.004 | 0.389 | -0.005 |
Ronald Acuna | 429 | 0.464 | 0.487 | -0.023 | -0.004 | 0.482 | -0.018 |
Ryan Braun | 351 | 0.426 | 0.405 | 0.021 | -0.005 | 0.400 | 0.026 |
Nick Ahmed | 448 | 0.354 | 0.351 | 0.002 | -0.005 | 0.346 | 0.007 |
Matt Carpenter | 287 | 0.364 | 0.386 | -0.022 | -0.005 | 0.381 | -0.017 |
Gerardo Parra | 216 | 0.328 | 0.341 | -0.013 | -0.005 | 0.336 | -0.008 |
Chris Davis | 170 | 0.375 | 0.436 | -0.060 | -0.005 | 0.431 | -0.055 |
Elias Diaz | 246 | 0.283 | 0.304 | -0.021 | -0.005 | 0.299 | -0.016 |
Nelson Cruz | 317 | 0.548 | 0.545 | 0.002 | -0.005 | 0.540 | 0.008 |
Andrew Benintendi | 399 | 0.392 | 0.403 | -0.011 | -0.006 | 0.398 | -0.006 |
Harrison Bader | 225 | 0.362 | 0.382 | -0.020 | -0.006 | 0.376 | -0.014 |
Neil Walker | 259 | 0.357 | 0.388 | -0.032 | -0.006 | 0.382 | -0.026 |
Buster Posey | 331 | 0.315 | 0.344 | -0.028 | -0.006 | 0.337 | -0.022 |
Juan Soto | 406 | 0.448 | 0.465 | -0.017 | -0.006 | 0.459 | -0.011 |
Harold Ramirez | 329 | 0.370 | 0.349 | 0.021 | -0.006 | 0.342 | 0.027 |
Shohei Ohtani | 275 | 0.452 | 0.441 | 0.011 | -0.006 | 0.434 | 0.018 |
Manny Machado | 449 | 0.382 | 0.393 | -0.011 | -0.006 | 0.386 | -0.005 |
Alex Gordon | 460 | 0.335 | 0.354 | -0.019 | -0.007 | 0.347 | -0.012 |
Brandon Dixon | 249 | 0.442 | 0.434 | 0.007 | -0.007 | 0.428 | 0.014 |
Rowdy Tellez | 254 | 0.402 | 0.447 | -0.045 | -0.007 | 0.440 | -0.038 |
Cody Bellinger | 445 | 0.468 | 0.480 | -0.013 | -0.007 | 0.473 | -0.006 |
Josh Naylor | 188 | 0.365 | 0.351 | 0.014 | -0.007 | 0.344 | 0.020 |
Cavan Biggio | 231 | 0.410 | 0.415 | -0.005 | -0.007 | 0.408 | 0.002 |
Mitch Moreland | 221 | 0.417 | 0.428 | -0.011 | -0.007 | 0.421 | -0.004 |
Howard Kendrick | 288 | 0.441 | 0.468 | -0.027 | -0.007 | 0.461 | -0.020 |
Mookie Betts | 494 | 0.404 | 0.438 | -0.034 | -0.008 | 0.430 | -0.027 |
Carlos Santana | 460 | 0.408 | 0.391 | 0.017 | -0.008 | 0.383 | 0.025 |
Miguel Cabrera | 385 | 0.366 | 0.396 | -0.029 | -0.008 | 0.388 | -0.021 |
Alex Verdugo | 299 | 0.367 | 0.358 | 0.009 | -0.008 | 0.350 | 0.017 |
Vladimir Guerrero Jr. | 367 | 0.365 | 0.363 | 0.003 | -0.008 | 0.354 | 0.011 |
Ji-Man Choi | 304 | 0.397 | 0.431 | -0.033 | -0.008 | 0.422 | -0.025 |
Joey Wendle | 191 | 0.298 | 0.311 | -0.013 | -0.008 | 0.303 | -0.005 |
Dansby Swanson | 361 | 0.372 | 0.414 | -0.042 | -0.008 | 0.406 | -0.033 |
Christian Walker | 367 | 0.436 | 0.459 | -0.023 | -0.009 | 0.450 | -0.015 |
Brian Goodwin | 283 | 0.439 | 0.388 | 0.051 | -0.009 | 0.380 | 0.059 |
Teoscar Hernandez | 256 | 0.466 | 0.431 | 0.035 | -0.009 | 0.422 | 0.044 |
Jesus Aguilar | 239 | 0.341 | 0.390 | -0.049 | -0.009 | 0.381 | -0.041 |
Yasiel Puig | 414 | 0.401 | 0.391 | 0.010 | -0.009 | 0.383 | 0.019 |
J.D. Martinez | 438 | 0.456 | 0.475 | -0.019 | -0.009 | 0.466 | -0.010 |
Kevin Kiermaier | 343 | 0.336 | 0.337 | -0.001 | -0.009 | 0.328 | 0.008 |
Freddie Freeman | 468 | 0.442 | 0.455 | -0.013 | -0.009 | 0.445 | -0.003 |
Nomar Mazara | 323 | 0.398 | 0.406 | -0.009 | -0.010 | 0.397 | 0.001 |
Dawel Lugo | 217 | 0.328 | 0.340 | -0.012 | -0.010 | 0.330 | -0.002 |
Yandy Diaz | 244 | 0.381 | 0.402 | -0.021 | -0.010 | 0.392 | -0.011 |
Austin Romine | 176 | 0.389 | 0.371 | 0.017 | -0.010 | 0.361 | 0.027 |
Tommy Pham | 434 | 0.381 | 0.376 | 0.005 | -0.010 | 0.366 | 0.015 |
Jeimer Candelario | 232 | 0.306 | 0.349 | -0.042 | -0.010 | 0.339 | -0.032 |
Tony Kemp | 200 | 0.298 | 0.256 | 0.042 | -0.010 | 0.245 | 0.052 |
Joey Votto | 402 | 0.366 | 0.389 | -0.023 | -0.011 | 0.378 | -0.013 |
Jason Heyward | 403 | 0.358 | 0.353 | 0.005 | -0.011 | 0.342 | 0.016 |
Garrett Cooper | 269 | 0.429 | 0.434 | -0.005 | -0.011 | 0.423 | 0.006 |
Trey Mancini | 460 | 0.442 | 0.422 | 0.020 | -0.012 | 0.410 | 0.032 |
Evan Longoria | 340 | 0.375 | 0.417 | -0.043 | -0.012 | 0.405 | -0.030 |
Jose Peraza | 309 | 0.292 | 0.311 | -0.019 | -0.012 | 0.299 | -0.006 |
Carlos Correa | 203 | 0.471 | 0.485 | -0.013 | -0.013 | 0.472 | -0.001 |
Jose Martinez | 251 | 0.378 | 0.409 | -0.031 | -0.013 | 0.396 | -0.018 |
Shin-Soo Choo | 396 | 0.423 | 0.434 | -0.011 | -0.013 | 0.420 | 0.002 |
Pablo Sandoval | 208 | 0.416 | 0.422 | -0.006 | -0.014 | 0.409 | 0.007 |
Luis Rengifo | 261 | 0.344 | 0.343 | 0.001 | -0.014 | 0.329 | 0.014 |
Cameron Maybin | 162 | 0.462 | 0.407 | 0.055 | -0.014 | 0.393 | 0.069 |
Domingo Santana | 286 | 0.452 | 0.476 | -0.024 | -0.014 | 0.462 | -0.010 |
Keston Hiura | 204 | 0.550 | 0.497 | 0.053 | -0.014 | 0.483 | 0.067 |
DJ LeMahieu | 510 | 0.416 | 0.417 | -0.002 | -0.014 | 0.403 | 0.013 |
Stephen Piscotty | 269 | 0.361 | 0.381 | -0.020 | -0.015 | 0.366 | -0.006 |
JaCoby Jones | 205 | 0.387 | 0.392 | -0.005 | -0.015 | 0.377 | 0.010 |
Addison Russell | 157 | 0.357 | 0.335 | 0.022 | -0.015 | 0.320 | 0.037 |
Aaron Judge | 235 | 0.534 | 0.553 | -0.019 | -0.016 | 0.537 | -0.003 |
Amed Rosario | 487 | 0.378 | 0.366 | 0.012 | -0.016 | 0.350 | 0.028 |
Justin Smoak | 303 | 0.343 | 0.425 | -0.082 | -0.016 | 0.409 | -0.066 |
C.J. Cron | 346 | 0.382 | 0.442 | -0.060 | -0.017 | 0.425 | -0.043 |
Wil Myers | 259 | 0.448 | 0.437 | 0.011 | -0.017 | 0.420 | 0.028 |
Eloy Jimenez | 328 | 0.444 | 0.446 | -0.002 | -0.017 | 0.429 | 0.015 |
Jorge Alfaro | 276 | 0.439 | 0.438 | 0.000 | -0.019 | 0.420 | 0.019 |
Luke Voit | 287 | 0.449 | 0.458 | -0.009 | -0.019 | 0.439 | 0.010 |
Max Muncy | 336 | 0.440 | 0.457 | -0.016 | -0.020 | 0.437 | 0.003 |
Travis d’Arnaud | 265 | 0.374 | 0.400 | -0.026 | -0.023 | 0.378 | -0.003 |
Jesse Winker | 277 | 0.374 | 0.384 | -0.010 | -0.024 | 0.359 | 0.014 |
Ryan O’Hearn | 229 | 0.331 | 0.377 | -0.046 | -0.025 | 0.352 | -0.021 |
Avisail Garcia | 360 | 0.410 | 0.411 | -0.001 | -0.028 | 0.383 | 0.027 |
Sorted by most- to least-underrated by xwOBAcon (‘delta’)
diff = wOBAcon–xwOBAcon
Note: my wOBAcon and xwOBAcon values do not perfectly align with Statcast’s values. This is because I have made small adjustments to the coefficients/assumptions for actual wOBAcon, forced errors to zero, adjusted for nulls, and so on. These small tweaks will ultimately lead to small (generally not meaningful) discrepancies. Just a heads up!
great work! this is phenomenal