Product / Model Cards
Model cards Contract Studio

Projections & Surplus Value

Projected WAR × market $/WAR, minus salary, discounted. Control years are options the club can walk away from.

Supports: Extensions, qualifying offers, non-tenders, and trades, under the current CBA or the owners’ cap-and-floor proposal. Refresh: Weekly in offseason; contracts as signed Open Contract Studio

What it predicts

Seasonal WAR (FanGraphs) for projection; actual 2026 one-year arbitration salaries for the arbitration model.

Inputs

  • FanGraphs WAR, PA, IP, age (2024–26 to project; 2005–26 to test the model and measure aging)
  • Statcast tracking skills, 2021–26 (velocity, whiff, CSW, chase, zone rate, xwOBA, exit velocity, K and BB rates)
  • RosterResource contracts: guaranteed salaries, control status, service time
  • Market $/WAR implied by 2026 free-agent deals

Method

  • Marcel-style projection: weighted three-year rates, regressed toward a below-average baseline, Marcel playing time
  • Aging: hitters use a curve measured from 2008–26 (what the projection missed at each age, smoothed); pitchers use the standard table, which the measured curve didn’t beat
  • Catcher framing from before 2026 is re-valued at its challenge-era worth (57%: the 2026 spread of framing among regulars over 2024–25), since challenges and a tighter called zone shrank it
  • Every choice (years of history, aging, the Statcast blend) is kept only if it wins a blind test on seasons it never saw
  • Arbitration salary = a base by arbitration year plus pay per recent and per career WAR, one pooled fit across years (held-out miss about $1.0M vs. $1.1M for separate fits); later years can’t decrease
  • Extension prices: a model fit leave-one-out on 2021–26 extensions (projection and free-agent years bought); a floor at the richest comparable deal was tested and dropped. Club options are the club’s to decline, player options the player’s
  • Trade values: a prospect with an MLB record blends the surplus engine with FanGraphs’ published FV table, weighted by how much of his projection is his own record; a player who missed 2026 is projected from 2024–26 with the playing time players his age kept after a missed season, measured on those who played in the majors again (counting retirements as zero measured retirement, not recovery), with each share’s 80% range; that reads high for a player who may still miss 2027, so the share counting retirements as zero is shown as the low end
  • A player missing from the contract data gets the least control his MLB debut allows (marked as an estimate), with his arbitration seasons priced by the arbitration model, never at the minimum
  • 2026 draftees, not yet on FanGraphs’ board, are valued at their pick on Keystone’s draft curve, put on the table’s scale until they’re graded: times the table-to-curve ratio near the pick on the 2025 class, counting every signed pick from 1 to 300 (one the board doesn’t grade counts $0). The table ran below the curve for the top picks, above it for picks 31–120 and at about a third of it past pick 180 (the Trade Builder shows each band); the graded picks alone read higher, since the board grades only the better later picks. A board row with no MLB id is matched to its pick by name, signing year and bonus, so a graded pick isn’t counted at $0. The ratio rests on one class (ten picks in the top band), so it carries an 80% range from a seeded pick bootstrap, and each draftee’s range is the curve’s band times it. Until graded, a first-round draftee is kept out of his own club’s packages and reads unlikely to move to another club (Keystone’s rule)
  • Packages: the least prospect value that meets the ask, with the rule’s tie-breaks. Values aren’t precise to 5%, so each package is shown with the others of no more players within 5% of the ask, either side, as a toss-up
  • Surplus computed in the browser so $/WAR, growth, discount, and CBA scenario update instantly
  • Extension calculator compares a deal with the status quo, with survival-weighted WAR for injury risk. “Going year to year pays him” counts the seasons the deal decides (contract years at salary; a declined year at its buyout plus his market value), so it differs from the walk-away only by the seasons after the deal
  • Under the owners’ lens, floor money is priced at both ends (free, and face value); a gain within $25K reads “no difference”, and an end where the value stays flat at zero quotes no walk-away
  • The arbitration row’s range is the model’s held-out miss as a share of salary at that salary level (high salaries: the top fifth of predictions)

How well it works

Computed by the pipeline from the data on this site

