The Methodology
Six factors. Window-blended baselines. Edge/Vol filtering. Same engine as the AFL model.
The six factors
Each player prediction is a weighted blend of six signals:
Playstyle classification
Every player is classified into one of five playstyles based on usage, shot location, and assist rate. Different playstyles get different L5/L10/L20 weight allocations because they have different volatility profiles.
Edge / Vol filtering
After we have a prediction, we compute:
Edge = ModelPrediction - Line |Edge| = absolute distance from line Signal tiers (Points example): HC |Edge| >= 1.40 high-conviction Bet |Edge| >= 0.50 actionable but smaller Pass otherwise published as research only
Tighter thresholds are used for lower-variance props (rebounds, assists, threes). Each prop has its own tier cutoff calibrated to backtest results.
Display probability
Each pick shows a "Prob" - the model's estimated likelihood the side wins. To turn a stat-unit edge (e.g. +2.5 points) into a meaningful probability we divide by the player's actual game-to-game volatility σ (standard deviation of that stat across their 2025 sample). That ratio is the z-score:
z = edge / sigma p_display = min(0.80, normal_cdf(|z|)) Worked example (Hiedeman, +5.57 pts, sigma=6.33): z = 5.57 / 6.33 = 0.88 cdf(0.88) = 0.81 -> displayed as 0.80 (capped) Players with thin 2025 sample fall back to the position-pooled league sigma. The cap of 0.80 reflects irreducible single-game variance: a player can foul out, sit garbage time, or be a late scratch. We don't claim certainty we can't have.
Sample-size guard
Players with thin 2025 sample (rookies, returning-from-injury) are flagged. If a player has fewer than 10 RS games we publish no pick. Between 10 and 20 games the edge is automatically damped. Above 20 games the pick is full-confidence.
Calibration
Every prediction we publish carries a stated probability. Our calibration page shows whether those probabilities are honest - at 80% stated probability, do we actually win 80% of the time? That's the only test that matters.
See /wnba/calibration once we have graded picks.