Scout Updates

Scootercam’s MLB Scout continues to evolve. Originally it was a tool to help predict those days when both the White Sox and Cubs pitchers would win their games, and I was interested in building a only go/no-go decision maker for that combo bet. So with 4 outcomes I was leaving a bit on the table if I didn’t explore the other three outcomes. I brought in data from Kalshi – what are actual bettors thinking? Is it possible to compare Scootercam’s MLB Scout scores with what the market is saying? Does Scout have any sort of edge, or just noise?

Scout Quadrant Lean — Summary & Practical Use Guide

ScooterCam Worldwide LLC — MLB Scout Session date: May 26, 2026


Background

The MLB Scout tool was originally designed to answer one question: is today a good day for both the Cubs and Sox to win? The combo score — the minimum of the two individual pitcher scores — drives a binary PLAY/PASS recommendation.

The work in this session grew from a single observation: a PASS on the combo is not the same as no edge. When the Kalshi payout matrix shows positive returns across all four outcome quadrants, the market is pricing every outcome as profitable. If Scout is saying PASS, it is identifying something the market may be underweighting — namely, that one pitcher is significantly stronger or weaker than the other. That asymmetry doesn’t disappear on a PASS day. It rotates to a different quadrant.

This led to two related questions:

  1. Validity — does Scout’s directional lean actually predict the correct quadrant better than Kalshi’s market pricing?
  2. Reliability — is that edge consistent, or noise?

Both questions require data that wasn’t being collected. This session built the collection infrastructure and the display layer, timed to accumulate a meaningful sample before the All-Star break.


Changes Made

1. Scout Quadrant Lean strip — mlb-scout.php

What was added: A new UI section inserted between the existing GONOGO bar and the Kalshi payout matrix inside the Next Combo block.

What it shows:

  • Individual pitcher score chips for Cubs and Sox (color-coded by tier)
  • The point differential when the lean is directional (WL or LW cases)
  • A compact 2×2 grid of the four outcome quadrants — WW, WL, LW, LL — with the Scout-favored quadrant highlighted in green with a SCOUT tag
  • Kalshi joint probabilities in each cell when market data is available
  • A one-sentence explanation of why Scout leans that direction

Rendering logic (render_scout_lean()):

ConditionLeanMeaning
Combo score ≥ 58WWBoth pitchers favorable — standard PLAY day
Cubs score − Sox score > 15WLCubs face weak pitcher, Sox face strong one
Sox score − Cubs score > 15LWSox face weak pitcher, Cubs face strong one
Both scores ≤ 35LLBoth teams face strong pitchers — tough day all around
Difference ≤ 15, neither in LL zone(hidden)No clear directional signal

The strip is hidden entirely when no signal exists — no empty placeholder.

Sub-text varies by lean type so the language is always accurate:

  • WW: “Combo play confirmed — both pitchers support the call”
  • WL/LW: “Not a combo play — Cubs/Sox pitcher advantage points to a quadrant”
  • LL: “Not a combo play — both teams face tough pitchers today”

Why the strip sits between GONOGO and the payout matrix: The GONOGO bar answers the combo question. The lean strip answers a different question. The payout matrix then shows the financial context for all four quadrants. Each layer adds something distinct; the order reflects the analytical hierarchy.

The SCOUT tag also appears on the matching cell in the payout matrix, visually linking the two sections without duplicating data.


2. Divergence tracking — mlb-cache-cron.php

What was added: Five new fields written to sc_bet_tracker.json for every combo day. Two new helper functions. A three-branch freeze logic block. An updated cron schedule.

New tracker fields

FieldTypeDescription
scout_leanstring|nullWW / WL / LW / LL, derived from pitcher scores
kalshi_cubs_yesfloat|nullCubs win probability captured before first pitch
kalshi_sox_yesfloat|nullSox win probability captured before first pitch
kalshi_implied_leanstring|nullHighest joint-probability quadrant per Kalshi market
kalshi_pregame_capturedboolData quality flag — true only when both prices captured before game 1 first pitch

Why the freeze timing matters

Kalshi keeps markets open until a game ends. A team losing 7-0 in the eighth inning may show at 3% — a real price, but not a pre-game belief. Capturing that would corrupt the divergence comparison, which is meant to pit Scout’s pre-game read against the market’s pre-game read.

The cron uses a three-branch pattern to prevent this:

  • Branch 1 (post-freeze): Entry already frozen in a previous run. All five fields preserved unchanged. No Kalshi fetch.
  • Branch 2 (at freeze moment): Game 1 just started this cron cycle. Kalshi prices are now in-game. The prices from the previous pre-game cron run are carried forward instead. If no pre-game prices exist, the fields stay null and kalshi_pregame_captured stays false — honest, not papered over.
  • Branch 3 (pre-game): Game hasn’t started. Fresh Kalshi prices and lean computed and stored. kalshi_pregame_captured set to true if both prices are non-null.

The combo score freeze follows the same lifecycle and is unchanged from the original.

Cron schedule update

Old: 0 9,15 * * * — twice daily (9 AM and 3 PM server time)

