The 2022 ZiPS Projections Are Coming!

The first ZiPS team projections will hit the site this coming Monday, and as I typically do, I’m going to use this space to talk a little bit about my philosophy behind ZiPS, my goals, and the new things I’ve worked on before they go live.

ZiPS is a computer projection system I initially developed in 2002–04 and which officially went live for the ’04 season. The origin of ZiPS is similar to Tom Tango’s Marcel the Monkey, coming from discussions I had with Chris Dial, one of my best friends (my first interaction with Chris involved me being called an expletive!) and a fellow stat nerd, in the late 1990s. ZiPS moved quickly from its original inception as a reasonably simple projection system, and now does a lot more and uses a lot more data than I ever envisioned 20 years ago. At its core, however, it’s still doing two primary tasks: estimating what the baseline expectation for a player is at the moment I hit the button, and then estimating where that player may be going using large cohorts of relatively similar players.

ZiPS uses multi-year statistics, with more recent seasons weighted more heavily; in the beginning, all the statistics received the same yearly weighting, but eventually, this became more varied based on additional research. And research is a big part of ZiPS. Every year, I run hundreds of studies on various aspects of the system to determine their predictive value and better calibrate the player baselines. What started with the data available in 2002 has expanded considerably: Basic hit, velocity, and pitch data began playing a larger role starting in ’13, while data derived from StatCast has been included in recent years as I’ve gotten a handle on the predictive value and impact of those numbers on existing models. I believe in cautious, conservative design, so data is only included once I have confidence in improved accuracy; there are always builds of ZiPS that are still a couple of years away. Additional internal ZiPS tools like zBABIP, zHR, zBB, and zSO are used to better establish baseline expectations for players. These stats work similarly to the various flavors of “x” stats, with the z standing for something I’d wager you’ve already figured out.

One change since last year is greater incorporation of these zStats for minor league hitters and pitchers. These have been in future versions of ZiPS for a few years now, and my hope, as of December 2019, had been to implement them for the 2021 projections. I wanted one more season of data that had no part of the original dataset from which these numbers were derived, but as we all know, there was no minor league season in 2020.

Now, we don’t have the full catalog of data to work with, but we do have some data for minor leaguers that helps makes these stats possible. One of those things is the probabilistic estimates of defense that I’ve been using for minor league defense for a few years. This has helped ZiPS better identify solid defense for inexperienced players like Luis Robert and Mike Yastrzemski before they reach the majors:

I could do better with more robust data than is available, but just knowing where a ball is hit is helpful. For example, a grounder hit directly over second base has been a single 49% of the time in the minors, while one that hugs the foul lines is a double 52% of the time at third and 66% of the time on the first base side. I’ve now been able to integrate this data not just with defensive projections, but in creating more accurate zBABIP estimates for pitchers and hitters.

When estimating a player’s future production, ZiPS compares their baseline performance, both in quality and shape, to the baseline of every player in its database at every point in their career. This database consists of every major leaguer since the Deadball era — the game was so different prior to then that I’ve found pre-Deadball comps make projections less accurate — and every minor league translation since the early 1960s. Using cluster analysis techniques (Mahalanobis distance is one of my favorite tools), ZiPS assembles a cohort of fairly similar players across history for player comparisons, something you see in the “No. 1 Comp” column of the player tables that accompany each team projection piece. Non-statistical factors include age, position, handedness, and, to a lesser extent, height and weight compared to the average height and weight of the era (unfortunately, this data is not very good). ZiPS then generates a probable aging curve — both midpoint projections and range — on the fly for each player. This method was used by PECOTA and by the Elias Baseball Analyst in the late 1980s, and I think it is the best approach. After all, there is little experimental data in baseball; the only way we know how plodding sluggers age is from observing how plodding sluggers age.

One of the tenets of projections I follow is that no matter what the projection says, that’s the ZiPS projection. Even if inserting my opinion would improve a specific projection, I’m philosophically opposed to doing so. ZiPS is most useful when people know that it’s purely data-based, not some unknown mix of data and my opinion. Over the years, I like to think I’ve taken a clever approach to turning more things into data — for example, ZiPS’ use of basic injury information — but some things just aren’t in the model. ZiPS doesn’t know if a pitcher wasn’t allowed to throw his slider coming back from injury, or if a left fielder suffered a family tragedy in July. I consider these things outside a projection system’s purview, even though they can affect on-field performance.

