Zone Seen% / Zone%
Batter
Share of zone-tracked pitches seen that were inside the strike zone (Savant zones 1-9). Zone is Savant's discrete zone column, not a geometric test. Not comparable across the 2026 ABS boundary, where plate position was re-measured.
Agreement with Savant
Checked nightly. Agreement tolerance: ±0.
Pitcher
Share of zone-tracked pitches thrown that were inside the strike zone (Savant zones 1-9). Zone is Savant's discrete zone column, not a geometric test. Not comparable across the 2026 ABS boundary, where plate position was re-measured.
Agreement with Savant
Checked nightly. Agreement tolerance: ±0.
Shown for: batter and pitcher.
Formula
sum(in_zone)::real / NULLIF(sum(in_zone) + sum(out_zone), 0) — in-zone pitches over zone-tracked pitches only (zones 1-9 over 1-9 plus 11-14), not over every pitch seen.
Inputs
pitches.zoneplate_appearances.in_zoneplate_appearances.out_zone
Era caveats
The strike zone changed in 2026
sz_top drops from 3.435 to 3.215 with the automated ball-strike system, and migration 001 flags the rows with abs_era. Zone-defined rates are measured against a zone that changed, so comparing 2026 with an earlier season measures the rule change as much as the player. Parity is unaffected: the comparison is per-season against a Savant who has the same boundary. (runbook §52)
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. Divides by zone-tracked pitches, not raw pitches: 673/673 against 644/673 for the all-pitches alternative. (runbook §52)