The 2019 Hitter Projections: Where Did We Go Wrong?
If the other projectionators are anything like me, the projections going awry, afoul, or askew is always something in the back of their minds. Ideally, one should make projections, let the rubber hit the road, and then worry about what actually happened in the fall post-mortems. As much as I’d like to do that, when ZiPS makes an aggressive projection in one direction or the other, especially one that departs from the consensus of the other projection systems, I can’t help but look over my shoulder. Yesterday, I looked at pitchers for whom ZiPS missed the mark. Today, I consider the other side.
Among hitters, no projection has haunted my dreams as much as Juan Soto’s. Yes, Juan Soto was a superstar in 2018. Yes, he was just 19 when he destroyed the National League. Yes, everybody loves him as a player, not just the projection systems. However, in this case, ZiPS went out on a bit of a limb with Soto. Rather than the typical curmudgeonly regressing-toward-the-mean, ZiPS saw Soto playing even better, projecting a ninth-place finish in WAR among position players. Soto hasn’t been a disappointment, and ZiPS hasn’t been totally wrong, but the modest 23-point differential between ZiPS and reality grows larger once you consider that ZiPS missed low on the level of offense around the league.
Name | Consensus OPS | ZiPS OPS | Diff |
---|---|---|---|
Juan Soto | .906 | .959 | .053 |
Cody Bellinger | .837 | .889 | .052 |
Joey Gallo | .843 | .889 | .046 |
Christian Walker | .721 | .764 | .043 |
Eloy Jimenez | .820 | .863 | .043 |
Adalberto Mondesi | .717 | .758 | .041 |
Eduardo Escobar | .760 | .798 | .038 |
J.T. Realmuto | .802 | .838 | .036 |
David Dahl | .807 | .840 | .033 |
Ben Gamel | .712 | .744 | .032 |
Grayson Greiner | .648 | .602 | -.046 |
Mitch Garver | .723 | .677 | -.046 |
Tyler Flowers | .740 | .694 | -.046 |
Elias Diaz | .727 | .682 | -.045 |
Jorge Alfaro | .658 | .614 | -.044 |
Lourdes Gurriel Jr. | .722 | .678 | -.044 |
Albert Pujols | .704 | .660 | -.044 |
Jose Abreu | .837 | .795 | -.042 |
Bryan Reynolds | .686 | .645 | -.041 |
Robinson Cano | .802 | .763 | -.039 |
It’s interesting to see where ZiPS differed the most from the other three projection systems used here. Do note that the “Consensus OPS” will vary slightly from what you see in the following tables, as ZiPS is not included in these consensus stats. ZiPS in 2019 tended to like a lot of the mid-20s “interesting” power prospects while simultaneously liking middling young catchers less than the other systems. That’s something that hadn’t come up in previous seasons, so I’m curious to see whether it continues and what it means. The data used by ZiPS versus that used by the other systems means it isn’t always going to be an apples-to-grenades comparison.
As with the pitchers, ZiPS is very close in accuracy to the consensus projections, but slightly behind (again, as I expect it to be). For the bias-adjusted projections, the consensus has an RMSE (root-mean-square error) of 0.1072 in OPS compared to ZiPS’ .1076. If these were the end-of-year results, we’d all be very depressed, but half-year stats are quite volatile!
Name | Consensus OPS | Actual OPS | Diff |
---|---|---|---|
Fernando Tatis Jr. | .703 | 1.026 | .323 |
Lourdes Gurriel Jr. | .711 | 1.009 | .298 |
Scott Kingery | .661 | .959 | .298 |
Cody Bellinger | .850 | 1.137 | .287 |
Bryan Reynolds | .676 | .956 | .280 |
Hunter Dozier | .676 | .952 | .276 |
Hunter Pence | .701 | .962 | .262 |
Mitch Garver | .712 | .972 | .261 |
Joey Gallo | .855 | 1.109 | .254 |
Eric Sogard | .635 | .884 | .249 |
James McCann | .646 | .890 | .245 |
Josh Bell | .791 | 1.035 | .244 |
Christian Yelich | .897 | 1.139 | .243 |
Peter Alonso | .759 | .999 | .240 |
Kevin Newman | .652 | .855 | .204 |
Oscar Mercado | .636 | .837 | .201 |
Pedro Severino | .629 | .829 | .201 |
Howie Kendrick | .749 | .947 | .198 |
Pablo Sandoval | .679 | .877 | .198 |
Carson Kelly | .685 | .881 | .197 |
Everyone liked Fernando Tatis Jr. over the long haul prior to his debut, but it was an open question whether or not everything would click in 2019. Everything has clicked in 2019. It’s easy to forget that Tatis only played a little more than half of a season in Double-A in 2018, and missed significant time due to a broken thumb. That he has succeeded does not mean it was a certainty coming into the season, so I’ll live with being wrong here. In a way, Tatis’ explosion reminds me of Hanley Ramirez’s back in the day. Not that Tatis and Hanley are or were comparable players, but the magnitude of their respective rookie explosions is similar.
What will haunt me is the Gurriel projection. The consensus was wrong on Gurriel, but if you scroll up to the first chart, ZiPS was really, really wrong on Gurriel. What makes it even more maddening is that I’m still not sure why. Gurriel’s launch angle is up and he’s hitting more barrels, but he’s also exhibiting this weird combination of swinging at fewer pitches and making even less contact than in 2018. ZiPS is coming around on Gurriel, and his rest-of-season projection now stands a stunning 73 points of OPS above his preseason projection. If we used the full-on ZiPS rather than the simpler in-season model that increase would be 94 points! The computer understands the improvement better than I do apparently.
ZiPS liked Joey Gallo more than the consensus, but still undershot Gallo’s OPS (so far) by more than 100 points. I can at least get my head around Gallo’s improvement. While a .391 BABIP is unlikely to be sustainable, there’s been a real change in his approach at the plate. In 2018, Gallo swung at 32.2% of pitches outside the strike zone; that ranked him 152nd in baseball if we use 300 plate appearances as our cutoff. In a single year, he’s cut off nearly a third of that, with his 22.5% ranking 21st-best among players with 150 plate appearances. While he’s also swinging at fewer pitches in the strike zone, the dropoff isn’t to the same degree. Even if his BABIP drops precipitously from .391, it may not drop down to previous levels. Gallo had a .250 BABIP in 2017 and a .249 BABIP in 2018, but the ZiPS model for BABIP that uses hit ball data thinks he “ought to” have put up a .301 BABIP over that period. That’s the largest deviation among hitters, suggesting that there was some hidden upside in there. ZiPS only projected a .273 BABIP — the longer a player underperforms, the more likely ZiPS is to believe reality rather than the estimate — but now thinks he’s somewhere around .300 again.
Baseball’s having a low-ball moment. Using Statcast’s strike zone, the rate at which home runs are being hit on low pitches is up 62% from 2018. 409 balls below the strike zone were hit for homers last year; this year we’re already at 347! Does this have an effect on the projections? Looking at the projections as a whole, there’s a real relationship between a hitter’s low-ball hitting ability and him beating the 2019 projections. This is something to come back to in the season’s post-mortem. The number of golf ball homers being hit would make a 1970s hitting coach cringe!
Name | Consensus OPS | Actual OPS | Diff |
---|---|---|---|
Jose Ramirez | .902 | .634 | -.268 |
Travis Shaw | .813 | .568 | -.245 |
Kendrys Morales | .760 | .566 | -.194 |
Danny Jansen | .741 | .548 | -.193 |
Carlos Gonzalez | .756 | .572 | -.184 |
Jesus Aguilar | .810 | .631 | -.179 |
Yonder Alonso | .752 | .576 | -.176 |
Daniel Descalso | .726 | .554 | -.172 |
Eduardo Nunez | .725 | .572 | -.153 |
Chris Davis | .685 | .533 | -.152 |
John Hicks | .685 | .535 | -.150 |
Juan Lagares | .654 | .504 | -.150 |
Starlin Castro | .717 | .571 | -.146 |
Matt Carpenter | .851 | .706 | -.145 |
Austin Hedges | .701 | .558 | -.143 |
Mike Zunino | .699 | .557 | -.142 |
Paul Goldschmidt | .881 | .741 | -.140 |
Robinson Cano | .792 | .653 | -.139 |
Jeimer Candelario | .731 | .595 | -.136 |
Rougned Odor | .763 | .629 | -.134 |
Oh, J-Ram, did you anger a sorcerer? Unless I missed something, if Ramirez’s season ends up with this OPS, it will be the least accurate projection for a batter coming off a five-WAR season in ZiPS history. Now, ZiPS only goes back to the early years of the millennium, but still, that’s not a feather in ZiPS’ cap.
Naturally, coming off a drug suspension, there are eyebrows being raised at Robinson Canó’s disappointing season in New York. It’s tempting to take the bait and worm out of a bad projection, but with nearly 15 years of drug testing, ZiPS still can’t find a pattern of group over-performance or underperformance based on the timing of a drug suspension. I think the more boring story — that a 36-year-old middle infielder is declining rapidly — is the more accurate one.
Danny Jansen fits in the category of “wrong, but in a very weird way.” ZiPS was relatively negative on Jansen coming into the season, projecting a .243/.332/.385 line, a full 61 points of OPS below what the fans estimated. Coming off a .247/.342/.432 debut and a strong performance in Triple-A, people expected more. Readers north of the border let me have it (though politely, because Canada). ZiPS turned out to be wrong, but in the opposite direction: Jansen now at .196/.278/.314 for the Jays.
Dan Szymborski is a senior writer for FanGraphs and the developer of the ZiPS projection system. He was a writer for ESPN.com from 2010-2018, a regular guest on a number of radio shows and podcasts, and a voting BBWAA member. He also maintains a terrible Twitter account at @DSzymborski.
Ah, but Juan Soto is up to .960 now after going {2-for-3, HR, 3B, BB} vs the Marlins last night. +1 for ZiPS.
I think that kid’s gonna be a player
Soto, actual: .301/.406/.554
ZiPS preseason: .296/.400/.559
I’d call that a win.
He also posted a .923 OPS last year. Simply projecting anything using that data would be a win.