Whiff% / Whiff%
Batter
Swings and misses divided by swings. A foul tip counts as a miss and a bunt attempt counts as a swing, both matching Savant. Rolling and span values cover completed plate appearances only.
Agreement with Savant
Checked nightly. Agreement tolerance: ±0.
Pitcher
Swings and misses induced divided by swings induced. A foul tip counts as a miss and a bunt attempt counts as a swing, both matching Savant. Rolling and span values cover completed plate appearances only.
Agreement with Savant
Checked nightly. Agreement tolerance: ±0.
Shown for: batter and pitcher.
Formula
sum(whiffs)::real / NULLIF(sum(swings), 0) — swings and misses over ALL swings, including ones on untracked pitches that carry no zone.
Inputs
pitches.descriptionplate_appearances.whiffsplate_appearances.swings
Era caveats
Three tracking systems across the seasons shown
Rows carry a tracking_era of trackman, hawkeye or hawkeye_bat (migration 001). The systems differ in what they measure and how precisely, so long spans cross a measurement boundary as well as a rule one.
Version history
- 2026-09-02 — Added with the pitch-owner spine. Built from description, never from pitches.is_bunt — that flag marks bunts in play only and misses about 99% of bunt attempts. A foul tip counts as a miss and a bunt attempt counts as a swing; getting either wrong drops the validation sample's reconciled-batter count from 672/672 to 410/672 (bunts) or 68/672 (foul tips). (runbook §52)