Spread out05-09Dropped spreads — converged on totals
ML+SP back06-18Moneyline + spread reinstated after 2026-aware recal: ML +33.8% / spread +26.8% walk-forward ROI
v1.106-24v1.1: removed betting-market leakage features (ml_odds, spread_odds, total_odds); spread calibration gap 17pp → 2.6pp; all 3 markets retrained
v1.206-25v1.2: feature-count tune (ML 13→~20 features +10.6pp ROI, OU 30→~25 +4.5pp ROI) + spread deactivated — clean-model calibrated sweep showed negative ROI at every feature count on spread
v1.306-25v1.3: added weather_temp_f to OU candidate pool (single-feature ablation showed +4pp ROI vs v1.2 baseline; park_factor_delta solo had no lift). ML/spread excluded from weather/park per ablation (-2pp on ML when added).
v1.407-16v1.4: First-5-innings + NRFI markets go live end-to-end — line-move poller, odds feed, market_edge_view, and Kelly thresholds all wired for F5 ML / F5 spread / F5 totals / NRFI
v1.607-21v1.6: patched C2 season-snapshot leakage — pitcher + reliever features now on as-of-date lookup instead of end-of-season snapshots
v1.707-31v1.7: full calibration refit on production features, extended to F5 markets (previously ML/spread/totals only)
v1.808-11v1.8: FG splits as-of-date recovery — recovered leaked pitcher season stats through weekly FanGraphs snapshots; verify bound widened to [1,75]
v1.908-12v1.9: weather features (temp, humidity, dew point, wind + park-orientation-aware 'out toward CF' component) wired into feature matrix
v2.008-15v2.0: Statcast Phase D — pybaseball rolling xwOBA-against, barrel% allowed, hardhit% allowed, whiff%, chase% per starter (30d, min 200 pitches) + team-batting xwOBA; 9 statcast features selected across 6 of 7 markets after retrain
Hypothetical P&L by market — model edge, 1u flat per pick
Hypothetical cumulative P&L per market if every above-threshold model suggestion had been bet at 1 unit flat. Diagnostic view of where the model finds edge across MLB's markets — moneyline, run-line, totals, and first-5-innings variants. The placed-picks track record above is the truth; this chart is the model's edge picture, not the operator's tape.
Market
Bets
W–L
Win%
Net P&L (u)
Moneyline
1419
648–771
45.7%
+0.00u
Spread
1427
645–782
45.2%
+0.00u
Totals (Over/Under)
1582
767–815
48.5%
+0.00u
f5_moneyline
309
126–183
40.8%
+0.00u
f5_spread
325
143–182
44.0%
+0.00u
f5_totals
279
138–141
49.5%
+0.00u
nrfi
132
59–73
44.7%
+0.00u
Audit Trail
Every pick file is cryptographically committed to a public Git repo and signed to the Rekor transparency log before games start. Pre-game ✓ means the commit landed before first pitch — the pick was locked in. Retro means the file was committed after the fact; this still proves the file has not been altered since, but cannot prove pre-game timing. Click Verify to inspect the Git commit and Rekor entry.
How to verify the blockchain timestamp on your own
Each picks file is hashed and the hash is committed to the Bitcoin blockchain via OpenTimestamps. This proves the file existed before the first Bitcoin block mined after it was stamped — i.e., before any game that day could have started.
1
Download both filesClick Download JSON to get the picks file, then Download OTS Proof to get the timestamp proof. Keep them in the same folder with the same base name (e.g., 2026-02-21.json and 2026-02-21.json.ots).
2
Open the OpenTimestamps verifierGo to opentimestamps.org and scroll to the Stamp & Verify section.
3
Upload the .ots proof fileDrag the .ots file into the verification box. The site will automatically look for a matching document to hash.
4
Upload the JSON picks fileWhen prompted, also upload the .json file. The verifier hashes it and checks that the hash is embedded in the .ots proof chain.
5
Read the resultA successful verification will show a green confirmation with the Bitcoin block number and timestamp — proving the exact picks were published to the blockchain before that block was mined. Any alteration to the JSON would cause the hash to mismatch and verification to fail.
Prefer the command line? Install opentimestamps-client via pip and run: ots verify 2026-02-21.json.ots