2024 Projection Review: Batter Playing Time

Well, I got my yearly, “Talk to the Boss First Before Publishing” article out of the way halfway through January. I started looking into hitter playing time and previously they were just one column in one of the tables. This year, we dove into why our projections came in near the bottom with some computer-generated projections beating them. Besides the results, there is a ton of other information so if someone blows off the specific results, at least read the summary.
Collection Information
Last season I collected about 20 projections right before the final last weekend when most fantasy managers draft. This is when projections needed to be their best. Here is the tweet I sent to mark when I pulled them.
Mark time now…
— Jeff Zimmerman (@jeffwzimmerman) March 21, 2024
In all, I collected 20 different projections. Eight were not freely available to the public. They will be just be labeled Paywall X. Here are the ones people could freely get from the internet.
- ATC (aggregate of other projections)
- Baseball-reference’s Marcels
- Clay Davenport
- Draft Buddy
- THE BAT X
- FanGraphs Depth Charts (aggregate of Steamer and ZiPS)
- Fantasy Pros Zheile (aggregate of other projections)
- Fantrax
- Razzball (Steamer Based)
- Razzball Grey (Grey’s personal projections)
- Steamer (FanGraphs)
- ZIPS
And just for the plate appearance section of hitter playing time, two other projections were included. The first is a plate appearance projection system highly weighted by the NFBC ADP with any other projection included to help deal with catchers. The second is a personal one of mine. I put it together at least six years ago. I looked at historical projections and found where they were off. The three factors that were incorrectly weighted were:
- Playing time over the previous two seasons. A proxy for health and adding in IL information didn’t improve the projection.
- Age. Older hitters continue to get overprojected.
- Projected talent. Lots of time bad hitters get crazy playing time estimates.
I’ve used these values to adjust projections, most of the time downward. Since these projections only look at major league playing time, I needed to give all rookies 200 plate appearances.
To get a list of comparable players, I found the projections for the batters who went in the top 300 of last year’s NFBC Main Event ADP (n=168). If I went any deeper, many of the projections didn’t include certain players and I have to run several tests on different groups of players. A few didn’t even have a projection for the top-168 hitters so it needed to be run twice. Another issue was that some didn’t include plate appearances, so I also ran the analysis with at-bats.
As you will see, I included several averages and medians to see the best way to combine the projections. I included a projection that averaged four free previously solid public projections (THE BAT, ZiPS, Razzball, and Davenport). I picked the four before running any tests.
To see how each projection set compared, I performed a Root Mean Squared Error (RMSE) analysis on the predicted to the actual values. The smaller the final result, the better the system performed.
Test 1: Plate Appearances (All Players)
So here is the first run (of many as you will find out) where all 168 batters were included in the analysis.
I included a 510 PA value. This is the RMSE value that if all the hitters got the same number of plate appearances, they would end up with the lowest RMSE value. For this same set, it was 510 PA. The issue is that we didn’t know for sure what that value would be going forward but it does provide a nice marker to see if a projection is better than a single value.
| Projection | RMSE |
|---|---|
| Average | 145.7 |
| 4 Free Projs | 153.2 |
| Davenport | 154.2 |
| ZiPS | 155.0 |
| ATC | 156.2 |
| THE BAT X | 156.2 |
| Razzball | 156.9 |
| Jeff’s Adj | 157.5 |
| Median | 157.5 |
| Paywall #7 | 158.0 |
| Paywall #4 | 158.6 |
| DraftBuddy | 161.7 |
| 510 PA | 161.8 |
| Paywall #1 | 162.5 |
| Paywall #3 | 165.4 |
| ADP | 166.6 |
| FG_DC | 168.8 |
| FGSteamer | 169.5 |
| Paywall #2 | 176.2 |
As always, projection aggregators cleaned house taking the top two spots and three of the top five. One interesting note is that the average outperformed the median value. I figured these would be closer.
I was amazed to see how high my 100% computer-generated value performed but more on that later.
The final and most important observation was how poorly our projections performed. Before diving into why, it was assumed we were on the low side since we account for all the playing time. It was the opposite.
On average, We over-projected each hitter by 78.8 PA while everyone else averaged being over by 46.7 PA. Looking over the values, the our issue was overprojecting injury-rish hitters such as Mike Trout (630 PA), Kris Bryant (560 PA), Starling Marte (581 PA), and Trevor Story (630 PA). It’s a flaw we are looking to correct.
The first adjustment is averaging in my computer projection with the four free projections average. Also, I averaged mine with one, two, and three of the projections. To remain fair, I removed the best performing projections because it’s tough to know which one will be the best each season. The key was to see how much the projection adjustment helped even with suboptimal performers.
Here are the results.
| Proj | RMSE |
|---|---|
| Average | 145.7 |
| 4 Free+Jeff | 146.3 |
| 3 Free+Jeff | 146.9 |
| 2 Free+Jeff | 147.5 |
| 1 Free+Jeff | 148.0 |
| 4 Free Projs | 153.2 |
| Davenport | 154.2 |
| ZiPS | 155.0 |
| ATC | 156.2 |
| THE BAT X | 156.2 |
| Razzball | 156.9 |
| Jeff’s Adj | 157.5 |
| Median | 157.5 |
Adding in the adjustment helps a ton with each one coming in between second to fifth.
Now, there is a major factor to consider with the above values. Of all the projections, my computer projection was the only one who under projected playing time. So here are the RMSE values with the plate appearances adjusted to minimal RMSE.
| Projection | Best RMSE | % Adjusted |
|---|---|---|
| Average | 138.5 | 92% |
| 4 Free+Jeff | 144.9 | 97% |
| 3 Free+Jeff | 145.2 | 95% |
| 2 Free+Jeff | 145.9 | 96% |
| 4 Free Projs | 146.0 | 91% |
| 1 Free+Jeff | 146.1 | 96% |
| Davenport | 146.2 | 92% |
| THE BAT X | 146.7 | 90% |
| ATC | 146.7 | 91% |
| Median | 146.9 | 90% |
| ZiPS | 149.1 | 93% |
| Depth Charts (FG) | 149.1 | 87% |
| ADP | 149.2 | 87% |
| Paywall #3 | 149.5 | 87% |
| DraftBuddy | 149.8 | 90% |
| Paywall #1 | 149.8 | 89% |
| Razzball | 150.1 | 92% |
| Paywall #4 | 150.6 | 91% |
| Steamer (FG) | 150.8 | 87% |
| Paywall #2 | 152.9 | 85% |
| Paywall #7 | 154.0 | 90% |
| Jeff’s Adj | 157.5 | 106% |
| 510 PA | 161.8 | 100% |
The range for the RMSE flattens out with the top value and the last few being the only ones that deviated.
The free projections plus ‘Jeff’ hold up and don’t need much downward regression. For those interested, here are my 2025 PA projections and the ideal weights between the projections and my values for the previous season are:
- One other projection/Jeff: 51%/49%
- Two other averaged projections/Jeff: 57%/43%
- Three other averaged projections/Jeff: 62%/38%
- Four other averaged projections/Jeff: 65%/35%
That was way more than expected to write, so it’s time to knock out a few checks.
Test 2: Plate Appearances (All Projections)
Only 160 hitters were compared one all projections that provided plate appearances.
| Proj | RMSE |
|---|---|
| Marcels (BRef) | 142.2 |
| Average | 144.0 |
| 4 Free+Jeff | 144.4 |
| 3 Free+Jeff | 145.6 |
| 2 Free+Jeff | 146.2 |
| 4 Free Projs | 147.6 |
| 1 Free+Jeff | 150.7 |
| Jeff’s (PA, Age, Talent) | 151.2 |
| Davenport | 151.4 |
| ZiPS | 152.6 |
| Razzball | 153.9 |
| ATC | 154.0 |
| THE BAT X | 154.0 |
| Median | 155.7 |
| Paywall #7 | 155.8 |
| Paywall #8 | 156.3 |
| Paywall #4 | 157.2 |
| Draft Buddy | 159.3 |
| Paywall #1 | 160.2 |
| Paywall #3 | 163.4 |
| Median | 164.7 |
| Steamer (FG) | 168.3 |
| Depth Charts (FG) | 168.4 |
| Paywall #2 | 173.1 |
Well, a new #1 just showed up with Baseball-Reference’s Marcel nailing the plate appearances. For these players, Marcels undershot the total by only 800 PA. The other projections overshot by about 10,000 PA. Marcels wasn’t included in the previous study because it doesn’t project minor-league hitters. For MLB regulars, Marcels is another solid computer option.
Test 3: At-bats (all batters)
I can now add a couple more projections that only had at-bats. Also, the two computer generated values say good-bye since they only look to estimate plate appearances.
| Proj | RMSE |
|---|---|
| Average | 131.9 |
| 4 Free Projs | 135.5 |
| ZiPS | 136.8 |
| Davenport | 137.8 |
| ATC | 138.0 |
| Razzball | 138.1 |
| THE BAT X | 138.3 |
| Median | 140.2 |
| Paywall #6 | 140.5 |
| Paywall #7 | 141.2 |
| Zheile (FantasyPros) | 141.8 |
| Paywall #1 | 142.8 |
| Draft Buddy | 143.2 |
| Paywall #4 | 143.8 |
| 450 AB | 144.2 |
| Paywall #3 | 145.8 |
| Fantrax | 146.3 |
| Depth Charts (FG) | 148.5 |
| Steamer (FG) | 148.6 |
| Razzball (Grey) | 149.0 |
| Paywall #2 | 160.1 |
I’m not at all surprised with the results after the first two rounds.
Test 4: At-bats (all projections)
And now the rankings for all the systems including an average of the Four Free Projection averaged with Marcels.
| Projection | RMSE |
|---|---|
| 50% Four Free, 50%Marcels | 125.2 |
| Marcels (BRef) | 127.6 |
| Average | 130.5 |
| 4 Free Projs | 133.7 |
| ZiPS | 135.1 |
| Razzball | 135.7 |
| Davenport | 135.9 |
| ATC | 136.3 |
| THE BAT X | 136.5 |
| Median | 138.8 |
| Paywall #6 | 139.0 |
| Paywall #7 | 139.6 |
| Paywall #8 | 139.7 |
| Zheile (FantasyPros) | 140.2 |
| Paywall #1 | 140.9 |
| DraftBuddy | 141.2 |
| Paywall #4 | 143.0 |
| 450 AB | 144.0 |
| Paywall #3 | 144.1 |
| Razzball (Grey) | 144.6 |
| Fantrax | 144.6 |
| Steamer (FG) | 147.8 |
| Depth Charts (FG) | 148.4 |
| Paywall #2 | 158.1 |
Again, no surprises on this last set.
Summary
- As always, a projection aggregate is the most predictive with a small smart sample of existing free projections always finishing near the top.
- All projections overproject the top hitters by a wide margin. Including a smart, computer-based projection into a mix will significantly improve projections.
- The Marcels projection at Baseball-Reference.com crushed the competition by just using a three-year weight average. Remember, it doesn’t include any minor leaguers.
- For now, no paid projections stand out enough to use over those freely available.
That’s it for now. It takes a ton of time and effort to set these up, so I will take a break before diving back in.
Jeff, one of the authors of the fantasy baseball guide,The Process, writes for RotoGraphs, The Hardball Times, Rotowire, Baseball America, and BaseballHQ. He has been nominated for two SABR Analytics Research Award for Contemporary Analysis and won it in 2013 in tandem with Bill Petti. He has won four FSWA Awards including on for his Mining the News series. He's won Tout Wars three times, LABR twice, and got his first NFBC Main Event win in 2021. Follow him on Twitter @jeffwzimmerman.
Yeah. hugely important and so hard to really predict. I’m curious to see the pitching side of things, but I would expect a similar result.
The corollary to “All projections overproject the top hitters by a wide margin” is, of course, where those plate appearances should actually be allocated. Every PA that Mike Trout doesn’t handle is taken by someone else.
Does it really matter where those plate appearances should be allocated? It’s a dozen crappy players, and we probably don’t need to know who they’ll be. Same with pitchers; there will be a whole lot of bad relievers and some bad starters for each team.
“crappy” depends how deep your league is. Correctly identifying which depth guys to go after can be huge.
I feel like the fact that Marcel performed so well is the most interesting finding here. That a consensus of models performs better than any individual model confirms what we already knew, I think, but why is a deliberately “dumb” model with minimal inputs and computation outperforming anything?
Good RMSE could mean it didn’t overshoot the projection for players as much as the other systems. It’s the old accuracy vs precision scenario. RMSE is a measure of accuracy, but precision is probably more important, especially when you can apply an offset to your values to greatly improve accuracy.
For example, imagine ATC being between 35-65 PA too high on every player, vs Marcels being a mix of 25 PA too high/25 PA too low. RMSE is better for the latter but for fantasy purposes, it’s better to use the former because of better precision. If you subtract 50 PA from every single player ATC projected you will get a much better RMSE than the Marcels.
Yeah, but when you’re not working backwards from the mean value, how are you supposed to figure out what that offset should be?
You can look back over the years and see if there’s a consistent pattern. Might not be a flat 50 PA or 10% off every player. Jeff mentions in the article how he adjusts based on age, injury history, and projected talent. But the point is that RMSE only measures accuracy which is not very useful without precision. Look at how accurate projecting 510 PA for each hitter turned out to be, but the precision is terrible so it’s useless for fantasy baseball purposes.
I really like your idea to adjust projecitons based on those three factors. I wonder if all projection systems are affected by them the same, or maybe some are better at age-adjusting, etc. Nailing that down is the key to making the various playing time projections so much more useful. They already have the precision aspect of it nailed down pretty well, and it’s probably just a minor adjustment to get the accuracy bumped up too.
When I ran the numbers, I was able to use three projections. The only one that’s publicly available is Steamer. All the historical projections can be obtained from their site.
HI Jeff – as always, fascinating and informative article (and before getting into it, let me thank you and Tanner for another year of the Process, which is an absolutely must read and full of great data and analysis).
To get it out of the way, I believe (but could be wrong) BAT X uses ATC PA projections, which is why their RMSEs are identical but, since their walk rates differ, they have slightly different AB. But using those two together provides minimal additional information.
I think that in some sense your average of the projection systems approach is a simplified approach of what Ariel Cohen (super smart and even nicer guy as an aside) does in ATC, is it not? He weighs projection systems by their historical accuracy I believe whereas you weigh them equally. But I think what that would miss is the adjustments that you make for Jeff (I think Rudy Gamble does something similar at Razzball using steamer projections). Is that fair to say?
Next, I was surprised that in terms of improved accuracy that when you average in “Jeff” the weight for Jeff became greater the more systems you used. Since the accuracy of projections improve the more of the free systems you used, I would have thought Jeff becomes less weighted as you move from, say, a 3 to 4 system average since you are enhancing the forecast with the increase in non-jeff systems used. Is my intuition on that wrong or am I missing something – any thoughts?
Lastly, In some research I did I found that for veteran players most systems had very close performance per PA – so I am wondering the best approach to using the improved PA/AB forecast. Is it to average those figures as well? Which, of course, would reduce this to just an average across systems. What are your thoughts?
Jeff, I think you are missing some key players in your Google doc of projected ab for example Jackson merrill
And two other Jacksons – Chourio and Holliday. Holliday is forgivable but still had over 200 PA in the majors last year.