Preprint: Predicting NBA and WNBA Player Prop Markets: A Machine Learning Approach to Sports Betting Efficiency — see
paper/main.tex
A machine learning pipeline that predicts whether NBA and WNBA players will go OVER or UNDER their PrizePicks prop lines, using only publicly available ESPN gamelog data.
| NBA (2026 test) | WNBA (2025 test) | |
|---|---|---|
| Overall accuracy | 61.2% | 57.6% |
| ≥60% confidence | 68.4% | 62.6% |
| ≥70% confidence | 76.5% | 68.3% |
| ≥80% confidence | 85.8% | 78.4% |
| Permutation test | z = 87.4, p < 0.0001 | z = 23.7, p < 0.0001 |
- 499,770 NBA training samples · 55,695 WNBA samples
- Walk-forward backtest: models frozen on 2023–2025, tested on full 2026 season (144,846 predictions)
- Model confidence is well-calibrated — higher confidence = higher accuracy, monotonically
ESPN Gamelogs → Feature Engineering → Walk-Forward CV → GradBoost Model
↓
PrizePicks Lines → Daily Email Picks
Features: Rolling averages (L1/L3/L5/L10/L20), season avg, momentum, acceleration, coefficient of variation, hit rate, cross-stat correlations, home/away, game number
Models: Gradient Boosting (best), Voting Ensemble, Random Forest, SVM, Logistic Regression
Validation: Walk-forward cross-validation — never trains on future data
├── paper/ # LaTeX preprint
│ ├── main.tex
│ └── refs.bib
├── data/
│ ├── nba_props_dataset.csv # 499,770 rows
│ ├── wnba_props_dataset.csv # 55,695 rows
│ ├── models/ # Saved GradBoost pickles
│ ├── plots/ # Backtest figures
│ └── live_results.csv # Daily pick outcomes
├── ml_pipeline.py # NBA model training
├── wnba_ml_pipeline.py # WNBA model training
├── dataset_builder.py # ESPN gamelog → features
├── backtest.py # Walk-forward backtest + plots
├── email_picks.py # Daily automated picks email
├── main.py # Core prediction logic
├── prizepicks.py # PrizePicks line fetcher
├── vegas_lines.py # Odds API comparison
├── moneyline.py # Moneyline value finder
├── flex_pnl.py # Flex Play P&L tracker
├── check_results.py # 1am results checker
└── significance_tests.py # Permutation tests
Two GitHub Actions run daily:
- 5pm CDT — fetches live PrizePicks lines, runs model, emails top picks
- 1am CDT — checks ESPN box scores, logs outcomes, sends results email
pip install -r requirements.txtSet environment variables:
APIFY_TOKEN # PrizePicks line scraper
ODDS_API_KEY # The Odds API (moneyline/vegas comparison)
KALSHI_API_KEY # Kalshi prediction market
GMAIL_USER # Sending email
GMAIL_PASS # Gmail app password
Run backtest:
python backtest.pyTrain models:
python ml_pipeline.py # NBA
python wnba_ml_pipeline.py # WNBASee paper/main.tex for the full preprint. Key findings:
- NBA prop markets are approximately 94% efficient by Brier Skill Score
- Primary inefficiency: short-horizon momentum — lines lag hot/cold streaks, especially for role players
- Secondary: class imbalance in rare props (blocks, steals) — market systematically overestimates these, creating UNDER value
- WNBA markets show consistent but slightly lower inefficiency, consistent with thinner market action
University of North Texas · 2026