
Welcome to the third article of my series discussing methods to evaluate hitters for fantasy baseball using Sabermetrics. Part one examined OPS and why it is a flawed statistical measure for individual hitters. In part two, I discussed wOBA (weighted On-Base Average) and showed how it was a better measure than OPS (On-Base Plus Slugging). This article will introduce xwOBA (expected weighted On-Base Average) and use it to contrast it with wOBA to show how hitters are statistically lucky or unlucky and what that might mean for fantasy baseball analysis
Please note that I have not invented or created any of the methodologies I will present and am merely trying to coalesce information already available in an easily digestible format that pertains to fantasy baseball.
What is xwOBA?
Before diving into xwOBA, let’s refresh what wOBA is because it is the basis for its calculation. Designed to look like On-Base Percentage, wOBA takes into account what a batter does at the plate. Some plate appearances have more value than others (home runs are more productive than walks, for example), so wOBA uses linear weights to measure a hitter’s productiveness (see Part 2 of this series for a more comprehensive explanation).
Before I explain the components of xwOBA, let me ask you if you ever saw a player that seemed unlucky (regular hard-contact line drives right to defenders) or lucky (lots of “seeing eye” grounders that get past the infield)? Safe to say, we have all seen this. Calculation of wOBA only measures the result of a plate appearance; wOBA calculates an out made by a diving defender the same as a lazily hit fly ball and likewise treats a weak grounder past a slow or out of position defender the same as a line drive hit sharply over the infield. Enter “expectation” stats.
Using Statcast data, “expected” stats (characterized by a lower case “x” in front of the old abbreviation) rework existing formulas to contrast what is and what should have been. In other words, expected stats determine what should have been the result of a plate appearance rather than what actually happened, like when Fernando Tatis Jr was robbed of a home run by Cody Bellinger in the 2020 National League Divisional Series. In this scenario, wOBA saw this event as an out, but xwOBA saw it as a home run.
The calculation for xwOBA uses Statcast’s Exit Velocity, Launch Angle, and Sprint Speed (on topped or weakly hit balls) to determine whether or not a batted ball was expected to be a hit and the expected outcome of said hit. In essence, xwOBA removes defense from the calculus because the batter does not influence what happens after making contact and factors in the batted ball’s quality to arrive at what the expected outcome ought to have been.
The actual formula for xwOBA is even more complicated than wOBA, and I will not present it here because I will not be liable for anyone’s head exploding.
xwOBA for 2020
First, let’s look at the xwOBA leaders for 2020 (using 150 minimum PAs). The average for wOBA last year was .320, and xwOBA was .312, per Fangraphs. Data sourced courtesy Baseball Savant:
Player | Year | PA | wOBA | xwOBA |
---|---|---|---|---|
Juan Soto | 2020 | 196 | 0.470 | 0.451 |
Freddie Freeman | 2020 | 262 | 0.449 | 0.441 |
Bryce Harper | 2020 | 244 | 0.393 | 0.435 |
Marcell Ozuna | 2020 | 267 | 0.437 | 0.417 |
Corey Seager | 2020 | 232 | 0.387 | 0.410 |
Mike Trout | 2020 | 241 | 0.400 | 0.408 |
Fernando Tatis Jr. | 2020 | 257 | 0.386 | 0.404 |
Brandon Belt | 2020 | 179 | 0.420 | 0.402 |
Ronald Acuna Jr. | 2020 | 202 | 0.407 | 0.401 |
Salvador Perez | 2020 | 156 | 0.403 | 0.387 |
George Springer | 2020 | 222 | 0.373 | 0.387 |
Justin Turner | 2020 | 175 | 0.370 | 0.386 |
Jesse Winker | 2020 | 183 | 0.389 | 0.383 |
Jake Cronenworth | 2020 | 192 | 0.350 | 0.383 |
Teoscar Hernandez | 2020 | 207 | 0.378 | 0.381 |
Paul Goldschmidt | 2020 | 231 | 0.381 | 0.380 |
Jose Abreu | 2020 | 262 | 0.404 | 0.379 |
Wil Myers | 2020 | 218 | 0.393 | 0.377 |
Anthony Rendon | 2020 | 232 | 0.389 | 0.375 |
Dominic Smith | 2020 | 199 | 0.405 | 0.374 |
Luke Voit | 2020 | 234 | 0.387 | 0.374 |
Trea Turner | 2020 | 259 | 0.406 | 0.372 |
Jason Heyward | 2020 | 181 | 0.362 | 0.371 |
Jose Iglesias | 2020 | 150 | 0.401 | 0.370 |
Travis d'Arnaud | 2020 | 184 | 0.386 | 0.370 |
Looking at the above list, I would like to think that there are not too many surprises. Everyone hitting over .400 should be there, but most would think Bryce Harper had a down year (more about that in the next section). The inclusion of both Brandon Belt and Jake Cronenworth might catch some observers off guard. The only player that surprised me on this list was Jason Heyward. The numbers support Heyward as a hitter expected to do well, but I have never considered him a decent fantasy option.
Now let’s look at the worst xwOBA performers from last year:
Player | Year | PA | wOBA | xwOBA |
---|---|---|---|---|
Cedric Mullins | 2020 | 153 | 0.308 | 0.243 |
Victor Robles | 2020 | 189 | 0.268 | 0.254 |
Hanser Alberto | 2020 | 231 | 0.297 | 0.255 |
Adalberto Mondesi | 2020 | 233 | 0.300 | 0.255 |
Niko Goodrum | 2020 | 179 | 0.257 | 0.256 |
Jonathan Villar | 2020 | 207 | 0.262 | 0.256 |
Austin Meadows | 2020 | 152 | 0.287 | 0.263 |
Javier Baez | 2020 | 235 | 0.252 | 0.265 |
Tim Lopes | 2020 | 151 | 0.275 | 0.266 |
Rio Ruiz | 2020 | 204 | 0.298 | 0.267 |
Edwin Encarnacion | 2020 | 181 | 0.267 | 0.268 |
Marcus Semien | 2020 | 236 | 0.294 | 0.274 |
Nolan Arenado | 2020 | 201 | 0.303 | 0.275 |
Evan White | 2020 | 202 | 0.257 | 0.277 |
Christian Vazquez | 2020 | 189 | 0.340 | 0.277 |
Nicky Lopez | 2020 | 192 | 0.250 | 0.278 |
Michael Chavis | 2020 | 158 | 0.268 | 0.279 |
Tyler O'Neill | 2020 | 157 | 0.267 | 0.280 |
Jose Altuve | 2020 | 210 | 0.274 | 0.280 |
Yoan Moncada | 2020 | 231 | 0.305 | 0.280 |
Todd Frazier | 2020 | 172 | 0.295 | 0.281 |
Kevin Newman | 2020 | 172 | 0.247 | 0.283 |
Erik Gonzalez | 2020 | 193 | 0.258 | 0.283 |
Garrett Hampson | 2020 | 184 | 0.285 | 0.283 |
Gregory Polanco | 2020 | 174 | 0.228 | 0.284 |
The above hitters were statistically “awful” base on the Fangraphs’ Rule of Thumb scale introduced in the last article. If you look at any of these players as a fantasy baseball General Manager and think they were good last year, you might have a long way to go in bettering yourself as a fantasy GM.
Now let’s look at the Top 25 best and worst players who failed to make 150 plate appearances last year.
Player | Year | PA | wOBA | xwOBA |
---|---|---|---|---|
Austin Slater | 2020 | 104 | 0.389 | 0.401 |
Will Smith | 2020 | 137 | 0.404 | 0.386 |
Max Stassi | 2020 | 105 | 0.364 | 0.371 |
Garrett Cooper | 2020 | 133 | 0.359 | 0.368 |
Aaron Judge | 2020 | 114 | 0.368 | 0.361 |
Rowdy Tellez | 2020 | 127 | 0.363 | 0.353 |
Tommy Pham | 2020 | 125 | 0.282 | 0.348 |
Luis Arraez | 2020 | 121 | 0.330 | 0.346 |
Josh Donaldson | 2020 | 102 | 0.356 | 0.344 |
Willi Castro | 2020 | 140 | 0.387 | 0.343 |
Jedd Gyorko | 2020 | 135 | 0.345 | 0.342 |
Danny Jansen | 2020 | 147 | 0.295 | 0.339 |
Jared Walsh | 2020 | 108 | 0.386 | 0.337 |
Bo Bichette | 2020 | 128 | 0.347 | 0.337 |
Darin Ruf | 2020 | 100 | 0.369 | 0.336 |
Sean Murphy | 2020 | 140 | 0.352 | 0.335 |
James McCann | 2020 | 111 | 0.372 | 0.329 |
DJ Stewart | 2020 | 112 | 0.347 | 0.326 |
Ryan Braun | 2020 | 141 | 0.317 | 0.325 |
Player | Year | PA | wOBA | xwOBA |
---|---|---|---|---|
Cole Tucker | 2020 | 116 | 0.230 | 0.215 |
Jo Adell | 2020 | 132 | 0.209 | 0.222 |
Austin Romine | 2020 | 135 | 0.249 | 0.224 |
Willie Calhoun | 2020 | 108 | 0.214 | 0.230 |
Johan Camargo | 2020 | 127 | 0.258 | 0.233 |
Roman Quinn | 2020 | 116 | 0.250 | 0.235 |
Isaac Paredes | 2020 | 108 | 0.251 | 0.236 |
Joey Bart | 2020 | 111 | 0.267 | 0.240 |
Shed Long Jr. | 2020 | 128 | 0.234 | 0.242 |
Ender Inciarte | 2020 | 131 | 0.230 | 0.248 |
Justin Smoak | 2020 | 132 | 0.261 | 0.250 |
Danny Mendick | 2020 | 114 | 0.281 | 0.250 |
Luis Rengifo | 2020 | 106 | 0.224 | 0.254 |
Amed Rosario | 2020 | 147 | 0.271 | 0.256 |
Sam Hilliard | 2020 | 114 | 0.296 | 0.257 |
Daniel Murphy | 2020 | 132 | 0.255 | 0.259 |
Josh Fuentes | 2020 | 103 | 0.318 | 0.259 |
Roberto Perez | 2020 | 110 | 0.225 | 0.260 |
Delino DeShields | 2020 | 120 | 0.276 | 0.260 |
Carson Kelly | 2020 | 129 | 0.275 | 0.261 |
Andrelton Simmons | 2020 | 127 | 0.308 | 0.261 |
We have now learned that xwOBA can help determine whether a player was somewhat lucky (because bloopers or grounders wound up as hits) or unlucky (hard-hit balls to well-placed defenders; defensemen who had superior range/speed to run a ball down).
But how does all this data help you, the fantasy GM?
The Difference between wOBA and xwOBA: Context is King
Numbers are great but knowing how to use them is what separates the professionals from the amateurs. Context is king here. The real genius of xwOBA comes by way of comparison to wOBA, comparing what actually happened to what was expected to happen.
When these two stats are compared by subtracting wOBA from xwOBA, one gets to see the gaps/difference between the two, and it highlights whether or not a hitter’s actual performance was better or worse than what was expected. Players that over-performed last year are likely to regress and have a less productive upcoming year; Players that under-performed were victims of hard/bad luck and should lead to increased fantasy production levels in the coming year, compared to last.
The following players were the most “lucky” last year, over-performed, and are due to regress toward the mean. It would be best if you lowered your expectations of these players for 2021. Two lists presented are for those with more than 150 PAs and then followed by those with 100-150 PAs.:
Player | Year | PA | wOBA | xwOBA | wOBA - xwOBA |
---|---|---|---|---|---|
DJ LeMahieu | 2020 | 216 | 0.422 | 0.355 | 0.067 |
Alex Verdugo | 2020 | 221 | 0.356 | 0.291 | 0.065 |
Cedric Mullins | 2020 | 153 | 0.308 | 0.243 | 0.065 |
Christian Vazquez | 2020 | 189 | 0.340 | 0.277 | 0.063 |
Jose Ramirez | 2020 | 254 | 0.408 | 0.358 | 0.050 |
Jackie Bradley Jr. | 2020 | 217 | 0.347 | 0.299 | 0.048 |
Raimel Tapia | 2020 | 206 | 0.333 | 0.286 | 0.047 |
Trevor Story | 2020 | 259 | 0.364 | 0.318 | 0.046 |
Willy Adames | 2020 | 205 | 0.341 | 0.295 | 0.046 |
Jonathan Schoop | 2020 | 177 | 0.334 | 0.288 | 0.046 |
Mike Yastrzemski | 2020 | 225 | 0.400 | 0.355 | 0.045 |
Adalberto Mondesi | 2020 | 233 | 0.300 | 0.255 | 0.045 |
Alex Dickerson | 2020 | 170 | 0.390 | 0.346 | 0.044 |
Mitch Moreland | 2020 | 152 | 0.366 | 0.322 | 0.044 |
Donovan Solano | 2020 | 203 | 0.351 | 0.307 | 0.044 |
Didi Gregorius | 2020 | 237 | 0.342 | 0.298 | 0.044 |
Cavan Biggio | 2020 | 265 | 0.350 | 0.307 | 0.043 |
Nelson Cruz | 2020 | 214 | 0.405 | 0.363 | 0.042 |
Michael Brantley | 2020 | 187 | 0.356 | 0.314 | 0.042 |
Wilmer Flores | 2020 | 213 | 0.342 | 0.300 | 0.042 |
Hanser Alberto | 2020 | 231 | 0.297 | 0.255 | 0.042 |
Renato Nunez | 2020 | 216 | 0.341 | 0.301 | 0.040 |
Michael Conforto | 2020 | 233 | 0.395 | 0.359 | 0.036 |
David Peralta | 2020 | 218 | 0.328 | 0.292 | 0.036 |
Lourdes Gurriel Jr. | 2020 | 224 | 0.366 | 0.331 | 0.035 |
Xander Bogaerts | 2020 | 225 | 0.362 | 0.327 | 0.035 |
Player | Year | PA | wOBA | xwOBA | wOBA - xwOBA |
---|---|---|---|---|---|
Josh Fuentes | 2020 | 103 | 0.318 | 0.259 | 0.059 |
Ryan Mountcastle | 2020 | 140 | 0.371 | 0.319 | 0.052 |
Miguel Rojas | 2020 | 143 | 0.373 | 0.323 | 0.050 |
Jared Walsh | 2020 | 108 | 0.386 | 0.337 | 0.049 |
Andrelton Simmons | 2020 | 127 | 0.308 | 0.261 | 0.047 |
Jason Kipnis | 2020 | 135 | 0.321 | 0.275 | 0.046 |
JaCoby Jones | 2020 | 108 | 0.353 | 0.308 | 0.045 |
Willi Castro | 2020 | 140 | 0.387 | 0.343 | 0.044 |
Ji-Man Choi | 2020 | 145 | 0.311 | 0.267 | 0.044 |
James McCann | 2020 | 111 | 0.372 | 0.329 | 0.043 |
Yandy Diaz | 2020 | 138 | 0.362 | 0.322 | 0.040 |
Sam Hilliard | 2020 | 114 | 0.296 | 0.257 | 0.039 |
Jacob Stallings | 2020 | 143 | 0.305 | 0.271 | 0.034 |
Darin Ruf | 2020 | 100 | 0.369 | 0.336 | 0.033 |
Ozzie Albies | 2020 | 124 | 0.324 | 0.291 | 0.033 |
Austin Barnes | 2020 | 104 | 0.302 | 0.269 | 0.033 |
Danny Mendick | 2020 | 114 | 0.281 | 0.250 | 0.031 |
Austin Hays | 2020 | 134 | 0.310 | 0.282 | 0.028 |
Joey Bart | 2020 | 111 | 0.267 | 0.240 | 0.027 |
Dexter Fowler | 2020 | 101 | 0.306 | 0.281 | 0.025 |
Johan Camargo | 2020 | 127 | 0.258 | 0.233 | 0.025 |
Austin Romine | 2020 | 135 | 0.249 | 0.224 | 0.025 |
Jake Cave | 2020 | 123 | 0.288 | 0.264 | 0.024 |
Phil Gosselin | 2020 | 102 | 0.309 | 0.286 | 0.023 |
Andres Gimenez | 2020 | 132 | 0.318 | 0.296 | 0.022 |
For a moment, let’s look at AL MVP DJ LeMahieu, who had the most considerable and enormous gap between what he did and what he was expected to do. LeMahieu’s wOBA was .422 and put him in the Excellent category, making him an elite hitter; his xwOBA was .355, just above average for the year. It’s easy to say any given MVP probably won’t repeat their performance in the coming year because of factors like a new contract, pressure, expectations, etc. Yet, in this case, we can statistically say LeMahieu was very lucky last year, over-performed, and analytics say he will no doubt regress in 2021.
Now let us examine the “unlucky” players last year, who under-performed and should progress toward the mean and have a better year than last. These players are what I call either Bounce-Back Candidates (first list) or Breakout Candidates (second list) for 2021.
Player | Year | PA | wOBA | xwOBA | wOBA - xwOBA |
---|---|---|---|---|---|
Gregory Polanco | 2020 | 174 | 0.228 | 0.284 | -0.056 |
Evan Longoria | 2020 | 209 | 0.303 | 0.354 | -0.051 |
Carlos Santana | 2020 | 255 | 0.311 | 0.360 | -0.049 |
Miguel Cabrera | 2020 | 231 | 0.318 | 0.361 | -0.043 |
Bryce Harper | 2020 | 244 | 0.393 | 0.435 | -0.042 |
Eduardo Escobar | 2020 | 222 | 0.253 | 0.294 | -0.041 |
Max Muncy | 2020 | 248 | 0.311 | 0.352 | -0.041 |
Marwin Gonzalez | 2020 | 199 | 0.265 | 0.304 | -0.039 |
Kevin Newman | 2020 | 172 | 0.247 | 0.283 | -0.036 |
Shohei Ohtani | 2020 | 175 | 0.286 | 0.322 | -0.036 |
Matt Carpenter | 2020 | 169 | 0.289 | 0.323 | -0.034 |
Gary Sanchez | 2020 | 178 | 0.266 | 0.299 | -0.033 |
Jake Cronenworth | 2020 | 192 | 0.350 | 0.383 | -0.033 |
Yuli Gurriel | 2020 | 230 | 0.276 | 0.308 | -0.032 |
Nick Castellanos | 2020 | 242 | 0.324 | 0.356 | -0.032 |
Bryan Reynolds | 2020 | 208 | 0.273 | 0.302 | -0.029 |
Nicky Lopez | 2020 | 192 | 0.250 | 0.278 | -0.028 |
Kyle Schwarber | 2020 | 224 | 0.302 | 0.330 | -0.028 |
Cody Bellinger | 2020 | 243 | 0.332 | 0.360 | -0.028 |
Christian Yelich | 2020 | 247 | 0.337 | 0.365 | -0.028 |
Erik Gonzalez | 2020 | 193 | 0.258 | 0.283 | -0.025 |
Austin Riley | 2020 | 206 | 0.302 | 0.325 | -0.023 |
Corey Seager | 2020 | 232 | 0.387 | 0.410 | -0.023 |
Andrew McCutchen | 2020 | 241 | 0.322 | 0.343 | -0.021 |
Brad Miller | 2020 | 171 | 0.343 | 0.364 | -0.021 |
Player | Year | PA | wOBA | xwOBA | wOBA - xwOBA |
---|---|---|---|---|---|
Scott Kingery | 2020 | 124 | 0.224 | 0.292 | -0.068 |
Tommy Pham | 2020 | 125 | 0.282 | 0.348 | -0.066 |
Tyler Naquin | 2020 | 141 | 0.263 | 0.313 | -0.050 |
Danny Jansen | 2020 | 147 | 0.295 | 0.339 | -0.044 |
Dylan Carlson | 2020 | 119 | 0.260 | 0.303 | -0.043 |
Ryan O'Hearn | 2020 | 132 | 0.265 | 0.307 | -0.042 |
Eric Sogard | 2020 | 128 | 0.250 | 0.287 | -0.037 |
Tony Wolters | 2020 | 109 | 0.245 | 0.281 | -0.036 |
Tyler Wade | 2020 | 105 | 0.267 | 0.303 | -0.036 |
Roberto Perez | 2020 | 110 | 0.225 | 0.260 | -0.035 |
Elvis Andrus | 2020 | 111 | 0.251 | 0.286 | -0.035 |
Joc Pederson | 2020 | 138 | 0.293 | 0.325 | -0.032 |
Luis Rengifo | 2020 | 106 | 0.224 | 0.254 | -0.030 |
Josh Naylor | 2020 | 104 | 0.270 | 0.300 | -0.030 |
Nico Hoerner | 2020 | 126 | 0.262 | 0.289 | -0.027 |
Howie Kendrick | 2020 | 100 | 0.293 | 0.320 | -0.027 |
Joe Panik | 2020 | 141 | 0.292 | 0.316 | -0.024 |
Eric Thames | 2020 | 140 | 0.272 | 0.292 | -0.020 |
Hunter Renfroe | 2020 | 139 | 0.273 | 0.293 | -0.020 |
Ender Inciarte | 2020 | 131 | 0.230 | 0.248 | -0.018 |
Nomar Mazara | 2020 | 149 | 0.263 | 0.281 | -0.018 |
Jose Marmolejos | 2020 | 115 | 0.283 | 0.300 | -0.017 |
Shin-Soo Choo | 2020 | 127 | 0.307 | 0.324 | -0.017 |
Willie Calhoun | 2020 | 108 | 0.214 | 0.230 | -0.016 |
Tony Kemp | 2020 | 114 | 0.303 | 0.319 | -0.016 |
Luis Arraez | 2020 | 121 | 0.330 | 0.346 | -0.016 |
I alluded to Harper earlier in the article and want to look at his numbers now. I believe most fantasy GMs who rostered Harper last year would agree he was disappointing from their perspective. With the above chart, we can see why. Harper’s wOBA was .393 (Great), but his xwOBA was .435 (Excellent). Harper was just plain unlucky in terms of the outcomes that actually happened compared to what ought to have occurred based on his Statcast data. Harper may not do as well in either category in 2021, but the analytics suggest that he will be a better and a more productive hitter next year than last.
The second group (that I listed as Breakout Candidates) all failed to get enough qualifying at-bats. Perhaps they were victims of injury, platooning, or utility roles. The analytics suggest that they were under-performed last year and were “unlucky” when they did get into the batter’s box. Raise your expectations of these players and feel more comfortable in rostering them on your fantasy teams.
Consume Sabermetrics Responsibly
While xwOBA and its difference from wOBA are undoubtedly helpful, it – like so many other statistics available, should not be used alone by the discerning fantasy GM. Players considered elite often outperform their expectations. Other players are hindered or helped by their physical prowess by being too slow out of the batter’s box or having the ability to beat out a topped ball that dribbles past the pitcher. Use context when examining Sabermetrics. Numbers are not the be-all, end-all to good analysis.
In this series, I have highlighted just three statistical measures used to evaluate hitters by fantasy GMs. There are many more that can be sourced from sites like Fangraphs or Baseball Savant. Many fantasy GMs look solely at the stats used in their leagues (Roto, Cats, or Total Points). If you want to be better than your opponent, you will have to dig deeper than they do. This series is a good start, and hopefully, you can see that xwOBA is not only a useful analytic but just the tip of the statistical iceberg.
In short, statistics can be fun to use and peruse, but context is king. Learning to utilize analytics to your advantage will help improve your roster and draft decisions in the future.
Connect with me on Social Media!
Twitter: @basiegel68 / Facebook: basiegel68 / Instagram: basiegel68