How a pick gets made — from a per-plate-appearance rate to eight published bets.
The model does not predict games. It prices individual events — does this hitter record a base, does this starter stay under his strikeout number — and then compares its own price to the sportsbook's, with the sportsbook's margin stripped out.
Almost everything interesting happens in two places. First, a stack of multipliers turns a hitter's own rate into a rate for tonight: who's pitching, which way the wind is blowing, which hand he swings from, how much of the game the bullpen will cover. Second, a calibration layer fit on the model's own graded ledger decides how much that opinion is worth in each market — and in some markets the honest answer is not much. Both are traced below on real picks.
Seven stages, roughly 11 hours before first pitch. Data flows once; nothing is fetched twice.
A hitter's total-bases projection is one line of arithmetic. Every term is a multiplier on his own per-plate-appearance rate.
The first three are blended by starter share — the fraction of the lineup's plate appearances the starting pitcher is projected to cover. A platoon edge against a lefty starter is worth 57% of itself if the bullpen is covering the other 43%, because you cannot know in August which reliever throws the seventh.
| Term | What it reads | Range it may move |
|---|---|---|
| Platoon | Hitter's split severity vs. this arm's hand, leveraged by the starter's arsenal | 0.80 – 1.20 |
| Pitch-type matchup | Batter's per-pitch-type value against what this starter actually throws | 0.90 – 1.10 |
| Weather | Wind speed and direction resolved against the hitter's hand — out to right helps left-handed pull, out to left helps right | per-venue |
| Park geometry | Venue × handedness fixed effect, three-season blend, 850-observation shrinkage — home-run channel only | 0.75 – 1.35 |
| Opposing lineup K | Applied to the starter's strikeout projection, not the hitter's | 0.85 – 1.15 |
Park geometry is deliberately confined to home runs. It relocates batted balls over a fence; that is not the same physics as a single, and total bases would need its own fit before it earns the term. Applying a home-run multiplier to total bases because it is sitting right there is exactly the kind of shortcut that backtests beautifully and loses money.
A published pick from the card of Friday, August 28, traced from rate to result.
The park term never touched this pick. Yankee Stadium's short porch is real and the model knows it, but that fixed effect is confined to Rice's home-run number — 0.21 projected, a different bet on a different line. The pick was carried by his own rate, the diluted platoon penalty, and the wind.
The uncomfortable one. Same card, same night.
This is what the gate is supposed to look like from the inside. It is not a judgment about Jacob Lopez on August 28 — it is a judgment about the population of picks that look like this one, made from 352 graded strikeout unders. A gate that only ever suppresses losers is not a gate, it is hindsight. Publishing this pick because it happened to win would mean the ledger stopped governing and the vibes took over.
Every Monday the calibration layer refits on the full graded ledger. It asks one question per market: given what the model thinks and what the market thinks, what actually happens?
The weights are the interesting part. A high model weight means the model's disagreement with the price has historically been informative. A weight near zero means it hasn't. A negative weight means the model's opinion in that market has been actively worth fading — and the layer fades it, automatically, without anyone being asked to admit anything.
| Market | Weight on the model's own opinion | wmodel |
|---|---|---|
| Full-game moneyline | +0.61 | |
| Total bases — Over | +0.59 | |
| Strikeouts — Over | +0.45 | |
| Strikeouts — Under | +0.04 | |
| Earned runs — Under | −0.10 | |
| Outs — Under | −0.11 | |
| Total bases — Under | −0.16 |
Weights current as of August 2026 — fit 2026-08-28 on 2,339 graded picks, expanding window from 2026-07-21. The layer refits weekly on the growing ledger, so treat this table as a dated snapshot of the mechanism, not a live feed; the live weights are what actually price each day's card. Bars are scaled to the largest absolute weight.
Read the bottom of that table honestly and it says something a marketing page would never volunteer: the model's opinion about unders is worth less than nothing in three markets. It is good at finding hitters who will do something and starters who will do a lot of something. When it argues that a number is too high, the ledger says the book was already right.
Nothing was rewritten to fix that. The weights simply carry it, and picks in those lanes have to clear the +2% floor on the market's terms rather than the model's. That is the whole mechanism: an edge you cannot prove out of sample is not an edge, and the code should be the thing that enforces it, not your discipline at 11am.
Published because it's true, not because it helps.
Game moneylines are the model's worst product and have been all season — a losing record against the closing no-vig price, shown on the front page in the same table and the same colours as the winning lanes. The prop lanes carry the system. The right response to a losing lane is to measure it in the open until the evidence is decisive, not to quietly stop printing it.