Model output · 2026-09-10
Projected score, win probability and projected total for all 5 games, with the inputs that produced each one. Every row on this page was written to an append only store before first pitch and has not been edited since.
No accuracy figure yet, and that is deliberate. 10 predictions have been published before first pitch and settled. This page will show Brier score, log loss and calibration once that number reaches 250. A back test over 1617 past games exists for checking the maths, and it is not an accuracy claim because the model could see data those games had already produced.
What is missing and why. There is no market moneyline, no market total, no edge and no closing line value on this page, because this project does not have an odds feed. Those columns are left out rather than filled with a number the site cannot stand behind. Everything shown is computed from free public data.
{
"park_index": 1.0,
"weather": {
"field_azimuth": 145.0,
"index": 1.0571,
"out_component_mph": -0.68,
"temp_f": 85.6,
"temp_multiplier": 1.06,
"wind_from_deg": 217,
"wind_mph": 2.2,
"wind_multiplier": 0.9973
},
"home": {
"home_field_multiplier": 1.0072,
"offence": {
"de_parked": 1.0185,
"home_park_factor": 1.0,
"index": 1.0185,
"raw_index": 1.0185,
"regression_weight": 1.0,
"runs_per_game": 4.565
},
"opposing_bullpen": {
"excess": -0.35,
"expected_ip": 11.7,
"index": 0.9825,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 7.6,
"window_days": 3
},
"opposing_pitching": {
"index": 0.9417,
"staff_index": 0.9201,
"starter": {
"batters_faced": 663,
"fip": 4.355,
"index": 0.9573,
"ip": 166.1,
"regression_weight": 1.0
},
"starter_share": 0.58
},
"projected_runs": 4.497,
"team_id": 144
},
"away": {
"home_field_multiplier": 0.9928,
"offence": {
"de_parked": 1.0117,
"home_park_factor": 1.0,
"index": 1.0117,
"raw_index": 1.0117,
"regression_weight": 1.0,
"runs_per_game": 4.534
},
"opposing_bullpen": {
"excess": -0.111,
"expected_ip": 11.7,
"index": 0.9944,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 10.4,
"window_days": 3
},
"opposing_pitching": {
"index": 0.9553,
"staff_index": 0.8512,
"starter": {
"batters_faced": 547,
"fip": 4.689,
"index": 1.0308,
"ip": 131.2,
"regression_weight": 1.0
},
"starter_share": 0.58
},
"projected_runs": 4.521,
"team_id": 139
}
}{
"park_index": 1.04,
"weather": {
"field_azimuth": 9.0,
"index": 1.0586,
"out_component_mph": -0.32,
"temp_f": 87.1,
"temp_multiplier": 1.06,
"wind_from_deg": 281,
"wind_mph": 9.3,
"wind_multiplier": 0.9987
},
"home": {
"home_field_multiplier": 1.0072,
"offence": {
"de_parked": 0.9807,
"home_park_factor": 1.04,
"index": 0.9807,
"raw_index": 1.0003,
"regression_weight": 1.0,
"runs_per_game": 4.483
},
"opposing_bullpen": {
"excess": -0.436,
"expected_ip": 11.7,
"index": 0.9782,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 6.6,
"window_days": 3
},
"opposing_pitching": {
"index": 1.0612,
"staff_index": 1.0642,
"starter": {
"batters_faced": 243,
"fip": 4.991,
"index": 1.059,
"ip": 55.2,
"regression_weight": 0.608
},
"starter_share": 0.58
},
"projected_runs": 5.059,
"team_id": 143
},
"away": {
"home_field_multiplier": 0.9928,
"offence": {
"de_parked": 1.0049,
"home_park_factor": 1.0,
"index": 1.0049,
"raw_index": 1.0049,
"regression_weight": 1.0,
"runs_per_game": 4.503
},
"opposing_bullpen": {
"excess": -0.026,
"expected_ip": 11.7,
"index": 0.9987,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 11.4,
"window_days": 3
},
"opposing_pitching": {
"index": 0.8945,
"staff_index": 0.9244,
"starter": {
"batters_faced": 574,
"fip": 3.971,
"index": 0.8729,
"ip": 143.1,
"regression_weight": 1.0
},
"starter_share": 0.58
},
"projected_runs": 4.397,
"team_id": 117
}
}{
"park_index": 0.85,
"weather": {
"field_azimuth": 49.0,
"index": 0.9858,
"out_component_mph": 1.74,
"temp_f": 66.5,
"temp_multiplier": 0.979,
"wind_from_deg": 279,
"wind_mph": 2.7,
"wind_multiplier": 1.0069
},
"home": {
"home_field_multiplier": 1.0072,
"offence": {
"de_parked": 0.9534,
"home_park_factor": 0.85,
"index": 0.9534,
"raw_index": 0.8819,
"regression_weight": 1.0,
"runs_per_game": 3.952
},
"opposing_bullpen": {
"excess": -0.436,
"expected_ip": 11.7,
"index": 0.9782,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 6.6,
"window_days": 3
},
"opposing_pitching": {
"index": 0.8717,
"staff_index": 1.0007,
"starter": {
"batters_faced": 601,
"fip": 3.54,
"index": 0.7783,
"ip": 149.1,
"regression_weight": 1.0
},
"starter_share": 0.58
},
"projected_runs": 3.075,
"team_id": 136
},
"away": {
"home_field_multiplier": 0.9928,
"offence": {
"de_parked": 0.9259,
"home_park_factor": 1.0,
"index": 0.9259,
"raw_index": 0.9259,
"regression_weight": 1.0,
"runs_per_game": 4.15
},
"opposing_bullpen": {
"excess": -0.35,
"expected_ip": 11.7,
"index": 0.9825,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 7.6,
"window_days": 3
},
"opposing_pitching": {
"index": 0.9949,
"staff_index": 1.0792,
"starter": {
"batters_faced": 686,
"fip": 4.248,
"index": 0.9338,
"ip": 172.0,
"regression_weight": 1.0
},
"starter_share": 0.58
},
"projected_runs": 3.374,
"team_id": 140
}
}{
"park_index": 1.02,
"weather": {
"field_azimuth": 75.0,
"index": 1.0932,
"out_component_mph": 7.84,
"temp_f": 82.5,
"temp_multiplier": 1.06,
"wind_from_deg": 248,
"wind_mph": 7.9,
"wind_multiplier": 1.0314
},
"home": {
"home_field_multiplier": 1.0072,
"offence": {
"de_parked": 1.0093,
"home_park_factor": 1.02,
"index": 1.0093,
"raw_index": 1.0194,
"regression_weight": 1.0,
"runs_per_game": 4.568
},
"opposing_bullpen": {
"excess": -0.521,
"expected_ip": 11.7,
"index": 0.9739,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 5.6,
"window_days": 3
},
"opposing_pitching": {
"index": 1.2815,
"staff_index": 1.2961,
"starter": {
"batters_faced": 501,
"fip": 5.782,
"index": 1.2709,
"ip": 111.2,
"regression_weight": 1.0
},
"starter_share": 0.58
},
"projected_runs": 6.341,
"team_id": 147
},
"away": {
"home_field_multiplier": 0.9928,
"offence": {
"de_parked": 1.0484,
"home_park_factor": 1.0,
"index": 1.0484,
"raw_index": 1.0484,
"regression_weight": 1.0,
"runs_per_game": 4.699
},
"opposing_bullpen": {
"excess": -0.35,
"expected_ip": 11.7,
"index": 0.9825,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 7.6,
"window_days": 3
},
"opposing_pitching": {
"index": 0.7512,
"staff_index": 0.8046,
"starter": {
"batters_faced": 382,
"fip": 3.18,
"index": 0.7126,
"ip": 99.0,
"regression_weight": 0.955
},
"starter_share": 0.58
},
"projected_runs": 3.839,
"team_id": 115
}
}{
"park_index": 0.98,
"weather": {
"field_azimuth": 127.0,
"index": 0.9985,
"out_component_mph": -2.45,
"temp_f": 71.4,
"temp_multiplier": 1.0084,
"wind_from_deg": 62,
"wind_mph": 5.8,
"wind_multiplier": 0.9902
},
"home": {
"home_field_multiplier": 1.0072,
"offence": {
"de_parked": 1.0575,
"home_park_factor": 0.98,
"index": 1.0575,
"raw_index": 1.0469,
"regression_weight": 1.0,
"runs_per_game": 4.692
},
"opposing_bullpen": {
"excess": -0.35,
"expected_ip": 11.7,
"index": 0.9825,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 7.6,
"window_days": 3
},
"opposing_pitching": {
"index": 0.961,
"staff_index": 1.014,
"starter": {
"batters_faced": 357,
"fip": 4.154,
"index": 0.9225,
"ip": 85.2,
"regression_weight": 0.892
},
"starter_share": 0.58
},
"projected_runs": 4.41,
"team_id": 145
},
"away": {
"home_field_multiplier": 0.9928,
"offence": {
"de_parked": 1.0762,
"home_park_factor": 1.0,
"index": 1.0762,
"raw_index": 1.0762,
"regression_weight": 1.0,
"runs_per_game": 4.823
},
"opposing_bullpen": {
"excess": -0.35,
"expected_ip": 11.7,
"index": 0.9825,
"note": "relief innings inferred as team IP minus 5.2 per start",
"relief_ip": 7.6,
"window_days": 3
},
"opposing_pitching": {
"index": 0.9648,
"staff_index": 0.9923,
"starter": {
"batters_faced": 70,
"fip": 3.114,
"index": 0.9448,
"ip": 18.0,
"regression_weight": 0.175
},
"starter_share": 0.58
},
"projected_runs": 4.441,
"team_id": 134
}
}| Source | Read at |
|---|---|
| mlb bullpen | Sep 10, 7:24 PM PT |
| mlb pitcher | Sep 10, 7:23 PM PT |
| mlb schedule | Sep 10, 7:55 PM PT |
| mlb team hitting | Sep 10, 7:22 PM PT |
| mlb team pitching | Sep 10, 7:22 PM PT |
| mlb venues | Sep 10, 7:23 PM PT |
| park factors | Sep 10, 6:54 PM PT |
| weather | Sep 10, 7:24 PM PT |
Projected runs are a Poisson mean, not a prediction that a team scores exactly that many. Win probability comes from the difference of the two means with the tie mass split evenly, because baseball does not end in a tie. The projected total is the sum of the two means. The full method, including what the model does badly.