Last Friday, after missing the entire 2025 season due to Tommy John surgery, Gerrit Cole fared well in his return to the Yankees rotation, firing six scoreless innings against the Rays even while struggling to miss bats. On Wednesday night in Kansas City, Cole truly looked back, this time throwing 6 2/3 scoreless innings while striking out 10 Royals without issuing a walk. The former Cy Young winner’s reassuring performance is a welcome development for a rotation that has weathered some high-profile absences — and will have to continue doing so.
The Yankees began the season with Cole, Carlos Rodón, and Clarke Schmidt all recovering from elbow surgeries, and while the first two have now returned, Max Fried — their most valuable pitcher last season — has been sidelined for a spell, as has 2024 AL Rookie of the Year Luis Gil. Nonetheless, the team’s rotation has been one the game’s best thus far, leading the majors in WAR (7.5), leading the AL in FIP (3.22), and ranking a close second in the league in both ERA (2.98) and strikeout rate (24.5%). Despite backing that unit with the most potent offense in the league, the 34-22 club finds itself trailing the Rays (34-19) by 1 1/2 games in the AL East.
Prior to last Friday, Cole’s last competitive appearance in the majors had been a reminder of a golden opportunity lost: His inexplicable failure to cover first base in the fifth inning of Game 5 of the 2024 World Series fueled the Dodgers’ comeback from a 5-0 deficit on a night they ended up clinching the title. Limited to 17 starts that season due to nerve irritation and edema in his elbow after finally bringing home a Cy Young award in 2023, Cole made just two appearances in spring training last year before being diagnosed with a torn UCL and undergoing surgery. He progressed enough in his recovery to make two brief appearances in Grapefruit League games this spring, then continued his rehab by making six starts spread across three minor league levels before returning to the Yankees. Read the rest of this entry »
Joe Ryan is about as steady a pitcher as you’ll find in the big leagues. Since his first full season in the majors, 2022, Ryan has never made fewer than 23 starts. He’s never thrown fewer than 135 innings nor more than 171, and his season-by-season WAR has stayed between 2.2 and 3.1. He hasn’t been a front-end starter, but he’s making just $6.2 million, which is a tremendous bargain. He was a hot commodity who somehow stayed put during the Twins’ fire sale last summer; if Minnesota is out of contention again, you’ll probably hear his name come up at this coming deadline, as well.
It also helps that Ryan is having a career year at the right time. He’s already at 2.1 WAR on the season, and we’re only about a third of the way through the calendar. That puts him fifth in the league. He’s also sixth in FIP, 12th in strikeouts, and 10th among qualified starters in K-BB%. Read the rest of this entry »
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).
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
Total
417
451
463
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.
When he broke in with the Brewers last season, Jacob Misiorowski was tough to miss, unless you were a hitter trying to catch up to his ridiculous velocity. The gangly 6-foot-7 righty announced his presence by reaching 100.5 mph on his first major league pitch and topping out at 102.2 mph in five no-hit innings against the Cardinals in Milwaukee on June 12. He followed that up with six perfect innings against the Twins before yielding a walk and a homer, and was named to the National League All-Star team as an injury replacement after just five starts. He soon leveled off, and finished with comparatively unspectacular numbers — he was an afterthought in the NL Rookie of the Year voting — but this season is a different story. The 24-year-old righty has dominated hitters like a true ace, and has improved in practically every important statistical category.
Misiorowski’s latest outing, once again facing the Cardinals in Milwaukee, was both a gem and an awe-inspiring display of firepower. Monday’s effort began with an unprecedented, if somewhat unproductive, barrage of six consecutive four-seam fastballs to JJ Wetherholt, each clocked at 103.0 mph or higher — but four of them were well outside the strike zone, resulting in a walk:
Misiorowsi overcame the leadoff walk, escaping the inning by throwing just seven more pitches on back-to-back three-pitch strikeouts of Iván Herrera and Alec Burleson, then a first-pitch groundout by Jordan Walker. In fact, he retired 15 straight hitters after the walk, again completing five no-hit innings before yielding a leadoff single to Pedro Pagés in the sixth. The Cardinals turned that into a run after speedster Victor Scott II replaced Pagés on a forceout, took third on a single to right field by Wetherholt, and scored on a grounder by Herrera, but Misiorowski stuck around to complete the sixth and seventh innings before departing with a 4-1 lead. The Brewers won, 5-1. Read the rest of this entry »
That statement was true on Opening Day, when the Rays were projected by FanGraphs Depth Charts to win 79.9 games and finish last in the AL East. It’s true again Wednesday morning, after the Rays fell 6-1 to the Orioles for a third straight loss on Tuesday night. But for much of the time in between, the truthiness of that statement wasn’t so clear.
In the last six weeks, the Rays have rattled off a five-game winning streak, two six-game winning streaks, and a seven-game winning streak. Though they no longer hold the best record in the majors, they still boast the top record in the American League, at 34-18. No team has done more to improve its standing during the first third of the season.
They’re just doing it… weird. While the Rays have the second-best record in baseball, they’re 14th in batter WAR and 12th in pitcher WAR. They don’t have a single player in the top 50 on the combined WAR leaderboard and have just three in the top 100.
Instead, the Rays are outperforming both their ability to score and prevent runs, and their ability to turn those runs into wins. The story of their season to this point is no doubt centered on the sticky concepts of luck, fortune, and deservedness. How much should we adjust our expectations for a team, perhaps, playing above its head? Read the rest of this entry »
At 2:26 a.m. ET on Tuesday, ESPN’s Jeff Passan reported that the Athletics intended to call up their top pitching prospect, Gage Jump. First of all: Sweet Jesus, Jeff, go to sleep. If you keep burning the candle at both ends like this, you’re not going to be presentable for TV come October.
The A’s didn’t make the move official until Tuesday evening; Jump wasn’t on the 40-man roster, so they had to clear a roster spot by putting Aaron Civale on the IL with shoulder tendinitis and sliding Denzel Clarke over to the 60-day IL. The debut itself was a little rocky, as Jump allowed four runs and nine hits in five innings, but it’s exciting to see him in the majors all the same. And not just because of what it means for writers who traffic in song-lyric headlines. Read the rest of this entry »
It has been a good year for walks. Whatever you want to attribute it to – and trust me, I’ve done a lot of attributing – batters are drawing free passes more frequently than they have for a long time. Well, most batters. The San Francisco Giants didn’t get the memo. As a squad, the Giants have walked only 5.8% of the time this year. That’s last in baseball by a mile. The gap between them and the 29th-place Rockies is as large as the gap between the Rockies and the league average. What gives?
My investigation started with the 2025 Giants. Walk rate is a stable statistic on the whole. If you walk a lot in one year, you’re likely to walk a lot the next year. But the Giants were no slouches when it came to taking a free base in 2025. In fact, they had one of the highest team walk rates in baseball – 9.2%, fourth in the majors. In the second half of the year, they walked 8.7% of the time. The 10 Giants who batted most frequently had a combined 9.6% walk rate. Four of those players are no longer on the team, but they were actually hurting the average – the six remaining Giants who batted most frequently in 2025 posted an aggregate 10.2% walk rate.
As Keanu Reeves memorably put it: Whoa. These six have taken 61.5% of the Giants’ plate appearances this year. If they were walking at the clip they did last year, that would add a whopping three percentage points to the team’s overall walk rate, placing San Francisco squarely in the middle of the pack instead of historically low. Read the rest of this entry »
On Monday night, the Astros celebrated Memorial Day by no-hitting the Rangers. Throwing to catcher Christian Vázquez, pitchers Tatsuya Imai, Steven Okert, and Alimber Santa combined for the 18th no-hitter in a franchise history that dates back to 1962. According to the great Sarah Langs, not only is that the most no-hitters over that period, but the second-place Dodgers are a full five no-nos behind with 13. Imai was making just his sixth major league start. Santa was making his major league debut. There must be something in the water in Houston.
I didn’t catch any of the game live. I saw a supercut that shows all 27 outs the Astros got. This is it. You don’t have to watch it to enjoy this article, and it’s seven minutes long, but I at least wanted to give you the chance to experience the game the way I experienced it.
Several things jumped out at me at the beginning of the video. It starts with an establishing shot of Imai. He’s toeing the rubber before he throws his first pitch, and his stats are overlaid on the screen. They are yucky. He’s 1-2 with an 8.31 ERA, a 1.79 WHIP, a 3:2 walk-to-strikeout ratio, and a 4.64 xFIP. With the Seibu Lions in NPB, Imai ran an ERA below 2.50 in each of the last four seasons. He was unhittable. But his first five-start stretch stateside was abysmal. He hit the IL with arm fatigue after three outings, got lit up in his first Triple-A rehab start, then got lit up again in his first start back with the big club. In the start after that one, on May 18, Imai put up a game score of 41. Somehow, it was his second-best mark of the season. He previously threw a curveball, splitter, and regular changeup, but he seems to have abandoned them entirely. “Command,” wrote The Athletic’s Chandler Rome, “has been somewhere between spotty and nonexistent.” All of this is to say that, to this point in his short MLB career, Imai has not looked like a guy with no-hit stuff. Read the rest of this entry »
Austin Martin appears to be coming into his own. Playing in what is shaping up to be his first full major league season, the 27-year-old Minnesota Twins outfielder is slashing .289/.396/.394 with a pair of home runs and a 130 wRC+ over 169 plate appearances. His track record coming into the campaign was somewhat spotty. Hampered by injuries — hamstring and oblique strains among them — he’d played in just 143 big league games, 93 as a rookie in 2024, and 50 last year. Moreover, while his .698 OPS and 101 wRC+ were credible, they fell short of what is expected from a player with his pedigree. Martin was drafted fifth overall in 2020 by the Toronto Blue Jays out of Vanderbilt University.
Uneven performances down on the farm are also part of his backstory. Trying to be something he’s not is one of the reasons why. Acquired by the Twins in the 2021 trade deadline deal that sent José Berríos to Toronto, Martin attempted to hit for more power than what his natural skillset suggests he should. Subsequently returning to his roots has helped fuel his long-awaited breakthrough.
“Being healthy is part of it, but more than anything, I reverted back to the player I was in college,” explained Martin, who was an OBP machine (.474) over his three seasons as a Commodore. “When I got to professional baseball, I started trying to play the numbers game instead of playing the game itself. I got too far away from myself in terms of trying to pull the ball in the air, doing more damage, getting higher [exit] velocities. That’s never been the type of player I am. I’m just a baseball player. I don’t do anything that will jump at you. I’m more of a consistency, play-the-game-the-right-way sort of guy.”
I asked the DeLand, Florida native if the attempts to up his pop were largely org-driven, or more something that he aspired to do on his own. Read the rest of this entry »
Erik Tolman has a remarkable backstory. Currently playing for the Triple-A Rochester Red Wings, the 26-year-old left-hander threw to one of baseball’s most prolific pitchers as a prep, and that is a comparatively insignificant part of his past. His level of perseverance is nothing short of remarkable. Tolman has overcome debilitating injuries on his journey to the doorstep of the big leagues.
His travails began in 2021, the year the Washington Nationals drafted him in the 14th round out of Arizona State University. He had the first of two Tommy John surgeries, costing him all but three games in his final collegiate campaign — and his bad fortune was only just beginning.
“I tore my UCL again at the end of my rehab,” Tolman explained. “Fourteen months after having surgery, in my last live ABs, I felt my elbow go again. It was a sad moment, honestly. But I talked to my family, and I believed in myself — I thought I could still be a big-leaguer — so I kept at it. Unfortunately, on my fifth start back, in August 2023, I dislocated my knee. That made for a whole new mountain that I’ve had to climb.
“The injuries have driven me to have a work ethic, and a mental fortitude, of just going balls to the wall,” he added. “I figured I could either struggle coming back from the injuries, playing baseball, or struggle out in the real world. At the end of the day, we’re the ones responsible for our lives and careers. If you get hurt, are you going to cave, or are you going to overcome?”
Tolman did far more than simply dislocate a knee after returning from the second TJ. What happened was not only catastrophic: it was hard to fathom. Read the rest of this entry »