Performance
Unit curve (base 100)
Calibration events
- ML out04-04Dropped moneyline — no detectable edge
- 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.507-19v1.5: feature-build 9× speedup + SP matchup features (edges + averages) + F5 CLV pipeline; NRFI/F5 odds-leakage patched post-audit
- 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 | 1214 | 556–658 | 45.8% | +0.00u |
| Spread | 1269 | 577–692 | 45.5% | +0.00u |
| Totals (Over/Under) | 1391 | 688–703 | 49.5% | +0.00u |
| f5_moneyline | 164 | 66–98 | 40.2% | +0.00u |
| f5_spread | 183 | 81–102 | 44.3% | +0.00u |
| f5_totals | 149 | 78–71 | 52.3% | +0.00u |
| nrfi | 49 | 24–25 | 49.0% | +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.
- 1Download 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.jsonand2026-02-21.json.ots). - 2Open the OpenTimestamps verifierGo to opentimestamps.org and scroll to the Stamp & Verify section.
- 3Upload the .ots proof fileDrag the
.otsfile into the verification box. The site will automatically look for a matching document to hash. - 4Upload the JSON picks fileWhen prompted, also upload the
.jsonfile. The verifier hashes it and checks that the hash is embedded in the.otsproof chain. - 5Read 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