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
| Model | Team strength comes from |
|---|---|
| Coin flip + home field | Nothing — 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 over | Game-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.