Introducing the New Statcast Charged Batter xHR/FB Rate
Nearly three years ago, I developed and published the original batter xHR/FB rate equation. While I used it during the season to analyze players, it was unfortunately behind the FG+ pay wall and shrouded in mystery. Then almost exactly two years ago, I unmasked the equation and shared it with the entire world. The equation used three components compiled by Jeff Zimmerman and did a fairly solid job of estimating what a hitter’s HR/FB rate should have been (adjusted R-squared of 0.649). Sadly, the data fueling the equation is no longer available, so naturally I decided to create a new equation. A Statcast charged one.
In my mind, the probability that a struck ball ends up over the wall depends on several factors — the vertical launch angle (the type of batted ball, e.g. a grounder or fly ball), the horizontal angle (where on the field the ball is hit to, e.g. left field), the exit velocity (how hard the ball is hit), and park factors (a ball hit with the same variables at Coors Field will travel further than one at Yankee Stadium).
The old xHR/FB rate equation included batted ball distance, which was more a result than an underlying skill (essentially the result of the combination of exit velocity and vertical launch angle), horizontal angle, and the standard deviation of distance, which helped us differentiate between hitters who hit every ball 300 feet (a great average distance, but a mark that would lead to zero homers), and hitters that alternated between 200 footers and 400 foot bombs.
The bad news — standard deviation of distance can no longer be included in the equation.
The good news — we don’t need distance at all or the standard deviation of it, because we now have access to the underlying skill driving the distance.
The vertical launch angle and exit velocity are accessible thanks to Statcast and the wonderful Baseball Savant. But wait, there’s more! Last September, Statcast introduced a new metric that was added to the Savant leaderboards called Barrels, which in the simplest terms, are struck balls that have a combination of vertical launch angle and exit velocity that on average result in a batting average of at least .500 and slugging percentage of at least 1.500.
Why is this important? Because you can’t just look at a hitter’s average vertical launch angle and make an insightful conclusion about the types of balls he’s hitting. Is a higher average angle better, a lower one, or somewhere in the middle? The answer is no angle by itself is better. It requires more context. And that context is exit velocity.
What Barrels does is create a counting stat for the combination of the two most relevant underlying skills and makes developing a strong equation possible. Knowing just the average vertical launch angle simply isn’t enough, as you would need to pair that with the exit velocity during each batted ball event. Essentially, create an xHR/FB rate for every single event for every player, and that doesn’t sound fun, or easy.
So Barrels takes care of the vertical launch angle and exit velocity. But rather than use the counting stat version, Brls/BBE (Barrels per batted ball event, also on the Baseball Savant Statcast leaderboard) was the ratio metric that suited my needs. Next, I also needed horizontal angle. Problem solved, thanks to the new FG Splits Leaderboard (which is seriously the best new site addition since I started writing here in 2011). Pull% and Oppo% on fly balls does the trick. While it’s not as exact as the horizontal angle I was sent by Jeff Zimmerman, it’s good enough.
My population data set consisted of 883 player seasons. Obviously, a larger data set would have been better, but hey, this is all the Statcast data we have! Let’s start with some correlations:
| Metric | Correlation |
|---|---|
| Fly Ball Pull% | 0.229 |
| Fly Ball Oppo% | -0.213 |
| Fly Ball Pull% + Fly Ball Oppo% | -0.014 |
| Brls/BBE | 0.824 |
| Avg FB/LD EV (mph) | 0.769 |
Wowzers, check those last two correlations! FB/LD Exit Velocity is good, but Brls/BBE is even better! This is precisely the result I was hoping for, as Brls/BBE takes the extra step of incorporating vertical launch angle in with exit velocity. Initially, I wasn’t sure whether to use just Fly Ball Pull% or add Fly Ball Pull% to Fly Ball Oppo% and use Fly Ball Pull% + Fly Ball Oppo%. Ultimately, I decided to use Fly Ball Pull% + Fly Ball Oppo%.
The thinking here is that pulled and opposite field balls are good for HR/FB rate…in this equation. Why? Because we already know the exit velocity and the barreled balls, so now we just want to know if they are hit toward the lines, which are the shortest distances from the plate. Normally, a high Fly Ball Oppo% would likely hamper exit velocity. But already knowing exit velocity, we don’t have to deal with that issue. That would only be the case if trying to project exit velocity itself, which we’re not doing here.
So this beauty of an equation requires just two variables (okay, technically three, since you’re adding two variables together) that are easily accessible from the Baseball Savant Statcast Leaderboard page and FG player pages (click Splits, hover over Batted Balls, click Flies, scroll to the Batted Ball section at the bottom):
xHR/FB = -0.0066 + ([Fly Ball Pull% + Fly Ball Oppo%] * 0.0671) + (Brls/BBE * 1.2479)
Adjusted R-squared = 0.6815 (slightly higher than the original equation!)
Success!
But then it dawned on me that man, park factors play an obvious and significant role, there’s got to be a way to incorporate those. So the first thing I did was sum up the difference between HR/FB and xHR/FB for each team. If park factors needed to be tended to, you would expect the teams in the best home run parks would have significantly higher actual HR/FB rates than xHR/FB rates, and vice versa for the teams that play in parks that suppress the long ball. Sure enough, that’s exactly what happened.
The 17 teams that xHR/FB underestimated HR/FB rate averaged a 103.4 home HR park factor. The 13 parks that xHR/FB overestimated HR/FB rate averaged a 96.1 home HR park factor. Bingo!
I then decided on two possible ways to account for home park — simply multiply the xHR/FB rate by the HR park factor found on our Handedness Park Factor page or use the HR park factors as another component in a regression and rerun the equation. Thanks to fellow FG contributor Ryan Pollack, I was able to pull in a batter’s handedness to make these calculations possible. For switch-hitters, I used a 69/31 split, as in, 69% of the lefty HR factor and 31% of the righty.
Unfortunately, the first approach was awful and took things to the extreme. Rockies hitters, as well as hitters in other home run friendly parks, now had xHR/FB rate marks that were way too high! So next up was the new regression model approach.
Drum roll please, the official new Park-Adjusted xHR/FB rate equation..
xHR/FB = -0.0566 + ([Fly Ball Pull% + Fly Ball Oppo%] * 0.0676) + (Brls/BBE * 1.2456) + (Handedness HR Park Factor * 0.000495778)
Adjusted R-squared = 0.6848
Surprised that the park factor adjustment didn’t increase the R-squared even higher? Me too. But it’s definitely better, even if just slightly. And remember the team HR/FB – xHR/FB gap comparison I discussed earlier? The park-adjusted equation in no way completely solved everything, but certainly ensured significantly less bias.
Now the 17 teams underestimated by xHR/FB rate only average a 101.5 home HR park factor (versus a 103.4 without the park factor adjustment), while the 13 teams that xHR/FB rate overestimates HR/FB rate average a 98.6 home HR park factor (versus a 96.1 before). That’s a nice improvement.
Finally, here are the year-over-year correlations for the various relevant metrics:
| Metric | Correlation |
|---|---|
| Fly Ball Pull% | 0.511 |
| Fly Ball Oppo% | 0.450 |
| Fly Ball Pull% + Fly Ball Oppo% | 0.017 |
| Brls/BBE | 0.742 |
| Avg FB/LD EV (mph) | 0.790 |
It’s kind of odd to see the Fly Ball Pull% and Fly Ball Oppo% correlations where they are, but once you add them together, it becomes totally random. The exit velocity and Brls/BBE are high, which is a good sign. Of course EV is going to be higher as Brls/BBE includes an additional component in vertical launch angle. But seeing that the loss in correlation is relatively minor is pretty swell.
Now for the filet mignon and lobster plate of correlations:
| Metric | Correlation |
|---|---|
| HR/FB Yr1 to HR/FB Yr 2 | 0.592 |
| xHR/FB Yr1 to HR/FB Yr2 | 0.617 |
| Park Adjusted xHR/FB Yr1 to HR/FB Yr2 | 0.624 |
| xHR/FB Yr1 to xHR/FB Yr2 | 0.735 |
| Park Adjusted xHR/FB Yr1 to Park Adjusted xHR/FB Yr2 | 0.738 |
And there it is. HR/FB in year 1 (2015) had a 0.592 correlation to HR/FB in year 2 (2016). That was the benchmark in which xHR/FB needed to exceed. The xHR/FB in year 1 using the first equation above, which was not park-adjusted, had a 0.617 correlation with HR/FB in year 2. But the park-adjusted version was even better at predicting the following season, coming in at 0.624. Obviously since we have only two seasons of data and 2016 saw hitters go bonkers with homers, these correlations are going to be a bit lower. The last two lines show you that both versions of xHR/FB rate presented in this article correlate with themselves year-over-year pretty well, which is another positive thing.
Moving forward, I will be using the park-adjusted xHR/FB equation and finally, you’ll easily be able to calculate a hitter’s xHR/FB rate yourself, rather than wait for me to publish updates.
Mike Podhorzer is the founder of ProjectingX IQ, an advanced fantasy baseball analytics platform that transforms projection data and in-season performance signals into actionable intelligence. He is the 2015 Fantasy Sports Writers Association Baseball Writer of the Year and three-time Tout Wars champion. He is the author of the eBook Projecting X 2.0: How to Forecast Baseball Player Performance, which teaches you how to project players yourself. Follow Mike on X@MikePodhorzer and contact him via email.
Might one use your metric to better assess a pitcher’s xFIP?
I could certainly look into the pitching side using the same metrics and see if there is anything to be learned.
I’m thinking of a Marco Estrada-type pitcher. Because he has a higher FB%, using the standard league average HR/FB% would bias his xFIP upward, methinks.
The vast majority of HR/FB is due to the batter, so it’s typically wise to use a league average HR/FB rate for pitchers, with some small adjustment for park.
Newbie question – how are you determining the constant values in your equation? I love this kind of analysis and would like tinker with things like this myself.
The constant is just spit out on Excel as part of the regression equation.
Why linear regression? I assume you want to end up with a readable equation at the end, so you probably wouldn’t want to go with one of the black-box algorithms. But since you’re modeling a probability, wouldn’t logistic regression make more sense?
Easy answer — that’s all I know how to do! I use Excel, don’t have any fancier tools, but would love to be able to do more complex stuff.
https://www.youtube.com/watch?v=rbKtZcrTlr8
I’ll write up something on the community blog about machine learning with R. It’s so easy to do the basic stuff that there’s no reason to do it with Excel.
Awesome. But I need to download specific software right? And is it free?
http://www.hardballtimes.com/a-short-ish-introduction-to-using-r-for-baseball-research/
TLDR: yes you need some software and yes it’s free
Logistic regression would tell you the probability a single ball hit would end up a homer. How would you apply that to estimate a HR/FB% for a season, through a sum of probabilities divided by flyballs?
Good point. If you did that it would work but would not be that interpretable. Hm.
How about you model the probability that a FB turns into a HR and then use the averages of the variables for a batter to get a player-specific model?
I’d need a spreadsheet with every batted ball event, which could probably be exported from Statcast, but adds a whole lot of complexity, and will result in an equation not easily implemented during the season. I need to balance ease with accuracy.
Right, when I said “you”, I really meant “I.” 🙂
Dude. This is good stuff.
Are the pull% and oppo% in the equation the overall pull and oppo or the fly ball pull and oppo?
Crap, good catch on the lack of clarity. It’s fly ball, not overall. I will make that clearer.
Cool thanks. For handedness park factor, it looks like 2015 is the most recent season available on FG — is that right?
Unfortunately, you are correct. It’s usually updated for the previous season by now. Will have to make a request. PFs typically don’t change much season to season, though, but would be nice to get them as accurate as possible.
Nice, man.
So are you going to publish a spreadsheet for all of 2016’s hitters by any chance?
Not sure if I’m going to post a full spreadsheet with everyone, or just identify the fantasy relevant hitters with the largest gaps between HR/FB and xHR/FB (the 2017 upside and downside lists). Either way, it’s going to be a full week of new xHR/FB rate fun!
How about adding the equation to the xStats page? Or did you allude to that already at the end. My greed for xStats knows no bounds.
Which xStats page are you referring to?
Prob this one:
http://www.fangraphs.com/fantasy/the-rotographs-x-stats-omnibus/
What kind of sample would you need to feel confident in a hitter’s xHR/FB. For example, say a hitter’s HR/FB for the last three years was 10, 10, 22. If I was projecting without a reliable x/HR/FB equation, obviously I would do some kind of weighted average regressed to the mean, and I’d probably end up at something like 14% or 15%. But if things like Barrels and FB+LD EV become very reliable after a handful of batted balls–and the player had a few hundred batted balls last year–then I might be comfortable projecting the player for nearly 22%.
Yeah, I’m not sure about the reliability and when the stats become stable. That’s beyond my realm. Obviously in your example, age plays a big role. I generally look at xHR/FB rate history (only 2 years now), then age, and try to guess how much a big change in the last year is sustainable. So much goes into whether to believe a jump or not.
Why not just use (1-Flyball Center%) instead of Pull%+Oppo%?
The real answer — because I’m an idiot.
The fake answer — because I want to have the breakdown on my file, since a higher Pull% will yield a higher exit velocity. It helps me to determine whether the Brls/BBE figure is sustainable or if there’s additional upside growth.
Are you doing something specific to calculate barrels/BBE? I can get barrels/pitch, but struggling to get /BBE.
Nevermind. I figured it out. Difficult to find using the Statcast search, but right there on the Leaderboards.
Now that you’re using barrels, can you ditch the HR/FB part and just focus on raw HR totals or xHR since FB is included in barrels (the Launch Angle component)?
I thought about this very issue last night when I was perusing through the pitcher stats. Seemed like all the low Brls/BBE guys were groundballers. Ran correlation of hitter Brls/BBE to FB% and it was 0.429. I would have expected it to be higher. I can’t focus on raw HRs because I need a ratio. Then I’d have to back into HR/FB rate and I don’t want to do that.
I would have expected higher than that, too. Interesting.
What I really wanted was the number of fly balls that were included in the BBE number. Then I could calculate a Brls/FB numbers, since you’re right in that I assume only fly balls could be barrels. So you’d think the metric is biased in favor of hitters with a high FB%.
One quick, easy-to-implement suggestion: don’t add fly ball pull % to fly ball oppo %; each term should get its own coefficient. The correlations show that pulled fly balls are good for HR, and oppo fly balls are bad for HR (and that adding them together, which as noted earlier is equivalent to using center %, has almost zero correlation).
Thanks Saul. Just ran that and the adjusted R-squared barely increases. When I have a bit more time, will look into it more deeply. Was looking at the groups most under/overestimated and surprise, surprise, it was the biggest Oppo and Pull guys on each side. Will prob hit you up again about this!
Maybe I’m missing something, but why use (Pull% + Oppo%) in the regression when your first table showed a small correlation with HR/FB, but showed relatively strong correlation with Pull% and Oppo% independently?
It seems a pretty simple thing to try, and I’d be interested to see if you already did. And either way, what kind of R-squared you could get by using the two as independent inputs.
See comment right above. Ran them separately and R-squared barely improved. The reason I did it the way I did was because in a vaccuum, Pull% is obviously positively correlated, while Oppo% is negatively. That’s because the exit velocity and Brls/BEE on pulled balls is going to be higher. But when we already know the EV and Brls/BBE, then it doesn’t matter whether the ball is hit to the pull side or opposite way.
Aha! thought I had skimmed the comments better, sorry about that. Interesting, and not exactly what I expected, though your argument make sense. It’s tricky mixing some of these metrics and avoiding multicollinearity.
This is great stuff, thanks Mike. I have a question though: I went ahead and calculated the xHR/FB for 255 players (all those who I deemed fantasy relevant who had statcast data). I then did the R-squared for xHR/FB compared to the individual components of your formula…
-The RSQ for xHR/FB:Brls/BBE was .992
-The RSQ for xHR/FB:HR PF was .008
-The RSQ for xHR/FB:FBPull+FBOppo was .004
Does this mean that xHR/FB is almost completely dependent on Brls/BBE? Or am I oversimplifying it?
Ha, that’s pretty crazy. Wish I could interpret that in a different way. So I thought I ran the equation with just Brls/BBE, but perhaps I didn’t. It was actually just slightly lower than the one above. So those extra variables do add something, just not a whole lot.
Thanks. Still very useful. Rather than just saying, “oh, his HR/FB is going to regress because his Brls/BBE is low”, xHR/FB provides a way of quantifying it.
Wow. Great article and the comments are fascinating
What is the difference between BBE and BIP?
Is it possible for you to copy and paste the formula as-is in an xls cell? Some of us are just entitled I guess ?
Hey Allen, it depends on what definition of BIP you’re using. BBE is any batted ball, including homers. Sometimes BIP, like in BABIP calculations, excludes homers. Yes, you can copy that formula into excel, just remove the spaces, change the brackets to parentheses, and then fill in the metric names with a batter’s actual numbers.