Methods

How it works

One rule: nothing from 2026 may influence the 2026 forecast.

1Data

  • Final scores of 61,628 regular-season games, 2000–2025 (last: September 28, 2025).
  • The 2026 schedule — who plays whom, and where. No scores.
  • Source: the public MLB Stats API, cached so reruns are offline and identical.

2Keeping 2026 out

  • Enforced in code: the forecast step stops if any 2026 result reaches it.
  • Grading is a separate step that only reads the saved forecast file.
  • Caveat: this is a retrospective forecast, generated October 28, 2026, after the season. Treat it as a hindcast, not a March prediction.

3Four candidate models

Each gives every team a strength s. A game is priced as:

logit P(home wins) = shome − saway + home field
ModelTeam strength comes from
Coin flip + home fieldNothing — all teams equal.
Last season's W%Last season’s win %.
Team Marcel (3-yr Pythagorean)Last 3 seasons of run differential + record, recent seasons weighted more, pulled toward .500.
Elo, carried overGame-by-game rating (K = 4, margin of victory), 2000–2025, then pulled 33% back to average.

4Picking one

  • Each model predicted every season 2010–2025 using only earlier seasons (2020 skipped for scoring).
  • Rule, fixed in advance: lowest log loss wins. Winner: Elo.
  • Tuning Elo’s settings didn’t help, so the standard ones were kept.

5Simulating the season

  • All 2,430 games played 100,000 times.
  • Each run redraws every team’s true strength (±7.6 wins) — a preseason rating is a guess, not a fact.
  • Each run ends with a full playoff bracket in the current 12-team format.
  • Simplification: standings ties are broken by rating, not head-to-head rules.

6How it's scored

  • Accuracy — did the favourite win?
  • Log loss — rewards confident calls that come true; 0.693 = coin flip. Lower is better.
  • Win-total error — projected vs. actual wins per team.
  • Calibration — do 60% calls win 60% of the time? Do 80% ranges hold 80% of teams?

7Limitations

  • No rosters — trades, signings and injuries are invisible. Main reason ranges span ~25 wins.
  • Frozen ratings — no updates once the season starts.
  • No pitching matchups — starters aren’t known in advance.
  • One season is a small sample — the 15-season backtest matters more.

8Reproduce it

mlbsim preseason forecast 2026   # -> web/data/forecast-2026.json
mlbsim preseason grade 2026      # -> web/data/results-2026.json

Fixed random seed (2026): same inputs, same numbers.

The code isn’t public yet. For a copy, email chennupati@gatech.edu.