Season Review
Four records for every club, each one step closer to the scoreboard, so talent and luck can be told apart.
What it predicts
Next season’s winning percentage (which record predicts it best) and each luck component’s year-to-year repeat rate.
Inputs
- Standings, runs scored and allowed, split records, 2021–26 (MLB Stats API)
- Team batting and pitching totals, unearned runs (MLB Stats API)
- Every plate appearance’s wOBA and expected wOBA (Statcast)
- Pittsburgh’s game-by-game scores (Statcast)
Method
- BaseRuns: A·B/(B+C) + HR, with the B multiplier fit each season so league BaseRuns equals league runs
- Contact-quality record: BaseRuns minus each team’s wOBA-over-expected (relative to league) × plate appearances ÷ 1.24
- Pythagorean (PythagenPat) wins from each set of runs; the steps between records are the luck components
- Unearned runs above league average are split out of sequencing (errors aren’t in BaseRuns’ inputs)
- Tests: next-season W% from each record, linear fit with each season held out and, separately, fit only on earlier seasons; a no-information baseline (every club at .500); 95% intervals on each record’s gain from resampling whole clubs; repeat rates (with Fisher intervals) on consecutive team-seasons, keyed on the club
- What a record has meant the next season: each record’s fitted line applied to a club’s 2026 record, a forecast that includes roster turnover and aging, not a measure of 2026 talent
How well it works
Computed by the pipeline from the data on this site
- Next-season wins from each record: 150 team-seasons, 2021–2026, each season held out (error in wins)
- Actual record 10.28 (r = 0.567)Pythagorean 9.91 (r = 0.608)BaseRuns 9.92 (r = 0.608)Contact quality 10.12 (r = 0.585)
- Against no information (every club at .500): 12.46 wins. Forward in time (fit only on earlier seasons, 120 team-seasons)
- Actual 9.78Pythagorean 9.33BaseRuns 9.44Contact quality 9.57
- Each record’s gain over the real one, held out (95% interval, whole clubs resampled)
- Pythagorean +0.36 wins (−0.003 to +0.69)BaseRuns +0.35 wins (−0.09 to +0.76)Contact quality +0.15 wins (−0.39 to +0.65)
- Year-to-year repeat rate of each component (r, same team, consecutive seasons; 95% interval)
- Run timing .04 (−.12 to .20)Sequencing .16 (.001 to .31)Hitters’ results vs. contact .42 (.28 to .54)Allowed results vs. contact .48 (.34 to .59)Hitters’ results vs. contact, park taken out .22 (.06 to .36)Allowed results vs. contact, park taken out .28 (.12 to .42)Unearned runs vs. league .21 (.05 to .36)Hits allowed bunched together .12 (−.04 to .27)All luck combined .22 (.06 to .37)Record vs. LHP minus vs. RHP .07 (−.09 to .23)One-run winning percentage −.10 (−.26 to .06)Results vs. contact (the step, in wins) .30 (.14 to .44)Home minus road record .08 (−.08 to .24)Day minus night record .00 (−.16 to .16)Record vs. winning teams minus overall .01 (−.15 to .17) Run-timing luck can’t be told from zero. Sequencing repeats a sliver: its interval just clears zero. The contact step repeats at r .30 (park, speed, defense), which is why the contact-quality record predicts no better than BaseRuns.
Data: standings, team totals and split records 2021–26 (MLB Stats API); every plate appearance’s wOBA and expected wOBA, Statcast 2021–26; 150 consecutive team-season pairs.
What it can't see
- Contact gaps mix luck with park, team speed and defense; the step repeats a little (see the Track Record). The hitters-vs.-pitchers split takes each park’s own wOBA-over-expected effect out (all teams’ plate appearances there); the record keeps the unadjusted gaps, where a park’s effect on both sides nearly cancels.
- BaseRuns has no term for wild pitches, passed balls or baserunning beyond steals.
- Split records (vs. lefties, home/road, day/night, vs. winning teams) are small samples; none of the ones tested repeats.
- Pythagorean and BaseRuns predict next season about equally well, so the page shows both rather than one “true” record.
How we'd measure impact
- Whether 2026’s sequencing gap closes in 2027 (runs allowed vs. BaseRuns)
- Pittsburgh unearned runs vs. league