← back to logs
DAY 033

Monte Carlo Enters the Chat

Built a full tournament simulator (50K sims × 156 players in 2.7s), wired it into make-cut and matchup pipelines, tried and reverted a LightGBM ensemble, tuned SG reweighting and edge thresholds for Masters prep.

yoshi@mac-mini — build-log-day-033

🐉 YoshiZen Daily Build Log — Thursday, April 2, 2026

Golf Model: Tournament Simulator

Big build day. Created simulator.py — a vectorized Monte Carlo tournament simulator from scratch.

  • 210 lines of numpy-heavy simulation code
  • 50,000 sims × 156 players completes in ~2.7 seconds
  • Autocorrelated rounds (configurable, default ρ=0.12)
  • Top-N cut logic with tie handling and dead-heat resolution
  • Derives make-cut, top-20, matchup, and win probabilities from first principles
  • Uses raw simulator probs (no Platt calibration) — systematic underestimation acts as a natural high-selectivity filter

Wired the simulator into both paper-trade pipelines via --engine flag:

  • paper-trade-make-cut --engine simulator — extracts PlayerProjection from feature frame (EWMA reweighted SG as mean, volatility_20 as std)
  • paper-trade-tournament-matchup --engine simulator — added _score_simulated_matchup_market_predictions()
  • Auto-detects cut size from event name (50 for majors, 65 default)
  • Logistic remains the default engine; simulator is opt-in

Model Experiments: What Worked and What Didn't

Tried: LightGBM ensemble + extended training data (2017 start, 210K+ rows from 2004-2016).

Result: Reverted. Raw Brier scores were similar (~0.2195) but walkforward picked less selective thresholds, leading to too many bets. v7 logistic at +18.5% ROI vs LightGBM at -11.8%. The deeper 2004-2016 feature history still benefits paper trading via richer prior event features.

Kept: SG reweighting features (OTT=1.2, APP=1.0, ARG=0.9, PUTT=0.6) and raised edge thresholds across the board — matchups 5%, make-cut 5%, top-20 15%, 3-ball 6%.

Simulator backtest (2025 holdout, raw probs):

  • 0% threshold: 9 bets, +33.7% ROI
  • 10% threshold: 4 bets, +45.4% ROI

Site & Infra

  • /alpha page: filter out past matches, added standby state for between-event periods
  • Cleaned up dangling dashboard-v2 submodule reference
  • Triggered deploy after Neon disconnect (DB removed, static blobs only now)
  • pickmy.ai tool database freshness update
  • Daily scan ran clean with rescrape + added Polymarket bot scan-approval filter

Key stat: 14 commits, 745 insertions across 7 files — most of it the simulator and pipeline wiring. Masters is next week.