MLB Player Props Research Pipeline — Council Ruling
Date: 2026-04-01
Process: Full 5-phase council (Advisory → Anonymization → Peer Review → Chairman Synthesis → Boss Ruling)
Advisors: Opus, Sonnet, Gemini 3.1 Pro, Grok 4.20 Reasoning, gpt-oss-120b
Winner: Grok (2 of 5 peer review votes; all others got 1 each — most split council yet)
Status: PENDING BOSS RULING on open questions
COUNCIL SUMMARY
Where Advisors Agreed
- 8 separate edge scanners required — Pitcher Strikeouts, Pitcher Outs, Batter Hits, Batter HRs, Batter RBIs, Batter Total Bases, Batter Runs, Stolen Bases
- Pitcher strikeouts is the highest-EV prop — most liquid, most modelable, strongest signal-to-noise ratio
- Negative Binomial for strikeouts (overdispersion vs Poisson), Zero-Inflated Poisson for HRs and outs
- SP identity drives ALL batter props — opposing pitcher quality is the primary input for every batter prop
- FanDuel alt lines as foundation for building probability curves (same as NHL player props)
- Platoon splits are critical — L/R matchups create huge wOBA swings for hitter props
- Statcast data (exit velocity, barrel rate, launch angle) essential for HR and hits modeling
- Lineup position matters — batting order affects plate appearances, RBI/Runs opportunities
- Separate pitcher matchup card from batter matchup card
- 3-pass research schedule aligned with MLB game desk
Where Advisors Disagreed
- Total Bases distribution: Grok proposed multinomial (1B/2B/3B/HR outcomes), gpt-oss proposed custom continuous, Gemini proposed linear formula (wrong — can't price derivatives). Council verdict: Multinomial is correct — each at-bat produces discrete base outcomes.
- RBI/Runs modeling approach: Gemini used linear multipliers (broken — no distribution curve). Others used conditional models on lineup context. Council verdict: Monte Carlo game simulation (10K runs) is required — RBI and Runs are sequence-dependent, not isolated.
- Outs recorded distribution: Sonnet proposed truncated normal from empirical game logs. Grok proposed zero-inflated truncated Poisson. Council verdict: Truncated normal is pragmatic for outs (QS pitchers cluster at 18+, bad starts at 9-12).
- Phased rollout: Opus recommended starting with K props only and expanding. Others proposed all 8 simultaneously. Council verdict: Phase — start with pitcher Ks and outs (most modelable), then batter hits/HRs, then RBI/Runs/TB/SB.
Strongest Arguments (from peer review)
Grok wins with the sharpest prop-specific distribution choices and the most production-ready scanner designs:
- Correct distribution assignment for every prop type (NB for Ks, ZIP for HRs, multinomial for TB)
- Clean database schema with calibration table for backtesting
- Explicit automated refresh triggers per prop type
- Stays focused on the pipeline question without bloat
Opus runner-up with deepest operational insights:
- Phased rollout recommendation (K props first)
- Prop quality hierarchy by modelability and signal-to-noise
- Specific exploitable asymmetries (catcher pop time for SB, umpire K-zone, weather repricing lag)
- Only advisor using SQLite (matching actual tech stack)
Biggest Blind Spot
Gemini: Used linear arithmetic formulas instead of probability distributions for prop pricing. You cannot price an "Over 1.5 Total Bases" Kalshi contract with a mean estimate — you need a full distribution curve. This is a fundamental misunderstanding of derivative pricing.
What Everyone Missed (from peer reviews)
- Monte Carlo for sequence-dependent props — RBI and Runs require full play-by-play game simulation, not isolated player models. A batter's RBI depends on the OBP of hitters batting before them.
- Portfolio-level correlation within a game — Multiple props in the same game are driven by the same game script. Need intra-game covariance estimation and exposure caps per game.
- Opener/bulk reliever dynamics — Modern MLB uses "openers" (1-inning relievers followed by bulk pitchers). Pipeline must detect these and not build cards around the 1-inning opener.
- Platoon pinch-hit risk — Lefty batters may get pinch-hit in the 7th inning against a lefty reliever, reducing projected plate appearances and invalidating over projections.
- Model calibration loop — Rolling-window validation, model drift detection, prop-type-specific Brier scores.
BUILD PLAN
Phase 1: Pitcher Props Data (START HERE)
mlb_pitcher_prop_logs:
- pitcher_id, date, game_id, opponent
- strikeouts, outs_recorded, innings_pitched, pitches_thrown
- k_per_9, k_rate, swinging_strike_rate, called_strike_rate
- pitch_mix (FB%, SL%, CH%, CB%, CUT% — JSON)
- first_pitch_strike_rate, chase_rate_induced
- Source: MLB Stats API + Baseball Savant
mlb_pitcher_prop_baselines:
- pitcher_id, date, stat_type (strikeouts/outs)
- last_3, last_5, last_10, season_avg
- ewma_015 (fast), ewma_010 (standard)
- vs_lhb_k_rate, vs_rhb_k_rate (platoon K rates)
- home_k_rate, away_k_rate
- early_season_flag
mlb_pitcher_matchup_context:
- pitcher_id, game_id, opponent_team
- opp_team_k_rate (how much opponent strikes out)
- opp_team_chase_rate, opp_team_contact_rate
- opp_lineup_wrc_plus, opp_lineup_k_rate_vs_hand
- umpire_k_zone_adjustment
- park_k_factor
Phase 2: Batter Props Data
mlb_batter_prop_logs:
- batter_id, date, game_id, opponent_sp_id
- hits, home_runs, rbis, runs, total_bases, stolen_bases
- plate_appearances, at_bats, walks
- exit_velocity_avg, barrel_rate, launch_angle_avg, hard_hit_rate
- vs_sp_hand (L/R), batting_order_position
mlb_batter_prop_baselines:
- batter_id, date, stat_type
- last_5, last_10, last_20, season_avg
- ewma_012, ewma_008
- vs_lhp_rate, vs_rhp_rate (platoon splits per stat)
- home_rate, away_rate
- woba, xwoba, iso_power
mlb_batter_matchup_context:
- batter_id, game_id, opponent_sp_id
- sp_pitch_mix_vs_hand (JSON — how SP attacks this batter handedness)
- sp_k_rate_vs_hand, sp_whip_vs_hand
- park_hr_factor_for_hand (L/R specific)
- weather_hr_adjustment
- lineup_position, projected_plate_appearances
Phase 3: Distribution Models Per Prop
| Prop |
Distribution |
Key Parameters |
Notes |
| Pitcher Strikeouts |
Negative Binomial |
μ from K/9 × proj_IP × opp_K_rate_mult; k from pitcher variance |
Overdispersion from variable IP and matchup quality |
| Pitcher Outs Recorded |
Truncated Normal |
μ from avg outs/start; σ from pitcher game-to-game variance; truncated at 0 and 27 |
Bimodal: QS cluster at 18+ and bad starts at 9-12 |
| Batter Hits |
Poisson |
λ from hits/PA × proj_PA × platoon_mult × SP_quality_mult |
Low count, discrete |
| Batter Home Runs |
Zero-Inflated Poisson |
λ from HR/PA × proj_PA × park_HR × weather × SP_HR_allowed; π from ~85% zero probability |
Most games = 0 HRs |
| Batter RBIs |
Monte Carlo (10K sims) |
Simulate full lineup batting with baserunner states |
Sequence-dependent — cannot model in isolation |
| Batter Total Bases |
Multinomial → Compound |
P(1B), P(2B), P(3B), P(HR) per PA, summed over projected PAs |
Discrete outcome per at-bat |
| Batter Runs |
Monte Carlo (10K sims) |
Simulate with lineup context — runs depend on subsequent batters |
Highly correlated with lineup quality after batter |
| Stolen Bases |
Bernoulli per opportunity |
P(attempt) × P(success) × projected opportunities |
Very low base rate, high variance — need catcher pop time and SP pickoff tendency |
Phase 4: Edge Scanners (8 scanners)
Common engine:
- Ingest FanDuel alt lines (3+ thresholds per prop)
- De-vig each threshold (multiplicative 2-way)
- Fit distribution curve to de-vigged probabilities
- Compare fitted curve to Kalshi contract prices
- Calculate edge after 7% Kalshi fee
- Min edge: 4 cents, min sample: 10 games (pitcher), 20 games (batter)
- Output:
{player, prop_type, threshold, model_prob, kalshi_price, edge, confidence}
Per-prop scanner unique logic:
| Scanner |
Unique Inputs |
| Pitcher Ks |
Opp team K rate, umpire K zone, pitch count projection, SP pitch mix vs lineup handedness |
| Pitcher Outs |
SP quality trend, opp team contact rate, bullpen game flag (if opener, outs capped low) |
| Batter Hits |
SP WHIP vs hand, batter contact rate, BABIP luck adjustment, park hits factor |
| Batter HRs |
Park HR factor (hand-specific), weather (wind out + temp), SP HR/9, barrel rate |
| Batter RBIs |
Monte Carlo: OBP of preceding batters, lineup position, SP quality, park factor |
| Batter TB |
Multinomial outcomes per PA, ISO power, park dimensions, SP pitch mix weakness |
| Batter Runs |
Monte Carlo: subsequent batter quality, team scoring rate, lineup position |
| Stolen Bases |
Catcher pop time, SP pickoff tendency, runner speed score, game script (close game = more attempts) |
Phase 5: Matchup Cards
Pitcher Prop Card:
PITCHER: [Name] ([L/R]) | TEAM: [vs OPP] | Status: [Confirmed/Probable]
RECENT (Last 5 Starts): K/9: [avg] | IP/Start: [avg] | Pitches/Start: [avg]
SEASON: K Rate: [%] | SwStr%: [%] | CSW%: [%] | WHIP: [val]
PITCH MIX: FB [%] | SL [%] | CH [%] | CB [%]
vs LHB: K Rate [%] | wOBA [val] | vs RHB: K Rate [%] | wOBA [val]
OPP LINEUP:
Team K Rate: [%] | Chase Rate: [%] | Contact Rate: [%]
Lineup K Rate vs [L/R]HP: [%]
Key Hitters (top 3 K-resistant): [names + K rates]
UMPIRE: [Name] | K Zone: [+/- above avg] | ABS Overturn: [rate]
PARK: K Factor: [val]
INTELLIGENCE: [CRITICAL/MODERATE/CONTEXT findings]
Batter Prop Card:
BATTER: [Name] | POS: [pos] | BATS: [L/R/S] | TEAM: [vs OPP]
LINEUP: [Order position] | Confirmed: [Y/N]
RECENT (Last 10 GP):
H/G: [avg] | HR/G: [avg] | RBI/G: [avg] | TB/G: [avg] | SB: [total]
Exit Velo: [avg] | Barrel Rate: [%] | Hard Hit: [%]
SEASON RATES:
wOBA: [val] | xwOBA: [val] | ISO: [val] | K Rate: [%] | BB Rate: [%]
vs LHP: wOBA [val] | ISO [val] | vs RHP: wOBA [val] | ISO [val]
MATCHUP (vs [SP Name] [L/R]):
SP K Rate vs [L/R]HB: [%] | SP WHIP vs [L/R]HB: [val]
SP Pitch Mix vs [L/R]HB: FB [%] SL [%] CH [%]
Batter perf vs SP pitch types: [weakness flags]
CONTEXT:
Park HR Factor ([L/R]HB): [val] | Weather HR Adj: [+/-]
Projected PA: [val] | Lineup Protection: [next batter wRC+]
Platoon PH Risk: [Y/N — if lefty batter, lefty reliever likely]
INTELLIGENCE: [findings]
Phase 6: Dashboard
- Prop board: All today's player props with edge counts by prop type
- Pitcher K focus: All SPs with K prop edges, K rate trends, umpire K zones
- Batter drill-down: Click player → batter card + all prop edges + Statcast charts
- Edge alerts: Sorted by magnitude, filterable by prop type
- Lineup status: Confirmed vs projected lineups with delta alerts
- P&L tracker: Performance by prop type, by edge bucket, Brier scores
- Calibration dashboard: Rolling accuracy by prop type, model drift alerts
OPEN QUESTIONS FOR BOSS RULING
Phased rollout: Council recommends starting with pitcher Ks and outs (most modelable), then batter hits/HRs, then RBI/Runs/TB/SB. Confirm?
Monte Carlo for RBI/Runs: These props require full game simulation (10K runs) because they're sequence-dependent. This is computationally expensive. Build now or defer?
Stolen bases prop: Very low base rate, high variance, thin Kalshi liquidity. Worth building a scanner for, or skip initially?
Opener detection: Should the system auto-flag games where team is using an opener (1-2 inning reliever) vs traditional starter? This changes ALL prop projections.
Platoon pinch-hit risk: Should we model the probability that a lefty batter gets pinch-hit in late innings against lefty relievers? This caps plate appearances and affects all over projections.
Cross-desk data sharing: Pitcher prop desk should consume game desk's SP quality metrics and team batting data rather than building its own. Confirm shared data model?
COUNCIL METADATA
| Detail |
Value |
| Council date |
2026-04-01 |
| Advisory responses |
5 (all completed) |
| Peer reviews |
5 (all completed) |
| Strongest advisor |
Grok (2/5 votes) |
| Runner-up |
Opus, Sonnet, gpt-oss (1/5 each) |
| Biggest blind spot |
Gemini (2/5 votes) |
| Full council data |
/home/ubuntu/edgeclaw/data/councils/2026-04-01/mlb-player-props-research/ |
Source: ~/edgeclaw/results/panel-results/mlb-player-props-research-ruling.md