Outs Recorded methodology
How the Outs Recorded model works
Per-start outs projection for each starting pitcher (e.g. 17.5 outs ≈ 5.2 IP), graded against posted O/U lines. Research-only at v0.1.0 — not yet a public official pick.
Inputs
- • Pitcher season IP/start average (from pitcher_k_db composite)
- • Pitcher last-start date and pitch count (from pitcher game logs, when available)
- • Opposing lineup contact rate (from batter_k_tendency)
- • Park run-environment factor (shared NRFI park factors)
- • Home/away
- • Recent form (last 3 starts blended vs season average)
- • When merged: posted pitcher_outs market line + over/under price + bookmaker
Outputs
- • Projected outs per starter per game (publication variant: full_model)
- • Side-by-side projections under all four shadow variants
- • Lean (Over / Under / Neutral) once a market line is known
- • Confidence (1–10) derived from the projection-vs-line gap
- • BullpenIQ artifact: per-game starter outs forecast for downstream bullpen-load planning
Approach
The Outs Recorded model projects how many outs each starter is likely to record (3 × innings pitched). Outs O/U lines are typically set near a starter's recent average length — a 17.5 line corresponds roughly to 5.2 IP.
The model runs four shadow variants every day so we can measure which adjustments actually help before promoting any of them to public picks:
• simple_avg — season IP/start converted to outs.
• fatigue_adj — discounts for short rest (<4 days) or a heavy last outing (≥100 pitches).
• lineup_adj — adjusts for opponent contact rate (high-contact lineups push pitch counts up and outs down).
• full_model — adds home/away, park run-environment, and a recent-form blend (last three starts vs season average).
Training data
No bespoke training. The publication variant (full_model) is a deterministic composite over the same per-pitcher and per-batter feature stores the K and Hits models already use (pitcher_k_db, batter_k_tendency, NRFI park factors).
Game-log inputs (days rest, last-start pitches) come from the shared pitcher game-log store when available; the model degrades gracefully when those fields are missing — fatigue adjustments simply don't apply.
Calibration
Calibration begins by running the four variants in parallel for several weeks of real games, grading each against actual outs from MLB box scores, and comparing win rate, Brier score, and ROI side-by-side.
Until a variant clearly wins, every projection stays at the research tier. Promotion to public picks is a single config flag in the model code, not a code rewrite.
How a pick becomes official
At v0.1.0 the answer is: it doesn't. Picks remain research-only regardless of confidence or signal strength.
When the model is promoted, the same gates the K model uses will apply: a confirmed pitcher with real history, a captured sportsbook outs line, and a real bookmaker price at pick time.
Known biases and limits
- ! Bullpen-game and opener slates compress the projection — lines under 9 outs are skipped entirely as too noisy to project from a starter profile.
- ! No paid weather/temperature input yet. Hot-weather "ball-flies-further" effects on pitch counts are not modeled.
- ! Days-rest detection depends on the shared pitcher game-log store. When that is stale or empty (early-season, just-recalled starters), the fatigue layer is a no-op.
Not for use as
- × Predicting one exact at-bat or one exact inning. These are probability models, not play-by-play fortune tellers.
- × Ignoring the sportsbook price. A model edge only matters if the available price is good enough.
- × Replacing late-breaking baseball judgment. Lineups, weather, scratches, and pitching changes can move after the page refreshes.