New: 0 9,12,15,18 * * * — four times daily (9 AM, noon, 3 PM, 6 PM)

The noon run was the critical addition. For day games starting at 1:05–2:20 PM ET, Kalshi typically lists markets 2–3 hours before first pitch — roughly 10:30–11:30 AM ET. The 9 AM cron was consistently too early; the 3 PM cron arrived after first pitch. The noon run catches this window cleanly.

The 6 PM run covers evening games (7:05–8:10 PM ET first pitch) as a belt-and-suspenders companion to the 3 PM run.

If GlowHost server time is UTC rather than ET:

  • EDT (UTC−4): 0 13,16,19,22 * * *
  • EST (UTC−5): 0 14,17,20,23 * * *

Confirm in cPanel → Server Information.


Practical Use Guide

Reading the Scout Quadrant Lean

On a PLAY day (combo score ≥ 58): The lean strip shows WW highlighted and confirms the combo call. Both pitchers are rated favorable — conditions support both teams winning. The Kalshi prices in the grid give you a sense of how the market is pricing the same outcome. If Scout says WW and Kalshi’s implied lean is also WW, there is no divergence — the model and the market agree.

On a PASS day with a directional lean (WL or LW): This is the analytically interesting case. Scout is not saying don’t bet — it is saying don’t bet on the combo. The pitcher differential suggests one team has a meaningful edge that the W/W bet can’t capture. The highlighted quadrant is where Scout thinks the day’s real signal lives.

Example: Cubs 72, Sox 41, combo score 41 → PASS on the combo, lean to W/L. Cubs face a hittable pitcher; Sox face a strong one. The Cubs Win / Sox Lose diagonal may carry edge even on a day the combo fails.

Cross-reference this with the Kalshi payout matrix below. If the W/L cell shows an attractive payout and Kalshi’s implied lean is WW (meaning the market is treating it as a likely W/W day), you have a divergence: Scout is leaning W/L, the market is leaning W/W. That divergence is what the tracker is recording for later analysis.

On a PASS day with an LL lean: Both teams face strong opposing pitchers. Neither lineup has a favorable matchup. The L/L quadrant is statistically suggested — not a bet on losing per se, but an acknowledgment that neither team is set up to score freely. The Kalshi market may still be implying W/W as the most-likely outcome (it is the most common MLB day outcome by frequency). That gap between Scout and Kalshi on LL days is one of the more interesting divergence patterns to watch.

When the strip is absent: Both pitcher scores are close (within 15 points) and the combo isn’t a PLAY. Scout has no clear directional read. Showing a lean in that band would be noise.


Understanding the data quality flag

kalshi_pregame_captured: true means the divergence data for that day is clean — both Kalshi prices were recorded before first pitch and will be meaningful for comparison.

kalshi_pregame_captured: false means no pre-game prices were captured. This happens primarily with day games on days when Kalshi hadn’t listed the market before the last pre-game cron run. The Scout lean is still recorded for that day and can be evaluated against the actual outcome — but the Scout vs. Kalshi divergence comparison should exclude it.

The cron log will print a [LEAN] warning line when this happens, so you can track the frequency without opening the JSON.


What to watch for as data accumulates

The goal is to reach roughly 10 resolved combo days where kalshi_pregame_captured is true and scout_lean is non-null. At current Cubs/Sox scheduling frequency, that is approximately 3 weeks of data. Well before the All-Star break.

At that threshold, the Scout Validation section in mlb-scout.php can gain a Quadrant Lean Accuracy sub-section showing:

  • Scout lean accuracy across all lean days (lean matched actual quadrant)
  • Kalshi implied lean accuracy across clean days
  • Divergence days — where Scout and Kalshi disagreed — and who was right
  • Breakdown by lean type (WW, WL, LW, LL) to identify where the model is strongest

The most valuable finding will be on divergence days — not the days they agree, but the days Scout says W/L and Kalshi says W/W, or Scout says LL and Kalshi says W/W. If Scout is systematically right on those days, the model has genuine predictive validity beyond what the market is pricing. If Kalshi is consistently right, the market is capturing the pitcher asymmetry better than the score formula, which is a tuning signal.


Tuning notes

The 15-point threshold ($threshold = 15 in both render_scout_lean() and compute_scout_lean()) determines when a pitcher score differential is considered meaningful enough to call a directional lean. It is defined in both files — keep them in sync.

If the season’s data shows that the model’s WL/LW leans are only accurate when the differential is wider, raise the threshold. If 15 points is catching too much noise, raise it. If accurate leans are being missed because the differential is just below 15, lower it. The tracker log will have the raw score data to make this judgment empirically rather than by intuition.

The 35-point LL ceiling — both scores must be at or below 35 for an LL lean to fire. This can similarly be tuned if the data shows the LL call is most accurate at a different threshold.

Both thresholds are early-season estimates. The All-Star break review is the right moment to revisit them with real data.


ScooterCam Worldwide LLC · mlb-scout.php · mlb-cache-cron.php Session: May 26, 2026

Verified by MonsterInsights