As the caretaker of the ZiPS projection system, I answer a lot of questions about both how it functions and the numbers that it spits out. One question I get a lot is why the system has consistently underrated the Milwaukee Brewers, which it has over the last five seasons and by a significant margin. While I’ve talked a little bit about this issue, mostly in offhand remarks in chats and on social media, addressing that question in detail is probably necessary at this point. Of course, ZiPS isn’t alone in underrating the Brewers. But as the system’s sole developer for nearly a quarter of a century, I have a responsibility to both be as transparent as possible and improve the model as much as I can.
So, how has ZiPS done with the Brewers historically? Well it turns out that since the system was first developed, worse than it has with any other major league franchise! Here are the results for ZiPS vs. Reality since 2005. I’ll note the columns don’t precisely add up, as ZiPS projects full 162-game seasons (or a 60-game one in the case of 2020) and there are a bunch of times that teams played 161 or 163 games:
ZiPS Projected Wins vs. Reality, 2005-2025
| Team | Preseason ZiPS Wins | Actual Wins | Miss |
|---|---|---|---|
| Milwaukee Brewers | 1655 | 1725 | -70 |
| Los Angeles Dodgers | 1823 | 1890 | -67 |
| New York Yankees | 1831 | 1893 | -62 |
| Houston Astros | 1631 | 1688 | -57 |
| Tampa Bay Rays | 1686 | 1717 | -31 |
| Cleveland Guardians | 1709 | 1731 | -22 |
| Texas Rangers | 1621 | 1642 | -21 |
| St. Louis Cardinals | 1764 | 1782 | -18 |
| Miami Marlins | 1486 | 1502 | -16 |
| Atlanta Braves | 1734 | 1747 | -13 |
| Philadelphia Phillies | 1699 | 1712 | -13 |
| Seattle Mariners | 1605 | 1609 | -4 |
| Toronto Blue Jays | 1676 | 1677 | -1 |
| Los Angeles Angels | 1683 | 1681 | 2 |
| Athletics | 1625 | 1623 | 2 |
| San Francisco Giants | 1665 | 1660 | 5 |
| Chicago White Sox | 1549 | 1543 | 6 |
| Boston Red Sox | 1791 | 1781 | 10 |
| Minnesota Twins | 1637 | 1624 | 13 |
| Baltimore Orioles | 1544 | 1527 | 17 |
| Detroit Tigers | 1635 | 1613 | 22 |
| Cincinnati Reds | 1593 | 1570 | 23 |
| Pittsburgh Pirates | 1511 | 1488 | 23 |
| Kansas City Royals | 1499 | 1474 | 25 |
| San Diego Padres | 1640 | 1606 | 34 |
| New York Mets | 1706 | 1671 | 35 |
| Arizona Diamondbacks | 1633 | 1592 | 41 |
| Colorado Rockies | 1529 | 1482 | 47 |
| Washington Nationals | 1624 | 1576 | 48 |
| Chicago Cubs | 1714 | 1664 | 50 |
One source of error that’s really difficult to control for is what a team does at the trade deadline. Many of the teams that have overperformed their preseason projections have added talent during the season; conversely, underperformers have a tendency to trade talent away. That’s challenging to model, since it involves trying to project players who aren’t currently in the organization as part of the team, even though we have little idea who those players will actually be four months in advance. I actually created a model based on team quality, age, payroll, recent record, and trade history to get an idea of the likelihood a team will be a buyer or seller in an upcoming season. But while it sort of works, its accuracy isn’t up to the level where I’d include it as part of a projection.
Historically, the Dodgers and Yankees have been two of the league’s most aggressive buyers, so it isn’t surprising to see them atop the list of the biggest ZiPS misses. But while the Brewers have made some big in-season moves — the biggest arguably being the CC Sabathia trade in 2008, which was one of the most effective trades of this type ever — they aren’t on the buy side as frequently as some of the other underprojected teams. So, what’s going on here?
First, here’s an overview of how the percentiles for team projections have worked out. Ideally, you want 10% of teams to exceed their 90th-percentile projection, 20% of teams to exceed their 80th, and so on:
ZiPS Projected Wins vs. Reality, 2005-2025
| Percentile | Percentage of Teams That Exceeded |
|---|---|
| 90th | 9.3% |
| 80th | 21.0% |
| 70th | 29.8% |
| 60th | 41.5% |
| 50th | 50.5% |
| 40th | 58.8% |
| 30th | 69.1% |
| 20th | 78.4% |
| 10th | 88.9% |
ZiPS does a pretty good job in the aggregate. To put it simply, the basic job of a projection system is to know the range of possible outcomes, and be wrong by the appropriate margins the proper number of times. It would be easy to say “Hey, projections work as they’re supposed to in the aggregate, and some team is inevitably going to have the worst projections of the 30, so whatever,” but that doesn’t mean that we shouldn’t investigate these issues and assess whether there’s something systemic that the model is missing. Especially so in a case like Milwaukee, where nearly two-thirds of the 21-year error comes from the last five seasons (417 projected wins vs. 463 actual wins).
You Aren’t a FanGraphs Member
It looks like you aren’t yet a FanGraphs Member (or aren’t logged in). We aren’t mad, just disappointed.
We get it. You want to read this article. But before we let you get back to it, we’d like to point out a few of the good reasons why you should become a Member.
1. Ad Free viewing! We won’t bug you with this ad, or any other.
2. Unlimited articles! Non-Members only get to read 10 free articles a month. Members never get cut off.
3. Dark mode and Classic mode!
4. Custom player page dashboards! Choose the player cards you want, in the order you want them.
5. One-click data exports! Export our projections and leaderboards for your personal projects.
6. Remove the photos on the home page! (Honestly, this doesn’t sound so great to us, but some people wanted it, and we like to give our Members what they want.)
7. Even more Steamer projections! We have handedness, percentile, and context neutral projections available for Members only.
8. Get FanGraphs Walk-Off, a customized year end review! Find out exactly how you used FanGraphs this year, and how that compares to other Members. Don’t be a victim of FOMO.
9. A weekly mailbag column, exclusively for Members.
10. Help support FanGraphs and our entire staff! Our Members provide us with critical resources to improve the site and deliver new features!
We hope you’ll consider a Membership today, for yourself or as a gift! And we realize this has been an awfully long sales pitch, so we’ve also removed all the other ads in this article. We didn’t want to overdo it.
The ZiPS projected standings have two components: the projections themselves and the estimates of who actually ends up with playing time. To get an idea of how much of the ZiPS misses are errors in projection compared to errors in playing time, I will frequently re-project team wins using the actual playing time for each player after the season is done. Re-projecting the 2021-2025 Brewers using their preseason projections but the players’ actual playing time makes the issue a lot clearer:
Brewers ZiPS Wins vs. Reality
| Year | ZiPS Preseason | ZiPS Knowing Actual Playing Time | Actual Wins |
|---|---|---|---|
| 2021 | 83 | 93 | 95 |
| 2022 | 88 | 94 | 86 |
| 2023 | 84 | 87 | 92 |
| 2024 | 78 | 87 | 93 |
| 2025 | 84 | 90 | 97 |
Knowing each player’s actual playing time doesn’t eliminate the errors, but it whittles the missing 46 wins all the way down to 12. In other words, ZiPS isn’t doing a bad job with the projections; Dan Szymborski has done a poor job guessing which players will end up with playing time for the Brewers! Injuries are sometimes a reason for playing time discrepancies, but they typically result in teams underperforming their projections as regulars miss time. Not only have the Brewers overperformed, they’ve done so while not being particularly good at avoiding injuries; they’ve actually lost slightly more wins than the average team due to IL stints over the last five years.
Instead, what appears to be happening is that the Brewers have been extraordinarily successful at giving more playing time to players exceeding their projections. For example, there were 62 hitters who had seasons with at least 200 plate appearances for the Brewers from 2021 to 2025. As a group, ZiPS only underestimated them by 1.5 points of wRC+ in the aggregate (104.7 actual vs. 103.2 projected). But of the 33 hitters who exceeded their projected wRC+, 28 of them received more plate appearances than I had as my baseline expectation. The same is true for pitchers, especially relievers. Now, there’s a natural tendency for teams to give more playing time to players who are outperforming their projections and less to guys who are underperforming, but the Brewers have been notably more successful at this than the rest of the league. From 2021 to 2025, 81% of their qualifying players who outperformed their expected wRC+ or ERA+ got more playing time than I expected as a baseline. To put that into context, the league-wide rate was just under 61%, and no other team was above 70%.
So, how do I fix the Brewers’ projections? That’s a bit of a craggy problem that I’m still working on. This offseason, I tried to be more aggressive in my assumptions about who would get playing time for Milwaukee based on the quality of their projections. As a result, ZiPS forecast the team for 85 wins. Naturally, the Brewers are on pace for 99.7 wins as of Wednesday morning. I may need to more accurately project actual front offices; if the Brewers are simply better than everyone else at evaluating their talent with information only they have access to, it’s not something I can directly correct for. Unless, of course, the Brewers decide to just give me all their internal data, which seems unlikely. Or if I, say, catch Dan Turkenkopf in a giant net and imprison him in my tool shed until he spills the beans. As much as I like improving projections, I don’t think my employer would appreciate if I did so by committing federal crimes, so I’ll simply have to keep trying. Being wrong is how we improve predictive models, and let’s just say that the Milwaukee Brewers continue to give me a lot of opportunities to learn.
