How the model works

Methodology

We'd rather show our work than make claims. Here's exactly what goes into a play and what we measure ourselves against.

Projection model

For each game we project per-team run scoring as a weighted blend of three signals:

  • Season pace (45%) — full-season runs scored / allowed per game.
  • Recent form (30%) — same metrics over the last ten games.
  • Opponent context (25%) — opposing team's corresponding allowed / scored rate.

Team aggregates use Bayesian shrinkage with k=15 ghost games of league average baseline so early-season noise can't produce a 7-RPG team after a hot week.

Adjustments stacked on top

  • Starting pitcher — quality factor from FIP with a 50-IP shrinkage prior. Applied 5/9 of full-game runs and 90% of first-5-innings projections.
  • Bullpen — relief-only ERA per team, 150-IP prior. Carries the remaining 4/9 of full-game runs.
  • Park factor — multi-year per-venue multiplier (Coors 1.18, Petco 0.92, etc).
  • Weather — outdoor games get a temperature-based factor pulled from Open-Meteo at game time.

Probability + Kelly sizing

Run totals are modeled as a Negative Binomial distribution parameterized by the empirical season variance, not Poisson — MLB run totals are over-dispersed and Poisson would inflate tail probabilities. Win probabilities use a logistic on projected margin, with the slope fitted from backtest residuals each run rather than hardcoded.

Bet sizing is half-Kelly capped at 5% of bankroll per play. When multiple correlated bets land on the same game, the sum is capped at 6% (full-Kelly across correlated bets over-stakes the slate).

Market gating (the hard rule)

A market is included on the daily card only if its rolling 200+ bet backtest shows ≥+1% ROI AND Brier < 0.246. Markets that fail still appear in their dedicated tabs (transparency) but stay off the headline card.

Markets are re-evaluated weekly. Removing a market is a normal part of the process. We'd rather publish nothing than publish marginal volume.

What we track on ourselves

  • ROI per market — flat 1u at -110 across the season backtest.
  • Brier score — calibration check independent of W/L luck. Lower is better; 0.25 = pure noise.
  • CLV — closing line value. The single best predictor of long-run profitability. Snapped near first pitch, published per pick on the track record.

Deeper documentation

For auditors, customers, and future-us: every production formula has a plain-English explanation in docs/methodology/. Constants verified against the live code, with file paths so you can follow the math straight to the implementation.

  • run_projection.md — the 5-stage pipeline that produces every projected run number we publish.
  • sp_factor.md — starting-pitcher quality factor: weighted FIP + last-3-starts blend + prior-season xwOBA prior.
  • bp_factor.md — bullpen factor: season ERA, Bayesian-shrunk × last-3-day workload fatigue.
  • gate_logic.md — market gate, per-pick edge thresholds, portfolio cap. The codification of our discipline.
  • calibration.md — how projected margin becomes a fair win probability, plus the isotonic and ELO findings still under live evaluation.
  • clv.md — CLV formula plus the 4-step pipeline (record → snap → grade → publish).

If the docs ever disagree with the code, the code is the source of truth and the doc is a bug. If the docs disagree with the brand guide, the brand guide wins.

What we don't do

  • Guarantee wins.
  • Hide losing streaks.
  • Publish marginal plays for content's sake.
  • Charge before we can prove edge.

Bet responsibly

This site is sports analytics, not financial or gambling advice. Past performance does not guarantee future results. Models can and will be wrong. Never wager more than you can afford to lose. US problem-gambling helpline: 1-800-522-4700.