Deep slate diagnosis — 20260831
- Games: 12 · hits 8 · misses 4 · winner accuracy 0.6667
- Mean total-run bias on losses: -2.25 (negative = under-projected)
- Mean team-run error on losses: 8.25 · mean Brier on losses: 0.327
Loss primary drivers
- Starting-pitcher projection was wrong: 3
- Backed the wrong side with real conviction: 1
High-level causal issue register
[HIGH] An intermediate stage materially degraded winner direction
- Domain:
pipeline_stages· affected: BAL@COL, NYY@LAA - Evidence: historical_ml → variance_applied changed winner accuracy by -0.1667 (-2 hits)
- Action: List the exact games whose winner flipped at this stage, and keep both the before-stage and after-stage picks in the trace.
- Do not infer: Even if a later stage recovers the pick, this unstable step is still a risk; do not treat it as harmless.
[HIGH] Published margins are compressed relative to realized margins
- Domain:
score_distribution· affected: DET@MIN, MIL@CHC, NYY@LAA, OAK@TEX, SD@CIN, SF@ATL - Evidence: 11/12 predictions were ≤2 runs; 6/12 actual margins were ≥4; mean predicted margin 1.42 vs actual 4.92
- Action: Check whether predicted margins are too narrow across several recent out-of-sample slates (measuring tail coverage and margin MAE) before widening the score spread.
- Do not infer: A single blowout game is not a reason to widen every score prediction.
[HIGH] Published confidence buckets were poorly aligned on this slate
- Domain:
calibration· affected: BAL@COL, CHW@HOU, DET@MIN, MIA@WAS, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@ATL - Evidence: weighted absolute calibration error 0.1661 across 12 games
- Action: Watch the same confidence buckets over the full rolling window before changing any calibration weight.
- Do not infer: A single slate has far too few games to establish a stable calibration curve.
[HIGH] Validated run models explain very little holdout variance
- Domain:
model_validation· affected: BAL@COL, CHW@HOU, DET@MIN, MIA@WAS, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@ATL - Evidence: home/away/total R² = 0.0378/0.0275/0.0272
- Action: Treat exact run scores as low-confidence estimates, and look for stronger features or a better target before tuning the score tails.
- Do not infer: A small positive R² only means the model beats guessing the average; it does not make the exact scores reliable.
[INFO] Every settled game received structural QA
- Domain:
coverage· affected: BAL@COL, CHW@HOU, DET@MIN, MIA@WAS, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@ATL - Evidence: 12/12 games structurally audited
- Action: Keep the per-game audit receipt in every report.
- Do not infer: Full audit coverage does not cancel the findings raised inside the audited games.
[INFO] Material calibrated-to-published movements have recorded lineage
- Domain:
probability_lineage· affected: CHW@HOU, DET@MIN, MIA@WAS, MIL@CHC, NYY@LAA, OAK@TEX, SEA@BOS, SF@ATL - Evidence: 8 material movement(s), all explained by named score-coherence and/or recency transformations
- Action: Keep showing every probability layer and the named transformation between them.
- Do not infer: A published probability above the calibrated one is not a governor bypass when a recorded transformation explains it.
[INFO] Simulation produced no winner-direction intervention on this slate
- Domain:
simulation· affected: BAL@COL, CHW@HOU, DET@MIN, MIA@WAS, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@ATL - Evidence: flip candidates 0; published flips 0
- Action: Measure the simulation's contribution across rolling slates, separating score realization from winner flipping.
- Do not infer: Zero winner flips is not a defect and does not mean the simulation did no score-reconciliation work.
Cross-slate trends (persistent-pattern memory)
- Window: 20260828, 20260829, 20260830, 20260831 (3 prior slates loaded)
- Highest-confidence pick loss streak: 0 slate(s)
- Actionable pattern detected: True
Escalated persistent patterns
- simulation_inert_on_slate — 4 consecutive slates (4 in window)
- Target lever(s): simulation.allow_score
- Direction: confirm the simulation module is running, not silently no-oping
- Guardrail: simulation_inert_on_slate has persisted 4 consecutive slates; this is no longer single-slate noise. Treat it as an actionable pattern and raise the code/diagnostic action named; do not force a parameter move.
- weak_run_model_signal — 4 consecutive slates (4 in window)
- Target lever(s): training.xgb.n_estimators, training.xgb.max_depth, training.xgb.learning_rate
- Direction: investigate features/target via isolated training backtest (manual)
- Guardrail: weak_run_model_signal has persisted 4 consecutive slates; this is no longer single-slate noise. Treat it as an actionable pattern and raise the code/diagnostic action named; do not force a parameter move.
Metric direction across the window
winner_accuracy: flat · series [0.4667, 0.9412, 0.5, 0.6667]weighted_calibration_error: improving · series [0.2179, 0.3961, 0.0693, 0.1661]margin_bias: regressing · series [-1.333, -1.882, -2.786, -3.5]mean_team_run_error_on_losses: regressing · series [5.0, 3.0, 7.0, 8.25]
Pipeline stage quality
historical_ml: winner 8/12 (0.6667), team-run MAE 3.1283, margin MAE 4.7023variance_applied: winner 6/12 (0.5), team-run MAE 3.125, margin MAE 4.75enhanced_prediction: winner 8/12 (0.6667), team-run MAE 3.4583, margin MAE 4.75embedded_savant_run_environment: winner 8/12 (0.6667), team-run MAE 3.4167, margin MAE 4.6667fundamental_edge_target_review: winner 8/12 (0.6667), team-run MAE 3.4167, margin MAE 4.6667capped_target: winner 8/12 (0.6667), team-run MAE 3.4167, margin MAE 4.6667simulation_result: winner 8/12 (0.6667), team-run MAE 3.4167, margin MAE 4.6667published_final: winner 8/12 (0.6667), team-run MAE 3.4167, margin MAE 4.6667
Probability lineage
- BAL@COL: raw 0.7585 → calibrated 0.7435 → published 0.7492; score_coherence aligned probability to the published score margin
- CHW@HOU: raw 0.5085 → calibrated 0.5082 → published 0.53; score coherence followed by matchup-recency guardrail
- DET@MIN: raw 0.5085 → calibrated 0.5082 → published 0.53; score coherence followed by matchup-recency guardrail
- MIA@WAS: raw 0.5085 → calibrated 0.5082 → published 0.53; score coherence followed by matchup-recency guardrail
- MIL@CHC: raw 0.5085 → calibrated 0.5082 → published 0.53; score coherence followed by matchup-recency guardrail
- NYM@TB: raw 0.67 → calibrated 0.661 → published 0.6655; score_coherence aligned probability to the published score margin
- NYY@LAA: raw 0.5943 → calibrated 0.591 → published 0.5509; score coherence followed by matchup-recency guardrail
- OAK@TEX: raw 0.5085 → calibrated 0.5082 → published 0.53; score coherence followed by matchup-recency guardrail
- PHI@ARI: raw 0.5085 → calibrated 0.5082 → published 0.5269; score coherence followed by matchup-recency guardrail
- SD@CIN: raw 0.6947 → calibrated 0.677 → published 0.6735; score_coherence aligned probability to the published score margin
- SEA@BOS: raw 0.585 → calibrated 0.5816 → published 0.5602; score coherence followed by matchup-recency guardrail
- SF@ATL: raw 0.5085 → calibrated 0.5082 → published 0.53; score coherence followed by matchup-recency guardrail
Every game, in detail
BAL@COL — ✅ hit
- Predicted BAL 7-4 (conf -0.50, strong) · actual BAL 2-1
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.06288 · team-run err 8.0 · total bias +8
- Contributing factors:
- total runs over-projected by 8 (11 vs 3)
- BAL offense over-projected by 5
- COL offense over-projected by 3
CHW@HOU — ✅ hit
- Predicted HOU 4-5 (conf +0.06, lean) · actual HOU 3-6
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.2209 · team-run err 2.0 · total bias +0
DET@MIN — ✅ hit
- Predicted MIN 4-5 (conf +0.06, lean) · actual MIN 1-11
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.2209 · team-run err 9.0 · total bias -3
- Contributing factors:
- total runs under-projected by 3 (9 vs 12)
- DET offense over-projected by 3
- MIN offense under-projected by 6
- Taj Bradley (MIN) allowed 3 fewer ER than projected (1 vs 4)
MIA@WAS — ✅ hit
- Predicted WAS 3-4 (conf +0.06, lean) · actual WAS 3-6
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.2209 · team-run err 2.0 · total bias -2
- Contributing factors:
- Ryan Gusto (MIA) allowed 3 fewer ER than projected (1 vs 4)
MIL@CHC — ❌ miss
- Predicted MIL 6-5 (conf -0.06, lean) · actual CHC 3-17
- Root cause: Starting-pitcher projection was wrong
- Secondary cause: Run environment far higher than projected (under-dispersed)
- Errors: winner WRONG · Brier 0.2809 · team-run err 15.0 · total bias -9
- Contributing factors:
- total runs under-projected by 9 (11 vs 20)
- MIL offense over-projected by 3
- CHC offense under-projected by 12
- Kyle Harrison (MIL) allowed 6 more ER than projected (9 vs 3)
NYM@TB — ❌ miss
- Predicted TB 3-5 (conf +0.33, strong) · actual NYM 3-2
- Root cause: Starting-pitcher projection was wrong
- Secondary cause: Backed the wrong side with real conviction
- Errors: winner WRONG · Brier 0.44289 · team-run err 3.0 · total bias +3
- Contributing factors:
- total runs over-projected by 3 (8 vs 5)
- TB offense over-projected by 3
- Robert Stock (NYM) allowed 4 fewer ER than projected (0 vs 4)
- Ian Seymour (TB) allowed 3 more ER than projected (3 vs 0)
- committed to TB at 0.33 confidence and it lost
NYY@LAA — ❌ miss
- Predicted NYY 5-4 (conf -0.10, moderate) · actual LAA 1-10
- Root cause: Backed the wrong side with real conviction
- Secondary cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.30346 · team-run err 10.0 · total bias -2
- Contributing factors:
- NYY offense over-projected by 4
- LAA offense under-projected by 6
- committed to NYY at 0.10 confidence and it lost
OAK@TEX — ✅ hit
- Predicted TEX 3-5 (conf +0.06, lean) · actual TEX 1-8
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.2209 · team-run err 5.0 · total bias -1
- Contributing factors:
- TEX offense under-projected by 3
- Gage Jump (OAK) allowed 5 more ER than projected (7 vs 2)
PHI@ARI — ✅ hit
- Predicted PHI 5-4 (conf -0.05, lean) · actual PHI 2-1
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.223783 · team-run err 6.0 · total bias +6
- Contributing factors:
- total runs over-projected by 6 (9 vs 3)
- PHI offense over-projected by 3
- ARI offense over-projected by 3
- Aaron Nola (PHI) allowed 3 fewer ER than projected (1 vs 4)
SD@CIN — ✅ hit
- Predicted SD 6-4 (conf -0.35, strong) · actual SD 5-0
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.1066 · team-run err 5.0 · total bias +5
- Contributing factors:
- total runs over-projected by 5 (10 vs 5)
- CIN offense over-projected by 4
- Michael King (SD) allowed 3 fewer ER than projected (0 vs 3)
SEA@BOS — ✅ hit
- Predicted BOS 2-3 (conf +0.12, moderate) · actual BOS 8-9
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.193436 · team-run err 12.0 · total bias -12
- Contributing factors:
- total runs under-projected by 12 (5 vs 17)
- SEA offense under-projected by 6
- BOS offense under-projected by 6
- George Kirby (SEA) allowed 3 more ER than projected (5 vs 2)
- Payton Tolle (BOS) allowed 4 more ER than projected (4 vs 0)
SF@ATL — ❌ miss
- Predicted ATL 4-5 (conf +0.06, lean) · actual SF 7-3
- Root cause: Starting-pitcher projection was wrong
- Secondary cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.2809 · team-run err 5.0 · total bias -1
- Contributing factors:
- SF offense under-projected by 3
- Bryce Elder (ATL) allowed 4 more ER than projected (5 vs 1)
Cross-game lever tension
Each candidate fix, with the games it would help and the games it would hurt. A lever that repairs one game and breaks two is visible here before it is proposed.
score.variance_multiplier / score.variance_floor (widen run distributions)
- Targets: brier_score, calibration_error
- Net: 2 helped vs 2 hurt
- Would help:
- NYM@TB (miss): lost a 0.33-confidence pick; wider tails lower overconfidence
- NYY@LAA (miss): lost a 0.10-confidence pick; wider tails lower overconfidence
- Would hurt / risk:
- BAL@COL (hit): strong correct call at 0.50; widening softens a good edge
- SD@CIN (hit): strong correct call at 0.35; widening softens a good edge
player.pitcher.v4 form weights / player.pitcher_prior_games
- Targets: starter_er_mae, starter_outs_mae
- Net: 9 helped vs 1 hurt
- Would help:
- DET@MIN (hit): starter ER off by 3
- MIA@WAS (hit): starter ER off by 3
- MIL@CHC (miss): starter ER off by 6
- NYM@TB (miss): starter ER off by 4
- OAK@TEX (hit): starter ER off by 5
- PHI@ARI (hit): starter ER off by 3
- SD@CIN (hit): starter ER off by 3
- SEA@BOS (hit): starter ER off by 4
- SF@ATL (miss): starter ER off by 4
- Would hurt / risk:
- BAL@COL (hit): starter projection was accurate (ER off 1); reweight risks disturbing it
recent. / season. run-mean weighting
- Targets: team_run_mae, total_run_mae, accuracy
- Net: 9 helped vs 2 hurt
- Would help:
- BAL@COL (hit): team runs off by 8
- DET@MIN (hit): team runs off by 9
- MIL@CHC (miss): team runs off by 15
- NYY@LAA (miss): team runs off by 10
- OAK@TEX (hit): team runs off by 5
- PHI@ARI (hit): team runs off by 6
- SD@CIN (hit): team runs off by 5
- SEA@BOS (hit): team runs off by 12
- SF@ATL (miss): team runs off by 5
- Would hurt / risk:
- CHW@HOU (hit): team runs already close (off 2); reweight risks disturbing it
- MIA@WAS (hit): team runs already close (off 2); reweight risks disturbing it