Depth Chart & Playing Time
Fielding at every position a player can play, the lineup that maximizes value, and playing time from each player’s role, held to one season for the team.
What it predicts
Plate appearances and innings in the coming season (playing time); total team value within one season of team PA and IP (depth chart).
Inputs
- Batters defended at every position, 2021–26 (who stood where on each Statcast plate appearance)
- Savant Outs Above Average restricted to each position (range runs), plus arm and double-play runs from Fielding Run Value spread over a player’s positions by outs; catcher framing, blocking and throwing
- Every club’s opening-day 40-man with status, 2021–26 (statsapi), to learn how roles become playing time
- Team plate appearances and innings, 2024–26 regular seasons (Stats API team totals), and the share of innings starters threw (Statcast: the first pitcher each club used in each game)
Method
- Fielding at a position: three seasons weighted 5/4/3, regressed toward the defensive spectrum: a second baseman is presumed 7 runs below an average shortstop (the 5-run positional gap plus 2 for an unfamiliar spot), not average; moving down the spectrum keeps half the gap; catching value doesn’t transfer. The shifts are set by hand, not fitted
- Forward test of the position rating: the rating for 2025 and 2026, built only on the seasons before, against what players did there (2,000+ batters at the spot): r ≈ .46, slope ≈ 1.0; one season lands within about ±8 runs of the rating two times in three (the Fielding Lab shows the live figures)
- Arm and double plays count, not just range: each built only on the seasons before, a range + arm + DP rating predicted 2025 and 2026 total fielding runs with less error than range alone (the Fielding Lab shows the live test)
- Moving an established regular (2,000+ batters fielded in 2024–26) to a spot where he defended under 1,000 batters in 2025–26 costs 3 runs
- Lineup: exact assignment of the nine spots by value. Many alignments tie on value, so among those the one with more lineup WAR wins (the player with more projected time takes the more valuable spot). The server and the browser run the same search with the same tie-breaks
- Playing time: a linear role model (starter, catcher, rotation, bullpen rank, Marcel playing time, opening status), fit on 2022–26 and tested a season at a time
- One season for the team: about 6,100 PA, nine lineup slots of a ninth each, and about 1,440 IP, 58% of them for five rotation slots (2024–26 averages). A starter plays the smaller of his projected time and his slot
- What starters can’t cover goes to fill-ins at that position: the bench first, then 40-man players off the 26-man, the most valuable there first, each up to his own projected time as a starter (or a call-up). The rest is replacement level (0 WAR), shown by slot
- A fill-in is valued at the position he fills, not his best one. The bench is a backup catcher, then the bats that add the most team WAR under the budget, so a reserve who covers shortstop beats a fourth DH bat
- Rotation innings the starters can’t cover go to other pitchers who mostly start, by value; the bullpen gets the rest in leverage order, then call-up relievers, then replacement. No pitcher exceeds his role’s innings
- The Winter Plan and the browser run the same rule on the same numbers. A script (web/scripts/parity.mjs) checks they give the same WAR, lineup and playing time on the published plans and on about 4,000 more rosters: every single addition, random rosters and every club’s candidates
- Prospects with little MLB record are capped at what their Future Value grade implies for a first-year player
How well it works
Computed by the pipeline from the data on this site
- Playing time, 2,753 hitter- and 3,465 pitcher-seasons on opening-day 40-man rosters, 2022–26 (each season forecast blind)
- Hitters PA error 176 (Marcel) → 162 (depth chart) → 155 (with opening-day status) Pitchers IP error 46.6 → 41.7 → 36.4 The Winter Plan uses the status-aware version: the club decides who opens on the active roster. The Outlook uses the other, because no one knows another club’s opening day in October.
- Player WAR error (rate × playing time)
- Hitters 1.333 → 1.323 → 1.313 · Pitchers 0.917 → 0.904 → 0.863
- Team wins (150 team-seasons)
- r = 0.652 depth chart · 0.655 Marcel playing time · 0.644 best 13 + 13 RMSE 9.47 vs. 9.41 wins. At the team level the depth chart is no better than Marcel; its value is in who plays where.
- Team playing-time budget (one season of PA and IP per club, by slot, with replacement fill) vs. none, the same 150 team-seasons
- Team wins RMSE 9.39 with the budget vs. 9.33 without (r 0.661 vs. 0.664) Player playing time hitter PA error 186 vs. 169 · pitcher IP 44.4 vs. 43.6 With the budget, team wins come out about the same and hitters’ PA worse. Without it a club’s hitters added up to 4,385–6,414 PA, so a deep roster got credit for playing time no season has; the budget keeps every club to one season.
- Role coefficients (status-aware, plate appearances)
- intercept +55.59starter −36.90starter catcher −20.73marcel pa +0.66starter x marcel +0.29no history +39.63opening il −94.25opening minors −126.53
Data: every club’s opening-day 40-man with status, 2022–26 (MLB Stats API; 2,753 hitter- and 3,465 pitcher-seasons scored); FanGraphs WAR; batters defended by position, Statcast 2021–26.
What it can't see
- Injuries after opening day; the model knows only who opens hurt. Health is in each player’s projected time, not in who fills in when.
- Platoons and matchup lineups (one lineup per scenario). Starters don’t rotate through DH on rest days, so a slot’s leftover time goes to reserves and call-ups only.
- Fill-ins are handed time greedily, so usage is lumpier than real life. On 2022–26 opening-day rosters the budget predicted hitters’ PA a little worse than giving each player his own role’s time, and team wins no better. Its job is different: no roster can claim more than a season, so stacking players can’t add wins.
- Replacement-level time is what no one on the 40-man covers; real clubs fill it with waiver claims and minor-league signings near 0 WAR.
- The 2027 Outlook still ranks clubs with each player’s own role time. The Winter Plan, the Free-Agent Board and the Roster Builder use the budget and measure changes from the Outlook’s number.
- Players with no MLB fielding fall back on their listed position. A player listed at DH with little MLB fielding, or one whose time is spread over several spots with under 300 batters at each, gets no rating anywhere and can only DH (the Fielding Lab lists them).
- No aging term in the fielding ratings: in the forward test, fielders 25 and under fielded above their rating the next season and those 32 and over below it (the Fielding Lab shows the figures).
- A player’s main position is his listed one when that is harder than where he has mostly played and he has 300+ batters there, which moves his spectrum prior (Ryan O’Hearn: listed in right field, mostly a first baseman).
- The spectrum shifts and the move cost are set by hand, not fitted to players who moved.
- The Winter Plan searches the lineup alignment after the value assignment (a swap of two starters, or a bench bat into a spot) and keeps a change worth 0.2 wins or more; Pittsburgh’s Roster Builder and the Trade Builder run the same search on the depth chart they show. Other clubs’ baselines don’t run it (their Roster Builder doesn’t either), and the Add list’s wins and Maximize score candidates without it to stay fast, so when a swap pays after an addition the total moves by more than his listed wins.
How we'd measure impact
- Playing-time error vs. Marcel’s formula, every season
- Team-win projection error (2027 Outlook)
- Every scenario hands out exactly one season of PA and IP (build check)