Projection backtest: the production model on 13 seasons (2012–19, 2022–26), each forecast only from the three before it (RMSE)
Hitters RMSE 1.209 WAR vs. 1.387 naive (n = 8,767 player-seasons)
Pitchers RMSE 0.955 WAR vs. 1.086 naive (n = 7,276) Naive = “same WAR as last season.” 2020–21 aren’t targets: the 60-game season distorts both.
Where the miss comes from
Playing time 28% of hitter error, 39% of pitcher error With actual playing time known, RMSE would fall to 1.03 (hitters) and 0.74 (pitchers). The rest is mostly one-season randomness that no projection removes; it’s why better skill data barely moves the number.
How many seasons of history? (same test, RMSE)
1 yr H 1.260 · P 0.9692 yrs H 1.221 · P 0.9593 yrs H 1.209 · P 0.9554 yrs H 1.206 · P 0.9565 yrs H 1.206 · P 0.955 Three seasons is the sweet spot; a fourth or fifth changes accuracy by less than 0.005 WAR.
Aging curve: fixed table vs. our empirical curve
Hitters RMSE 1.220 → 1.209; better in 13 of 13 seasons · adopted Pitchers RMSE 0.955 → 0.957; better in 4 of 13 seasons · not adopted Each curve is fit only on seasons before the one it forecasts. Hitters decline faster after 30 than the old table assumed; for pitchers the curve didn’t beat the table, so the table stays. −1−0.50+0.52125293337AgeMeasuredOld table Change in WAR per 600 PA from one season to the next, by age (hitters). The gap after 30 is why older hitters now project lower.
Statcast skills blend (forward-in-time test)
Hitters RMSE 1.342 → 1.343 on 1,594 player-seasons; better in 2 of 3 test seasons · not adoptedPitchers RMSE 0.922 → 0.924 on 1,835 player-seasons; better in 1 of 3 test seasons · not adopted Model-free tracking measures from last season (velocity, whiff, CSW, chase, zone, xwOBA, exit velocity), each shrunk by its own measured noise; fit on earlier seasons, scored on later ones (2021–2026 tracking).
Arbitration model fit (2026 one-year deals, each award held out)
Arb 1: r = 0.86, MAE $621K (n = 109)Arb 2: r = 0.73, MAE $1.31M (n = 49)Arb 3: r = 0.84, MAE $1.63M (n = 39) All years: MAE $993K (n = 197; $1.11M with a separate fit for each year)
vs. published 2027 Pittsburgh arbitration projections (as reported by Pittsburgh Baseball Now, Oct 2026)
Mean absolute gap $643K (10 players, against our own held-out error of $993K; the Track Record grades it on that and checks whether ours leans one way)
Extension prices: leave-one-out on 84 extensions signed 2021–26
Average miss $3.7M a year vs. $8.8M at $9M per WAR (r = 0.78) Tried and dropped: floor at richest comparable (miss $5.3M); aav in 2027 dollars (miss $4.5M); service time term (miss $3.8M).
$/WAR calibration
$8.10M per recent WAR (51 free-agent deals, $845M AAV)

Data: FanGraphs WAR, PA and IP (2024–26 to project; 2005–26 to test); RosterResource contracts; 2026 free-agent deals for $/WAR.

What it can't see

  • WAR-based value ignores roster fit, positional scarcity, and the shape of the free-agent market each winter.
  • No Statcast skills in the projections: we tested a blend (2021–26 tracking, scored on 2024–26) and it didn’t beat three years of WAR, so it isn’t used.
  • Playing time is a quarter to two-fifths of the error. Injuries, role changes and depth-chart moves are mostly unforecastable from public data.
  • Against published 2027 projections Keystone runs higher for most of Pittsburgh’s class (8 of 10 higher, +$0.46M on average), most for relievers (+$1.16M, 2 of 2); payroll and walk-aways use Keystone’s figures.
  • The CBA outcome is unknown. The owners’ scenario assumes a 12% market compression (Keystone assumption).
  • 13 FanGraphs board prospects have no MLB id in the board data, so they aren’t valued in any trade pool or package, and their grade isn’t joined to them anywhere on the site, including Pittsburgh’s Neomar Urbina (SIRP, 35+; $1.5M on FanGraphs’ table): Randy Arias (HOU, 35+), Micah Bucknam (TOR, 40), Carlos Castillo (LAA, 35+), Connor Cooke (TOR, 40), Joe Elbis (AZ, 35+), Sean Episcope (MIL, 35+), Joshua Flores (MIL, 35+), Ruben Gallego (AZ, 35+), River Hamilton (DET, 35+), Griffin Hugus (SEA, 40), Peter Kussow (NYM, 35+), Dahian Santos (TOR, 35+). No id crosswalk in our data covers them.

How we'd measure impact

  • Surplus per committed dollar vs. a market baseline
  • Calibration: projected vs. actual WAR each season
Keystone is an independent portfolio project. It is not affiliated with Major League Baseball or any club. Data: MLB Stats API, Baseball Savant, FanGraphs. Used under their terms for individual, non-commercial use.