DiamondIQ · Transparency

How every DiamondIQ number is computed

Public WAR implementations are partially black-box — you see the output, not every input. Ours is documented end to end, including exactly what we don't yet model. If you can't audit it, you shouldn't fully trust it.

DiamondIQ WAR — position players

Standard public WAR framework: sum the run contributions above replacement, then divide by runs-per-win. We build it from components we control.

  • Batting runs (park-adjusted wRAA): (wOBA − lgwOBA) / wOBA-scale × PA, with wOBA from the season line using published linear weights stored in our league_constants. The hitter's wOBA is park-neutralized first (see park factors below).
  • Baserunning (v1): stolen-base runs only, SB × 0.2 − CS × 0.4 (published linear weights). Extra-base advancement is future work.
  • Positional adjustment: the published per-position values (C +12.5 … SS +7.5 … DH −17.5 per 162 defensive games), prorated by the player's games at each position from the league fielding appearances.
  • Fielding: runs-denominated defense from Baseball Savant — Outs Above Average (the leaderboard's own fielding_runs_prevented, ≈ 0.8 runs per out) for non-catchers, plus catcher framing runs. Players with no qualifying Savant data (DH-only, small samples) are shown as an explicit omission, never a fabricated zero.
  • Replacement: the ~570-WAR-pool convention, ≈ 20 runs per 600 PA — a rate, so it's season-length independent.
  • Runs per win: computed from the live run environment, 9 × (leagueR / leagueIP) × 1.5 + 3 (≈ 9.9 in 2026).
Fielding (v2). Defense is now included, in runs, from Baseball Savant's public Outs Above Average and catcher-framing leaderboards — no black-box proxy from errors or fielding%. Where a player has no qualifying Savant fielding data (DH-only or below the sample threshold), fielding is shown as an explicit omission rather than a fabricated zero, so their number reads as offensive value plus positional context. Baserunning remains v1 (stolen-base runs only).

DiamondIQ WAR — pitchers

FIP-based runs above replacement (public methodology):

  • FIP: (13·HR + 3·(BB+HBP) − 2·K) / IP + league constant, where the constant centers FIP on league ERA.
  • Park adjustment: FIP is divided by the hitter's-park multiplier so a pitcher in a tough run environment gets credit.
  • vs. replacement: measured against a replacement level blended between starter (≈ .380 team) and reliever by the pitcher's starter share, scaled by innings and converted to a runs scale over runs-per-win. Reliever leverage is simplified in v1 (flat) — a known limitation.

WAR vs. PitchIQ. These answer different questions. PitchIQ is a percentile quality index (how good, including Statcast arsenal); WAR is accumulated value (how much, given innings). A dominant arm with 40 IP posts a high PitchIQ but modest WAR — a durable league-average workhorse can out-WAR him. Both are real; neither replaces the other.

Park factors

Our own, computed from MLB game logs — not a third-party feed. For each park we compare total runs per game (both teams) in that team's home games to its road games over a rolling 3-season window, which cancels out the home team's own quality. The raw ratio is regressed toward 1.00 by sample size, then the 30-park set is renormalized so the league mean is exactly 1.00 by construction. A hitter plays ~half at home, so a player's park multiplier is (parkFactor + 1) / 2. Coors sits ≈ 1.14; T-Mobile Park ≈ 0.89.

BatIQ & PitchIQ (quality indices)

Both are 0-100 percentile indices vs. the qualified population (50 = league average, 80+ = elite). BatIQ blends park-adjusted results (wOBA), Statcast contact quality (xwOBA / hard-hit / whiff), and plate discipline (BB%−K%), regressed toward 50 for small samples. PitchIQ blends K-BB%, run prevention, and Statcast arsenal quality. Unlike WAR, they don't reward playing time — they measure per-opportunity quality.

Metrics are computed from the MLB Stats API, Baseball Savant (our nightly ingest), and our own park factors. Numbers update as the season and ingest advance. Questions or a discrepancy? The full prediction log and model grading live on the model page.