How ValuCast Works

← Back to rankings

As of June 2026 · ValuCast H+P v1

At a glance — what's ours vs external
ComponentProvenance
Hitting modelBuilt & validated by ValuCast
Hitting inputsBaseball Savant xBA/xSLG
Pitching modelBuilt & validated by ValuCast — no third-party projections
Pitching inputsPublic MLB statistics
Steamer boardExternal comparison board; fair historical benchmark pending

What ValuCast is

ValuCast turns player projections into values tuned to your league's categories, weights, and roster rules. You can value players from two sources: Steamer (an external comparison board, and the default) or ValuCast H+P, our own in-house projection.

The two boards

The default board values current-season actuals + Steamer rest-of-season. The ValuCast board values our own full-season projection. Flipping the toggle is useful for eyeballing differences, but it is not an apples-to-apples backtest; our real check is the held-out validation below.

Prospect Rank v1

The Prospects board is ValuCast's own prospect ordering. Top prospects are generated from a universal baseball profile first, then translated into a public rank and value. The score is built from factual current performance, age/level context, draft/signing investment, historical outcome patterns, and availability/sample risk.

How top prospects are generated
  1. Start with the current eligible prospect universe and MLBAM identity.
  2. Build each player's factual baseball profile: role, age, level, current MiLB stat line, sample size, draft/signing facts, ETA, and availability context.
  3. Score the profile through ValuCast's prospect model and universal outcome index.
  4. Apply sample, availability, and bucket calibration rules by group, not by name.
  5. Rank the final scores into one universal prospect board.

Category Fit is a separate league-settings view. It can help a user understand roster fit, but it does not generate the public prospect rank.

What can and cannot affect a prospect score
  • Can affect score: Prospect Model v0.6, universal outcome context, MiLB performance rates and sample reliability, draft/signing facts, age/level context, and factual availability status.
  • Cannot affect score: DD ranks, DD values, DD value history, public prospect rankings, market signals, and DD adapter ranks or scores. Those are display/comparison context only.
  • Bucket calibration: applied by rule, not by name. Current rules cover lower-minors pedigree compression, thin upper-level pitcher samples, and upper-level hitters with full samples but limited game impact.

How the model works

For each player we weight recent seasons and regress toward the league average (more for small samples). Hitters are then age-adjusted and de-noised toward Statcast expected stats (Savant xBA/xSLG) before projecting. Pitchers are projected per batter faced with a continuous starting-vs-relieving usage blend (no hard starter/reliever cliff). Age adjustment applies to hitters only — the v1 pitching model has no aging curve, a planned future improvement.

Under the hood

A Marcel-style method: recent seasons weighted 5.0,4.0,3.0 (most recent first), regressed to the league mean, with per-component rate (events ÷ opportunities) reconstructed into counts. Hitters are age-adjusted and add Statcast input de-noising (blend actual contact/power toward Savant xBA/xSLG, redistributing into 1B/2B/3B/HR by the player's own extra-base mix). Pitchers use a continuous starter-probability blend so swingmen and converted arms aren't miscategorized; the v1 pitching model has no age curve (a planned improvement) and consumes no third-party projection.

Model equations

Season weighting is done per component as weighted events ÷ weighted opportunities (not a weighted rate). For a component with event count E and opportunities PA, weights 5.0,4.0,3.0: rate = (5·E₋₁ + 4·E₋₂ + 3·E₋₃) / (5·PA₋₁ + 4·PA₋₂ + 3·PA₋₃).

Regression to the mean over N opportunities with a regression constant n_reg (hitters 1200, pitchers 300): projected_rate = (rate·N + league_rate·n_reg) / (N + n_reg), then the projected count is rebuilt as projected_rate × projected_PA.

Age adjustment (hitters only) nudges hitter projections along an empirical aging curve. The v1 pitching model applies no aging curve.

Hitter de-noising (knobs α): blend the actual rate toward the Savant expected rate, rate* = (1−α)·rate + α·x (x = xBA/xSLG), then redistribute the extra hits/bases preserving the player's hit-type mix.

Pitcher role blend: with psp the starter probability, each component is shifted continuously by f[c]^(h_sp − p_sp) — no hard SP/RP split.

Worked example (HR rate). An age-29 hitter (near peak, age factor ≈ 1.0) with no Statcast movement: 30 HR / 600 PA, 26 / 580, 20 / 520 over the last three seasons (weights 5/4/3). Weighted events ÷ weighted opportunities = (5·30 + 4·26 + 3·20) / (5·600 + 4·580 + 3·520) = 314 / 6880 ≈ 0.046 HR per PA. Regressing toward a 0.033 league HR rate with n_reg = 1200 gives (314 + 0.033·1200) / (6880 + 1200) ≈ 0.0438. Projected PA = 0.5·600 + 0.1·580 + 200 = 558, so projected HR ≈ 0.0438 × 55824.4 HR.

Validation details

We hold out future seasons (2020–2025), project forward from prior seasons only (no peeking), and score against simple baselines. Reported as a mean-absolute-error (MAE) ratio — below 1.0 means lower error than the baseline.

  • Hitting vs classic Marcel, n = 1770 qualified hitter-seasons, correlation-win rate 0.519. qualified hitters (>= 200 actual PA, projectable, has prior season).
  • Pitching vs persistence (last-year carry-forward), n = 2234 qualified pitcher-seasons, skill correlation-win rate 0.639. qualified pitchers (role-specific IP floor, projectable, has prior season).

Per-stat MAE ratios:

Hitting (vs classic): AVG 0.942 · OBP 0.959 · SLG 0.96 · OPS 0.951 — counting stats ≈ 1.0 (de-noising doesn't touch them).

Pitching (vs persistence): ERA 0.713 · WHIP 0.751 · K_9 0.834 · BB_9 0.715 · IP 0.981 · K 0.932.

W, SV and QS are reported separately and treated as lower-confidence — they depend heavily on team decisions and opportunity, not pitcher skill.

Track record — held-out scorecard

On seasons the model never saw:

StepHeld-out result
Pitching vs persistence (skill) 0.821 MAE ratio (~17.9% lower error) — IP and K roughly neutral; the win is driven by ERA / WHIP / K-9 / BB-9.
Hitting vs classic Marcel 0.979 aggregate MAE ratio (~2.1% lower error) — gains concentrated in AVG/OBP/SLG/OPS.
reliability-weighted regressiontie — not shipped
in-house expected-stat model (own xBA)shortfall — not shipped

What we have and haven't proven

Our validation is against internal baselines (persistence and classic Marcel), which it beats on held-out data. ValuCast has not yet proven it beats Steamer or ZiPS: we lack matching archived preseason projections for a fair, apples-to-apples historical backtest. So Steamer is an external comparison board, with a fair historical benchmark pending — not a benchmark we've beaten.