The Thesis
Player prop markets are the fastest-growing segment in sports betting. They're also the most mispriced. Books set lines using simplified models, and the market is dominated by recreational bettors who think in narratives, not numbers.
Our edge comes from modeling the factors that actually drive player performance — and doing it systematically across every game, every night.
What We're Predicting
For each NBA player, we generate signals on prop lines for points, rebounds, and assists. A signal tells you whether the market line is too high (SELL) or too low (BUY), and how confident we are in that assessment.
The core question is always the same: What's the probability this player goes over or under their line, and does the market agree?
The Model: Five Layers of Adjustment
Our projection system starts with a base estimate and applies five multiplicative adjustments. Each one captures a distinct factor that moves the needle on player output.
Layer 1: Base Projection (PPM × Minutes)
Everything starts with Points Per Minute (PPM) — the most stable predictor of player scoring output.
We calculate PPM as a weighted blend of three time windows:
| Window | Weight | Purpose |
|---|---|---|
| Last 5 games | 50% | Captures current form |
| Last 15 games | 30% | Smooths out noise |
| Full season | 20% | Anchors to true talent |
The heavy weighting on recent form is intentional. NBA players go through real hot and cold streaks, and the market is slow to adjust to them.
base_projection = PPM × projected_minutes
We estimate projected minutes separately, using a 10-game rolling average. This matters more than people think — a player's minutes can swing by 5+ per game based on matchup and game flow.
Layer 2: Rest Adjustment
Fatigue is real and measurable. We apply multipliers based on rest:
| Scenario | Multiplier | Effect |
|---|---|---|
| Back-to-back (2nd night) | 0.93 | -7% reduction |
| 1 day rest | 1.00 | Neutral |
| 2 days rest | 1.02 | +2% boost |
| 3+ days rest | 1.03 | +3% boost |
The back-to-back penalty is the largest single adjustment in our model. Players on B2B second nights play fewer minutes, shoot worse percentages, and get pulled earlier in blowouts.
Layer 3: Defensive Matchup
Not all opponents are equal. We scale projections based on the opposing team's defensive rating relative to league average (114.0):
- Bad defense (rating 120+): Projection gets up to a +12% boost
- Average defense (rating ~114): No adjustment
- Elite defense (rating 108 or below): Projection gets up to a -12% penalty
This is a linear interpolation, not a binary switch. A team with a 117 defensive rating gets a moderate boost, not the full maximum.
Layer 4: Blowout Risk
This is our most sophisticated adjustment — and one most models ignore entirely.
In blowouts, star players sit. Their minutes drop, and so does their output. We model blowout probability using a sigmoid function based on the point spread:
blowout_prob = 1 / (1 + exp(-0.25 × (spread - 10)))
The sigmoid centers at a spread of 10 points — games with spreads larger than that have increasingly high blowout risk. At a spread of 15, there's roughly a 73% chance of blowout conditions.
We apply different penalties by player tier:
| Tier | Max Reduction | Logic |
|---|---|---|
| Star (30+ min/game) | -12% | Stars get benched in blowouts |
| Rotation | -8% | Moderate impact |
| Role player (20- min/game) | -8% | May actually get more garbage time |
This adjustment primarily affects star players in lopsided games — exactly the scenarios where props are most overpriced.
Layer 5: Pace
Game tempo drives possessions, and possessions drive counting stats. We scale projections based on the opponent's pace:
- Fast-paced opponent (pace 104+): Up to +5% boost
- League average (pace ~100): No adjustment
- Slow-paced opponent (pace 96-): Up to -5% penalty
A fast game against the Pacers creates more possessions (and more stat opportunities) than a grind against the Knicks.
Putting It All Together
All five adjustments multiply together:
total_adjustment = rest × defense × home_away × blowout × pace
adjusted_projection = base_projection × total_adjustment
We cap the total adjustment between 0.85 and 1.15 to prevent compounding from producing unrealistic projections. No player's output should be adjusted by more than 15% in either direction from their baseline.
From Projection to Probability
A point projection alone isn't enough. We need a probability distribution to compare against the market.
We model each player's output as a normal distribution centered on our adjusted projection, with a standard deviation derived from their historical game-to-game variance. Players with higher variance (inconsistent scorers) produce wider distributions and fewer confident signals.
P(over the line) = 1 - CDF((line - projection) / std_dev)
Example:
- Player: LaMelo Ball, points prop
- Line: 23.5
- Our projection: 26.2 (after all adjustments)
- Player std dev: 4.5
- P(over 23.5): 72%
- Market price: 62% implied
- Edge: +10%
- Signal: BUY, HIGH confidence
Edge Thresholds
Not all disagreements with the market are worth acting on. We require minimum edge levels:
| Confidence | Minimum Edge |
|---|---|
| LOW | 5% |
| MEDIUM | 7% |
| HIGH | 10% |
Signals below 5% edge are discarded entirely. Transaction costs eat most of the value at thin edges.
Player Tier System
We classify players into three tiers based on average minutes:
- Star (30+ min/game): Full blowout adjustment, highest data quality
- Rotation (20-30 min): Moderate adjustments
- Role player (under 20 min): Highest variance, most cautious signals
Role players generate fewer signals because their minute distributions are too noisy. A role player might play 25 minutes one night and 8 the next depending on game flow.
What Makes This Work
1. Multiplicative Adjustments
Most bettors think additively — "he's on a back-to-back, knock off 2 points." We think multiplicatively, because the adjustments interact. A star on a B2B against a slow-paced team in a projected blowout faces compounding headwinds.
2. The Market's Blind Spots
Books set lines using proprietary models, but the market is moved by public money. Recreational bettors overweight narratives (hot streaks, revenge games) and underweight structural factors (rest, pace, blowout risk). Our model captures the structural factors the public ignores.
3. Configurable Parameters
Every parameter in our model is tunable. Users can adjust PPM weights, edge thresholds, rest multipliers, and more through our customization panel. Want to be more aggressive? Lower the edge thresholds. Think B2B impact is overstated? Reduce the penalty. The model is a framework, not a black box.
Current Limitations
- Injury uncertainty: We rely on projected minutes, which assume the player is active. Late scratches invalidate the signal.
- Lineup effects: We don't yet model how teammate absences affect a player's usage.
- Prop-specific dynamics: Points, rebounds, and assists have different drivers. We're building prop-specific adjustment layers.
- Sample size: Our NBA model is newer than our weather system. The track record is growing but still young.
What's Next
We're actively developing:
- Prop-specific defense adjustments: Rebounds allowed and assists allowed rates, not just overall defensive rating
- Usage rate modeling: How player roles shift when teammates are out
- Live game adjustments: Real-time projection updates based on in-game pace and score
- Baseball expansion: Bringing the same multi-factor approach to MLB player props by Opening Day 2026
The Bottom Line
NBA player props are a high-volume, high-edge market for disciplined quantitative traders. Our model captures the five structural factors that drive performance — form, rest, defense, blowout risk, and pace — and converts them into calibrated probabilities.
We show the math. We track every signal. We hunt +EV relentlessly.
See live NBA signals on the Sports Dashboard. Customize the model in Settings.