WNBA In-Play Prediction System In progress
Live win-probability models for WNBA games, evaluated prospectively against Polymarket's own market prices. Paper bets only.
-
Sources
- ESPN game state, polled every 15 s
- Polymarket order books over WebSocket
- Sportsbook pregame consensus as the prior
15 sgame-state poll interval
-
Pipeline
- Collectors on cron, Linux VPS
- PostgreSQL 17
- Fail-closed freshness guards
20.7Mframes · 10 slates · 0 errors
-
Models
- Logistic regression at Q1 / half / Q3
- v2 = score margin + sportsbook prior
- Trained on 503 games, 2025–26
0.591 → 0.573Q1 holdout log loss, v1 → v2
-
Evaluate & release
- Frozen prospective sample, paper only
- Locked holdout, pre-registered gates
- 1,600 tests · 53 suites · sha256 manifest
0.338 vs 0.350v2 vs market, log loss (n=82)
Problem
Can a live in-game model price WNBA win probability better than the market that is pricing it at the same moment? Markets and sportsbooks are strong baselines, so the model is judged prospectively against them, not on a backtest.
What I built
- Data pipeline. Polls ESPN game state every 15 seconds and streams Polymarket order books over WebSocket into PostgreSQL 17. Model signals are shadow-traded as paper bets behind fail-closed freshness guards.
- Models. In-play (Q1 / half / Q3) logistic-regression win-probability models trained on 503 games from the 2025–26 seasons. The v2 model uses two features: score margin and a sportsbook prior.
- Evaluation. Walk-forward validation for model selection, a locked holdout evaluated exactly once, and a frozen prospective sample scored against the Polymarket midpoint. The pregame study used a 10,000-resample date-block paired bootstrap against market and blind-underdog baselines; the v1-vs-v2 promotion gates are pre-registered in code.
- Release engineering. Every byte-reproducible release bundle is gated behind 1,600 tests across 53 suites, a sha256 manifest, and a secret scan. CI runs migrations against PostgreSQL 17; collectors run on a Linux VPS via cron.
Results so far
- 20.7M frames archived across 10 slates and 28 games (Aug 18–27, 2026) with zero parse or sequence errors.
- 0.591 → 0.573 Q1 holdout log loss from v1 to v2 (n=127). Halftime 0.488 → 0.473, Q3 0.448 → 0.453: v2 helps early in the game, not late.
- 0.338 vs 0.350 log loss for v2 against the Polymarket midpoint on the same 82 frozen prospective game-checkpoints. Descriptive only: no statistical test was pre-registered for this comparison.
What didn't work
Pregame models did not beat closing lines: the best executable pregame model scored 0.648 log loss against 0.586 for the sportsbook closing line (n=359), and 20 of 21 bootstrap intervals spanned zero. That negative result is reported as-is; the promotion gates were pre-registered in code so outcomes like this get kept, not tuned away.