Deep slate diagnosis — 20260916
- Games: 15 · hits 10 · misses 5 · winner accuracy 0.6667
- Mean total-run bias on losses: 3.2 (negative = under-projected)
- Mean team-run error on losses: 6.4 · mean Brier on losses: 0.314
Loss primary drivers
- Small edge on the losing side: 1
- Run environment far lower than projected (over-dispersed): 1
- Starting-pitcher projection was wrong: 1
- Backed the wrong side with real conviction: 2
High-level causal issue register
[HIGH] An intermediate stage materially degraded winner direction
- Domain:
pipeline_stages· affected: BOS@TEX, KC@HOU, SEA@LAA - Evidence: historical_ml → variance_applied changed winner accuracy by -0.2000 (-3 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 confidence buckets were poorly aligned on this slate
- Domain:
calibration· affected: ATL@CHC, BAL@NYM, BOS@TEX, CHW@CLE, DET@TOR, KC@HOU, LAD@CIN, MIA@ARI, MIL@PIT, NYY@MIN, OAK@TB, PHI@WAS, SD@COL, SEA@LAA, SF@STL - Evidence: weighted absolute calibration error 0.1661 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@CHC, BAL@NYM, BOS@TEX, CHW@CLE, DET@TOR, KC@HOU, LAD@CIN, MIA@ARI, MIL@PIT, NYY@MIN, OAK@TB, PHI@WAS, SD@COL, SEA@LAA, SF@STL - Evidence: home/away/total R² = 0.0021/0.0200/0.0035
- 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: LAD@CIN, NYY@MIN, OAK@TB - Evidence: 1/3 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@CHC, BAL@NYM, BOS@TEX, CHW@CLE, DET@TOR, KC@HOU, LAD@CIN, MIA@ARI, MIL@PIT, NYY@MIN, OAK@TB, PHI@WAS, SD@COL, SEA@LAA, SF@STL - 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@CHC, BAL@NYM, CHW@CLE, DET@TOR, LAD@CIN, MIL@PIT, NYY@MIN, PHI@WAS, SD@COL - 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@CHC, BAL@NYM, BOS@TEX, CHW@CLE, DET@TOR, KC@HOU, LAD@CIN, MIA@ARI, MIL@PIT, NYY@MIN, OAK@TB, PHI@WAS, SD@COL, SEA@LAA, SF@STL - 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: 20260906, 20260907, 20260908, 20260909, 20260910, 20260911, 20260912, 20260913, 20260914, 20260915, 20260916 (10 prior slates loaded)
- Highest-confidence pick loss streak: 0 slate(s)
- Actionable pattern detected: True
Escalated persistent patterns
- simulation_inert_on_slate — 11 consecutive slates (11 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 11 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.
- single_slate_calibration_instability — 3 consecutive slates (7 in window)
- Target lever(s): confidence.empirical_max_weight, confidence.base_cap, confidence.moderate_cap
- Direction: increase empirical shrinkage
- Guardrail: single_slate_calibration_instability has persisted 3 consecutive slates; this is no longer single-slate noise. Treat it as an actionable pattern and propose a bounded shadow experiment against a target lever.
- weak_run_model_signal — 11 consecutive slates (11 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 11 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: improving · series [0.6, 0.5455, 0.7333, 0.6667, 0.6, 0.6667, 0.5333, 0.6, 0.7, 0.4, 0.6667]weighted_calibration_error: improving · series [0.0937, 0.2611, 0.1825, 0.1069, 0.1171, 0.2091, 0.1711, 0.0827, 0.2812, 0.2795, 0.1661]margin_bias: improving · series [-1.467, -0.182, -0.867, -2.133, -1.0, -2.933, -2.667, -1.8, -0.4, -1.667, -1.133]mean_team_run_error_on_losses: regressing · series [5.333, 3.8, 6.75, 5.6, 6.5, 5.0, 6.143, 5.0, 6.333, 5.556, 6.4]
Pipeline stage quality
historical_ml: winner 9/15 (0.6), team-run MAE 1.8428, margin MAE 3.0594variance_applied: winner 6/15 (0.4), team-run MAE 1.8667, margin MAE 2.9333enhanced_prediction: winner 11/15 (0.7333), team-run MAE 1.9333, margin MAE 3.2embedded_savant_run_environment: winner 11/15 (0.7333), team-run MAE 2.0333, margin MAE 3.4fundamental_edge_target_review: winner 10/15 (0.6667), team-run MAE 2.1, margin MAE 3.5333capped_target: winner 10/15 (0.6667), team-run MAE 2.1, margin MAE 3.5333simulation_result: winner 10/15 (0.6667), team-run MAE 2.1, margin MAE 3.5333published_final: winner 10/15 (0.6667), team-run MAE 2.1, margin MAE 3.5333
Probability lineage
- ATL@CHC: raw 0.6244 → calibrated 0.5695 → published 0.53; score coherence followed by matchup-recency guardrail
- BAL@NYM: raw 0.6169 → calibrated 0.595 → published 0.53; score coherence followed by matchup-recency guardrail
- BOS@TEX: raw 0.5432 → calibrated 0.5328 → published 0.5279; published probability matches the calibrated/governed value
- CHW@CLE: raw 0.6098 → calibrated 0.5787 → published 0.5565; score coherence followed by matchup-recency guardrail
- DET@TOR: raw 0.6469 → calibrated 0.6531 → published 0.58; score coherence followed by matchup-recency guardrail
- KC@HOU: raw 0.5 → calibrated 0.5076 → published 0.5055; published probability matches the calibrated/governed value
- LAD@CIN: raw 0.7529 → calibrated 0.7429 → published 0.58; score coherence followed by matchup-recency guardrail
- MIA@ARI: raw 0.5818 → calibrated 0.5642 → published 0.5545; score coherence followed by matchup-recency guardrail
- MIL@PIT: raw 0.6029 → calibrated 0.6672 → published 0.56; score coherence followed by matchup-recency guardrail
- NYY@MIN: raw 0.6828 → calibrated 0.6906 → published 0.58; score coherence followed by matchup-recency guardrail
- OAK@TB: raw 0.6849 → calibrated 0.7669 → published 0.7669; published probability matches the calibrated/governed value
- PHI@WAS: raw 0.5885 → calibrated 0.5506 → published 0.5098; score coherence followed by matchup-recency guardrail
- SD@COL: raw 0.6166 → calibrated 0.6367 → published 0.53; score coherence followed by matchup-recency guardrail
- SEA@LAA: raw 0.5039 → calibrated 0.5076 → published 0.5052; published probability matches the calibrated/governed value
- SF@STL: raw 0.5 → calibrated 0.5274 → published 0.5136; no recorded transformation explains the publication delta
Every game, in detail
ATL@CHC — ✅ hit
- Predicted CHC 5-7 (conf +0.06, lean) · actual CHC 4-8
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.2209 · team-run err 2.0 · total bias +0
- Contributing factors:
- Shota Imanaga (CHC) allowed 4 fewer ER than projected (1 vs 5)
BAL@NYM — ❌ miss
- Predicted NYM 5-7 (conf +0.06, lean) · actual BAL 7-1
- Root cause: Starting-pitcher projection was wrong
- Secondary cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.2809 · team-run err 8.0 · total bias +4
- Contributing factors:
- total runs over-projected by 4 (12 vs 8)
- NYM offense over-projected by 6
- Chris Bassitt (BAL) allowed 3 fewer ER than projected (1 vs 4)
- Xzavion Curry (NYM) allowed 5 more ER than projected (6 vs 1)
BOS@TEX — ❌ miss
- Predicted BOS 6-5 (conf -0.06, lean) · actual TEX 3-7
- Root cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.278649 · team-run err 5.0 · total bias +1
- Contributing factors:
- BOS offense over-projected by 3
CHW@CLE — ✅ hit
- Predicted CLE 4-5 (conf +0.11, moderate) · actual CLE 3-6
- Root cause: strong_correct_call
- Errors: winner correct · Brier 0.196681 · team-run err 2.0 · total bias +0
- Contributing factors:
- Anthony Kay (CHW) allowed 5 fewer ER than projected (0 vs 5)
DET@TOR — ❌ miss
- Predicted DET 7-4 (conf -0.16, moderate) · actual TOR 1-5
- Root cause: Run environment far lower than projected (over-dispersed)
- Secondary cause: Backed the wrong side with real conviction
- Errors: winner WRONG · Brier 0.3364 · team-run err 7.0 · total bias +5
- Contributing factors:
- total runs over-projected by 5 (11 vs 6)
- DET offense over-projected by 6
- committed to DET at 0.16 confidence and it lost
KC@HOU — ✅ hit
- Predicted KC 5-4 (conf -0.01, toss_up) · actual KC 5-2
- Root cause: toss_up_went_our_way
- Errors: winner correct · Brier 0.244518 · team-run err 2.0 · total bias +2
LAD@CIN — ❌ miss
- Predicted LAD 8-4 (conf -0.16, moderate) · actual CIN 2-6
- Root cause: Backed the wrong side with real conviction
- Secondary cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.3364 · team-run err 8.0 · total bias +4
- Contributing factors:
- total runs over-projected by 4 (12 vs 8)
- LAD offense over-projected by 6
- committed to LAD at 0.16 confidence and it lost
MIA@ARI — ✅ hit
- Predicted MIA 7-5 (conf -0.11, moderate) · actual MIA 4-3
- Root cause: right_winner_wrong_score
- Errors: winner correct · Brier 0.198427 · team-run err 5.0 · total bias +5
- Contributing factors:
- total runs over-projected by 5 (12 vs 7)
- MIA offense over-projected by 3
MIL@PIT — ✅ hit
- Predicted MIL 5-3 (conf -0.12, moderate) · actual MIL 5-4
- Root cause: strong_correct_call
- Errors: winner correct · Brier 0.1936 · team-run err 1.0 · total bias -1
NYY@MIN — ❌ miss
- Predicted NYY 7-4 (conf -0.16, moderate) · actual MIN 4-5
- Root cause: Backed the wrong side with real conviction
- Secondary cause: Small edge on the losing side
- Errors: winner WRONG · Brier 0.3364 · team-run err 4.0 · total bias +2
- Contributing factors:
- NYY offense over-projected by 3
- Zebby Matthews (MIN) allowed 3 fewer ER than projected (0 vs 3)
- committed to NYY at 0.16 confidence and it lost
OAK@TB — ✅ hit
- Predicted TB 2-6 (conf +0.53, strong) · actual TB 3-4
- Root cause: strong_correct_call
- Errors: winner correct · Brier 0.054354 · team-run err 3.0 · total bias +1
- Contributing factors:
- Brady Basso (OAK) allowed 3 more ER than projected (4 vs 1)
PHI@WAS — ✅ hit
- Predicted PHI 5-4 (conf -0.02, toss_up) · actual PHI 3-0
- Root cause: toss_up_went_our_way
- Errors: winner correct · Brier 0.240264 · team-run err 6.0 · total bias +6
- Contributing factors:
- total runs over-projected by 6 (9 vs 3)
- WAS offense over-projected by 4
- Zack Wheeler (PHI) allowed 3 fewer ER than projected (0 vs 3)
SD@COL — ✅ hit
- Predicted SD 7-5 (conf -0.06, lean) · actual SD 9-3
- Root cause: solid_correct_call
- Errors: winner correct · Brier 0.2209 · team-run err 4.0 · total bias +0
SEA@LAA — ✅ hit
- Predicted SEA 5-4 (conf -0.01, toss_up) · actual SEA 7-2
- Root cause: toss_up_went_our_way
- Errors: winner correct · Brier 0.244811 · team-run err 4.0 · total bias +0
SF@STL — ✅ hit
- Predicted SF 5-4 (conf -0.03, toss_up) · actual SF 6-5
- Root cause: toss_up_went_our_way
- Errors: winner correct · Brier 0.236604 · team-run err 2.0 · total bias -2
- Contributing factors:
- Matthew Liberatore (STL) allowed 3 fewer ER than projected (1 vs 4)
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: 3 helped vs 1 hurt
- Would help:
- DET@TOR (miss): lost a 0.16-confidence pick; wider tails lower overconfidence
- LAD@CIN (miss): lost a 0.16-confidence pick; wider tails lower overconfidence
- NYY@MIN (miss): lost a 0.16-confidence pick; wider tails lower overconfidence
- Would hurt / risk:
- OAK@TB (hit): strong correct call at 0.53; widening softens a good edge
player.pitcher.v4 form weights / player.pitcher_prior_games
- Targets: starter_er_mae, starter_outs_mae
- Net: 7 helped vs 6 hurt
- Would help:
- ATL@CHC (hit): starter ER off by 4
- BAL@NYM (miss): starter ER off by 5
- CHW@CLE (hit): starter ER off by 5
- NYY@MIN (miss): starter ER off by 3
- OAK@TB (hit): starter ER off by 3
- PHI@WAS (hit): starter ER off by 3
- SF@STL (hit): starter ER off by 3
- Would hurt / risk:
- BOS@TEX (miss): starter projection was accurate (ER off 0); reweight risks disturbing it
- KC@HOU (hit): starter projection was accurate (ER off 1); reweight risks disturbing it
- LAD@CIN (miss): starter projection was accurate (ER off 0); reweight risks disturbing it
- MIA@ARI (hit): starter projection was accurate (ER off 1); reweight risks disturbing it
- SD@COL (hit): starter projection was accurate (ER off 1); reweight risks disturbing it
- SEA@LAA (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 5 hurt
- Would help:
- BAL@NYM (miss): team runs off by 8
- BOS@TEX (miss): team runs off by 5
- DET@TOR (miss): team runs off by 7
- LAD@CIN (miss): team runs off by 8
- MIA@ARI (hit): team runs off by 5
- NYY@MIN (miss): team runs off by 4
- PHI@WAS (hit): team runs off by 6
- SD@COL (hit): team runs off by 4
- SEA@LAA (hit): team runs off by 4
- Would hurt / risk:
- ATL@CHC (hit): team runs already close (off 2); reweight risks disturbing it
- CHW@CLE (hit): team runs already close (off 2); reweight risks disturbing it
- KC@HOU (hit): team runs already close (off 2); reweight risks disturbing it
- MIL@PIT (hit): team runs already close (off 1); reweight risks disturbing it
- SF@STL (hit): team runs already close (off 2); reweight risks disturbing it