It’s also important to remember that the bottom-line projection is, in layman’s terms, only a midpoint. You don’t expect every player to hit that midpoint; 10% of players are “supposed” to fail to meet their 10th percentile projection and 10% of players are supposed to pass the 90th percentile forecast. This point can create a surprising amount of confusion. ZiPS gave .300 BA projections to three players in 2020: Luis Arraez, DJ LeMahieu (yikes!), and Juan Soto. But that’s not the same thing as ZiPS thinking there would only be three .300 hitters. ZiPS thought there would, on average, be 34 hitters with at least 100 plate appearances to eclipse .300, not three. In the end, there were 25; the league BA environment turned out to be five points less than ZiPS expected, catching the projection system flat-footed.

Speaking of catching ZiPS breaking in the wrong direction, 2020 turned out to be just as difficult as a dataset as I expected. The approach I took for dealing with 2020 was to consider it the first 60 games of a season, use the rest-of-season projections to “finish” the season, and then project normally from there. That’s basically the same approach I would take when projecting a player’s 2022 season on June 1, 2021. This worked out a bit better than I expected for hitters but significantly worse for pitchers. As with batting average, ZiPS was caught sneaking the wrong way on the walk rates and strikeout rates for pitchers.

Another crucial thing to bear in mind is that the basic ZiPS projections are not playing-time predictors. By design, ZiPS has no idea who will actually play in the majors in 2022. ZiPS is essentially projecting equivalent production; a batter with a .240 projection may “actually” have a .260 Triple-A projection or a .290 Double-A projection. But how a Julio Rodríguez would hit in the majors full-time in 2022 is a far more interesting use of a projection system than it telling me that he won’t play in the majors, or at least play only a little bit. For the depth charts that go live in every article, I use the FanGraphs Depth Charts to determine the playing time for individual players. Since we’re talking about team construction, I can’t leave ZiPS to its own devices for an application like this. It’s the same reason I use modified depth charts for team projections in-season. There’s a probabilistic element in the ZiPS depth charts: sometimes Joe Schmo will play a full season, sometimes he’ll miss playing time, and Buck Schmuck has to step in. But the basic concept is very straightforward.

The to-do list never shrinks. One of the things not complete, but in the works, is better run/RBI projections. ZiPS wasn’t originally designed as a fantasy baseball tool — fantasy baseball analysts have been making fantasy-targeted projections for a long time — but given that ZiPS is frequently used by fantasy players, more sophisticated models are in the works. Saves, on the other hand, are a particularly difficult issue. As of now, the only thing I tell ZiPS about a player’s role is if it is going to change, which determines if ZiPS sees future Mike Moustakas as a second or third baseman. I’ve tried a lot of shortcuts, like trying to model the manager’s decision about who the closer would be using both statistics and things like age, salary, and history. While it generally does a good job projecting who will be the closer, the misses are gigantic and render save projections ineffective; a managerial decision can turn a 35-save pitcher into a five-save pitcher. I’m still figuring out how to approach this problem.

What else is new for 2022? On a general level, there’s greater integration of Statcast data into establishing player baselines. I’m very sensitive towards making sure that new things I integrate into the chaotic mass of algorithms actually have predictive value. One example is increased use of sprint speed when calculating the speed component of players. Another use is a model of individual spin rate change to estimate a substance enforcement environment that lasted the whole 2021 season rather than one in which baseball awkwardly started more vigorously enforcing rules about grip substances halfway through.

One change that I’m particularly proud of, though one you won’t see for single-year projections, is an improved model for estimating when a player’s career will end. In the past, ZiPS has estimated a decline in late-career performances based mainly on the normal injury/decline risks, age, overall performance, and vicinity to milestones. I’ve refined this approach to also include things like salary and existing contract length. This would have improved career projections for Albert Pujols; ZiPS could just not understand, using the old model, why the Angels refused to stop playing him.

Have any questions, suggestions, or concerns about ZiPS? I’ll try to reply to as many as I can reasonably address in the comments below. If the projections have been valuable to you now or in the past, I would also urge you to consider becoming a member of FanGraphs, should you have the ability to do so. It’s with your continued and much appreciated support that I have been able to keep so much of this work available to the public for free for so many years. Improving and maintaining ZiPS is a time-intensive endeavor and your contributions have enabled me to have the flexibility to put an obscene number of hours into its development. Hopefully, the projections and the things we have learned about baseball have provided you a return on your investment; it’s hard to believe that ZiPS is nearing the 20-year-old mark.

Dan Szymborski is a senior writer for FanGraphs and the developer of the ZiPS projection system. He was a writer for 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.

Newest Most Voted
Inline Feedbacks
View all comments
2 years ago

Yay! Bring them on.

John Elway
2 years ago
Reply to  Tony