Deep slate diagnosis — 20260901
- Games: 15 · hits 7 · misses 8 · winner accuracy 0.4667
- Mean total-run bias on losses: -2.375 (negative = under-projected)
- Mean team-run error on losses: 7.125 · mean Brier on losses: 0.375
Loss primary drivers
- Small edge on the losing side: 1
- Run environment far higher than projected (under-dispersed): 2
- Starting-pitcher projection was wrong: 4
- Backed the wrong side with real conviction: 1
High-level causal issue register
[HIGH] Canonical artifact warning requires reconciliation
- Domain:
artifact_integrity· affected: slate-wide - Evidence: structural audit totals: {'critical': 0, 'error': 0, 'warning': 1, 'info': 108}
- Action: Fix the flagged stat or presentation contract before treating this slate as clean evidence.
- Do not infer: A warning flags a display or contract issue; it does not prove the model picked the wrong side.
[HIGH] Published margins are compressed relative to realized margins
- Domain:
score_distribution· affected: CHW@HOU, DET@MIN, MIL@CHC, NYM@TB, PHI@ARI, STL@LAD, TOR@CLE - Evidence: 13/15 predictions were ≤2 runs; 9/15 actual margins were ≥4; mean predicted margin 1.67 vs actual 4.20
- 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: ATL@WAS, BAL@COL, CHW@HOU, DET@MIN, MIA@KC, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@PIT, STL@LAD, TOR@CLE - Evidence: weighted absolute calibration error 0.2476 across 15 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: ATL@WAS, BAL@COL, CHW@HOU, DET@MIN, MIA@KC, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@PIT, STL@LAD, TOR@CLE - Evidence: home/away/total R² = 0.0361/0.0227/0.0280
- 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.
[MEDIUM] Most high-raw picks lost before/after shrinkage
- Domain:
calibration· affected: BAL@COL, MIL@CHC, SD@CIN, STL@LAD - Evidence: 0/4 games with raw pick probability ≥0.65 won
- Action: Track how often high-raw-probability picks lose across multiple slates, and keep the raw to calibrated to published lineage.
- Do not infer: This one slate is not enough to justify a new per-bucket shrinkage rule.
[INFO] Every settled game received structural QA
- Domain:
coverage· affected: ATL@WAS, BAL@COL, CHW@HOU, DET@MIN, MIA@KC, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@PIT, STL@LAD, TOR@CLE - Evidence: 15/15 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: ATL@WAS, CHW@HOU, DET@MIN, MIA@KC, MIL@CHC, PHI@ARI, SD@CIN, SEA@BOS, STL@LAD - Evidence: 9 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: ATL@WAS, BAL@COL, CHW@HOU, DET@MIN, MIA@KC, MIL@CHC, NYM@TB, NYY@LAA, OAK@TEX, PHI@ARI, SD@CIN, SEA@BOS, SF@PIT, STL@LAD, TOR@CLE - 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, 20260901 (4 prior slates loaded)
- Highest-confidence pick loss streak: 1 slate(s)
- Actionable pattern detected: True
Escalated persistent patterns
- simulation_inert_on_slate — 5 consecutive slates (5 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 5 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 — 5 consecutive slates (5 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 5 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: regressing · series [0.4667, 0.9412, 0.5, 0.6667, 0.4667]weighted_calibration_error: regressing · series [0.2179, 0.3961, 0.0693, 0.1661, 0.2476]margin_bias: regressing · series [-1.333, -1.882, -2.786, -3.5, -2.533]mean_team_run_error_on_losses: regressing · series [5.0, 3.0, 7.0, 8.25, 7.125]
Pipeline stage quality
historical_ml: winner 7/15 (0.4667), team-run MAE 3.0977, margin MAE 4.1769variance_applied: winner 6/15 (0.4), team-run MAE 3.0667, margin MAE 4.1333enhanced_prediction: winner 6/15 (0.4), team-run MAE 3.2667, margin MAE 4.9333embedded_savant_run_environment: winner 6/15 (0.4), team-run MAE 3.1667, margin MAE 4.8667fundamental_edge_target_review: winner 7/15 (0.4667), team-run MAE 3.1333, margin MAE 4.8capped_target: winner 7/15 (0.4667), team-run MAE 3.1333, margin MAE 4.8simulation_result: winner 7/15 (0.4667), team-run MAE 3.1333, margin MAE 4.8published_final: winner 7/15 (0.4667), team-run MAE 3.1333, margin MAE 4.8
Probability lineage
- ATL@WAS: raw 0.5085 → calibrated 0.5082 → published 0.5317; score coherence followed by matchup-recency guardrail
- BAL@COL: raw 0.7515 → calibrated 0.7373 → published 0.7461; 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.5032 → calibrated 0.505 → published 0.53; score coherence followed by matchup-recency guardrail
- MIA@KC: raw 0.6275 → calibrated 0.6227 → published 0.6464; score_coherence aligned probability to the published score margin
- MIL@CHC: raw 0.7934 → calibrated 0.6442 → published 0.6986; score_coherence aligned probability to the published score margin
- NYM@TB: raw 0.5085 → calibrated 0.5082 → published 0.5269; score coherence followed by matchup-recency guardrail
- NYY@LAA: raw 0.534 → calibrated 0.5332 → published 0.54; score coherence followed by matchup-recency guardrail
- OAK@TEX: raw 0.551 → calibrated 0.5499 → published 0.5487; published probability matches the calibrated/governed value
- PHI@ARI: raw 0.585 → calibrated 0.5816 → published 0.5602; score coherence followed by matchup-recency guardrail
- SD@CIN: raw 0.689 → calibrated 0.6778 → published 0.6; score coherence followed by matchup-recency guardrail
- SEA@BOS: raw 0.6328 → calibrated 0.6273 → published 0.53; score coherence followed by matchup-recency guardrail
- SF@PIT: raw 0.5615 → calibrated 0.56 → published 0.5445; score coherence followed by matchup-recency guardrail
- STL@LAD: raw 0.6793 → calibrated 0.6696 → published 0.58; score coherence followed by matchup-recency guardrail
- TOR@CLE: raw 0.546 → calibrated 0.545 → published 0.5552; no recorded transformation explains the publication delta
Every game, in detail
ATL@WAS — ❌ miss
- Predicted ATL 7-5 (conf -0.06, lean) · actual WAS 5-9
- Root cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.282705 · team-run err 6.0 · total bias -2
- Contributing factors:
- WAS offense under-projected by 4
BAL@COL — ❌ miss
- Predicted BAL 7-4 (conf -0.49, strong) · actual COL 2-4
- Root cause: Starting-pitcher projection was wrong
- Secondary cause: Run environment far lower than projected (over-dispersed)
- Errors: winner WRONG · Brier 0.556717 · team-run err 5.0 · total bias +5
- Contributing factors:
- total runs over-projected by 5 (11 vs 6)
- BAL offense over-projected by 5
- Gabriel Hughes (COL) allowed 4 fewer ER than projected (1 vs 5)
- committed to BAL at 0.49 confidence and it lost
CHW@HOU — ✅ hit
- Predicted CHW 6-5 (conf -0.06, lean) · actual CHW 5-1
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.2209 · team-run err 5.0 · total bias +5
- Contributing factors:
- total runs over-projected by 5 (11 vs 6)
- HOU offense over-projected by 4
- Sean Burke (CHW) allowed 4 fewer ER than projected (0 vs 4)
- Ronel Blanco (HOU) allowed 4 fewer ER than projected (0 vs 4)
DET@MIN — ❌ miss
- Predicted DET 4-3 (conf -0.06, lean) · actual MIN 2-15
- Root cause: Run environment far higher than projected (under-dispersed)
- Errors: winner WRONG · Brier 0.2809 · team-run err 14.0 · total bias -10
- Contributing factors:
- total runs under-projected by 10 (7 vs 17)
- MIN offense under-projected by 12
- Troy Melton (DET) allowed 3 more ER than projected (5 vs 2)
MIA@KC — ❌ miss
- Predicted KC 3-5 (conf +0.29, strong) · actual MIA 6-3
- Root cause: Starting-pitcher projection was wrong
- Secondary cause: Backed the wrong side with real conviction
- Errors: winner WRONG · Brier 0.417801 · team-run err 5.0 · total bias -1
- Contributing factors:
- MIA offense under-projected by 3
- Tyler Phillips (MIA) allowed 4 fewer ER than projected (0 vs 4)
- Randy Dobnak (KC) allowed 5 more ER than projected (6 vs 1)
- committed to KC at 0.29 confidence and it lost
MIL@CHC — ❌ miss
- Predicted CHC 6-8 (conf +0.40, strong) · actual MIL 9-4
- Root cause: Backed the wrong side with real conviction
- Secondary cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.488059 · team-run err 7.0 · total bias +1
- Contributing factors:
- MIL offense under-projected by 3
- CHC offense over-projected by 4
- Robert Gasser (MIL) allowed 3 fewer ER than projected (2 vs 5)
- committed to CHC at 0.40 confidence and it lost
NYM@TB — ✅ hit
- Predicted TB 5-6 (conf +0.05, lean) · actual TB 2-6
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.223781 · team-run err 3.0 · total bias +3
- Contributing factors:
- total runs over-projected by 3 (11 vs 8)
- NYM offense over-projected by 3
- Sean Manaea (NYM) allowed 3 more ER than projected (5 vs 2)
- Freddy Peralta (TB) allowed 3 fewer ER than projected (1 vs 4)
NYY@LAA — ✅ hit
- Predicted NYY 6-4 (conf -0.08, lean) · actual NYY 7-3
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.2116 · team-run err 2.0 · total bias +0
OAK@TEX — ✅ hit
- Predicted TEX 4-5 (conf +0.10, lean) · actual TEX 5-8
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.203649 · team-run err 4.0 · total bias -4
- Contributing factors:
- total runs under-projected by 4 (9 vs 13)
- TEX offense under-projected by 3
PHI@ARI — ✅ hit
- Predicted PHI 4-3 (conf -0.12, moderate) · actual PHI 7-1
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.193429 · team-run err 5.0 · total bias -1
- Contributing factors:
- PHI offense under-projected by 3
SD@CIN — ❌ miss
- Predicted SD 7-4 (conf -0.20, strong) · actual CIN 3-4
- Root cause: Starting-pitcher projection was wrong
- Secondary cause: Backed the wrong side with real conviction
- Errors: winner WRONG · Brier 0.36 · team-run err 4.0 · total bias +4
- Contributing factors:
- total runs over-projected by 4 (11 vs 7)
- SD offense over-projected by 4
- Nick Lodolo (CIN) allowed 4 fewer ER than projected (2 vs 6)
- committed to SD at 0.20 confidence and it lost
SEA@BOS — ❌ miss
- Predicted BOS 3-5 (conf +0.06, lean) · actual SEA 9-6
- 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 7.0 · total bias -7
- Contributing factors:
- total runs under-projected by 7 (8 vs 15)
- SEA offense under-projected by 6
- Jedixson Paez (BOS) allowed 6 more ER than projected (8 vs 2)
SF@PIT — ✅ hit
- Predicted PIT 5-6 (conf +0.09, lean) · actual PIT 12-13
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.20746 · team-run err 14.0 · total bias -14
- Contributing factors:
- total runs under-projected by 14 (11 vs 25)
- SF offense under-projected by 7
- PIT offense under-projected by 7
- Logan Webb (SF) allowed 7 more ER than projected (9 vs 2)
- Paul Skenes (PIT) allowed 4 more ER than projected (5 vs 1)
STL@LAD — ❌ miss
- Predicted LAD 5-7 (conf +0.16, moderate) · actual STL 13-8
- Root cause: Run environment far higher than projected (under-dispersed)
- Secondary cause: Backed the wrong side with real conviction
- Errors: winner WRONG · Brier 0.3364 · team-run err 9.0 · total bias -9
- Contributing factors:
- total runs under-projected by 9 (12 vs 21)
- STL offense under-projected by 8
- committed to LAD at 0.16 confidence and it lost
TOR@CLE — ✅ hit
- Predicted CLE 4-5 (conf +0.11, moderate) · actual CLE 1-6
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.197815 · team-run err 4.0 · total bias +2
- Contributing factors:
- TOR offense over-projected by 3
- Gavin Williams (CLE) allowed 3 fewer ER than projected (0 vs 3)
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: 5 helped vs 0 hurt
- Would help:
- BAL@COL (miss): lost a 0.49-confidence pick; wider tails lower overconfidence
- MIA@KC (miss): lost a 0.29-confidence pick; wider tails lower overconfidence
- MIL@CHC (miss): lost a 0.40-confidence pick; wider tails lower overconfidence
- SD@CIN (miss): lost a 0.20-confidence pick; wider tails lower overconfidence
- STL@LAD (miss): lost a 0.16-confidence pick; wider tails lower overconfidence
player.pitcher.v4 form weights / player.pitcher_prior_games
- Targets: starter_er_mae, starter_outs_mae
- Net: 10 helped vs 0 hurt
- Would help:
- BAL@COL (miss): starter ER off by 4
- CHW@HOU (hit): starter ER off by 4
- DET@MIN (miss): starter ER off by 3
- MIA@KC (miss): starter ER off by 5
- MIL@CHC (miss): starter ER off by 3
- NYM@TB (hit): starter ER off by 3
- SD@CIN (miss): starter ER off by 4
- SEA@BOS (miss): starter ER off by 6
- SF@PIT (hit): starter ER off by 7
- TOR@CLE (hit): starter ER off by 3
recent. / season. run-mean weighting
- Targets: team_run_mae, total_run_mae, accuracy
- Net: 13 helped vs 1 hurt
- Would help:
- ATL@WAS (miss): team runs off by 6
- BAL@COL (miss): team runs off by 5
- CHW@HOU (hit): team runs off by 5
- DET@MIN (miss): team runs off by 14
- MIA@KC (miss): team runs off by 5
- MIL@CHC (miss): team runs off by 7
- OAK@TEX (hit): team runs off by 4
- PHI@ARI (hit): team runs off by 5
- SD@CIN (miss): team runs off by 4
- SEA@BOS (miss): team runs off by 7
- SF@PIT (hit): team runs off by 14
- STL@LAD (miss): team runs off by 9
- TOR@CLE (hit): team runs off by 4
- Would hurt / risk:
- NYY@LAA (hit): team runs already close (off 2); reweight risks disturbing it