How NBA Predictions Work
Full methodology · Data sources · Limitations
OVERVIEW
SandmanEdge uses a two-stage prediction pipeline. First, a statistical confidence engine scores the matchup using 26 weighted factors from the database. That score is passed to the SandmanEdge engine along with detailed team and player data, which generates the final picks, reasoning, and score prediction. Neither stage should be used for real betting decisions.
STAGE 1 — STATISTICAL CONFIDENCE SCORE
Before calling the SandmanEdge engine, we calculate a Stat Score from 52–85% representing the home team's statistical edge. This is a pure formula — no AI involved. It's built from 26 weighted factors (max 107 pts above the 50-point baseline). The engine then reads this score alongside all the detailed context and outputs its own Engine Confidence — which can differ significantly when it identifies things the formula missed, like narrative momentum, travel fatigue, or a team hiding injuries.
FACTORS (hover each for details in the Score Breakdown):
1
Net Rating
±10 pts
Primary efficiency signal: points scored minus points allowed per game. The single best predictor of team quality. A +8.5 net team vs a -2.1 net team earns the full swing. Uses real last-20 game defensive data when available.
2
Win %
±8 pts
Season win percentage differential. A 65% win-rate team vs a 45% team earns the full ±8. Slightly reduced — win% alone can be inflated by schedule strength, which is why Net Rating carries more weight.
3
Form (L5)
±8 pts
Wins in each team's last 5 completed games. A 5-0 team vs a 0-5 team earns the full ±8. Heavily weighted because recent form reflects current momentum, injuries, and rotations far better than season averages.
4
Injuries
±10 pts
Tiered player value model using fantasy points per game as a proxy for player importance. MVP-tier (55+ FP/g) Out = 6.5 pts penalty, All-NBA (45+) = 4.5, All-Star (30+) = 3.5, Starter (20+) = 2.0, Rotation (12+) = 1.5. Multiplied by status: Out×1.0, Doubtful×0.75, Questionable×0.45, Probable×0.15. Capped at 10 per team.
5
Defense
±6 pts
Opponent points allowed per game over the last 20 games. Every 3 PPG difference in defensive quality = ±2 pts, capped at ±6. Only applied when real game-log data is available — season stat estimates are skipped.
6
eFG%
±6 pts
Effective Field Goal %: adjusts FG% to account for the extra value of 3-pointers. Formula: FG% + (0.35 × 3P% × 0.5). A team that shoots well from three gets more credit than raw FG% alone. Every 3% eFG difference = ±2 pts, capped at ±6.
7
Rest
±4 pts
Days of rest between games. A back-to-back team (1 day rest) is penalized vs a rested team (3+ days). Full ±4 swing for back-to-back vs well-rested opponent. Rest fatigue is one of the most underrated edges in NBA betting.
8
Turnovers
±4 pts
Net turnover margin: steals forced minus turnovers committed per game. A positive net means the team creates more chaos than it gives away. Every 1.5 net differential = ±2 pts, capped at ±4.
9
Rebounds
±4 pts
Rebounds per game differential between teams. Every 3 RPG advantage = ±2 pts, capped at ±4. Rebounding edge drives second-chance points, controls pace, and limits opponent possessions.
10
Clutch
±3 pts
Win % in games decided by 5 points or fewer (minimum 4 clutch games required). Captures late-game composure and execution when it matters most. Capped at ±3 because clutch sample sizes are inherently small.
11
FT Rate
±3 pts
Free throw percentage differential. Getting to the line and converting = free points and foul trouble for the opponent. Every 5% FT% difference = ±1 pt, capped at ±3.
12
Travel Fatigue
±5 pts
Real travel distance between arenas using GPS coordinates. Cross-country trips (2000+ miles) = -4 to -5 for the away team. Regional hops (<500 miles) = -1. Home team on a 4+ game homestand gets +1. Based on actual arena coordinates from sportsdata.io — not just consecutive road games.
13
Bench Depth
±4 pts
Bench scoring over last 5 games (PPG from players under 25 min), with L5 vs L6-10 trend detection. Declining bench (3+ PPG drop) adds extra penalty; improving bench adds bonus. Deep bench (15+) vs thin (under 8) = significant edge.
14
Str. of Schedule
±4 pts
Average opponent win% computed from game logs. Every 4% gap in SOS between teams = ±2 pts, capped at ±4. Teams that have beaten tougher opponents are more battle-tested.
15
Schedule Density
±3 pts
Games played in last 7/14 days. Heavy (5+ in 7d) = fatigue penalty, Light (≤2 in 7d) = freshness bonus. A tired team facing a rested one gets penalized up to ±3 pts.
16
Home Court
+2 to +6
Dynamic home court advantage based on team splits. Strong home records (margin +8 or better) earn +6; weak home teams get +2. Replaces flat +4 with actual performance data. Neutral venues = 0.
17
Momentum
±3 pts
L10 vs L11-30 trend direction and magnitude. Improving teams get +1, declining teams -1. Large margin swings (5+ PPG delta) add extra ±1. Home momentum minus away momentum, capped at ±3.
18
Fatigue Stack
±2 pts
Compound modifier when multiple fatigue signals stack: rest ≤1 day + travel ≥-2 + heavy/compressed density. 3 flags vs 0-1 = ±2; 2 flags vs 0 = ±1. Captures compounding effect beyond individual factors.
19
Pace
±2 pts
Pace differential based on average game totals. Fast-paced teams (>230 total) vs slow teams (<210) get an edge. Captures tempo mismatch — up-tempo offenses stress slow defenses.
20
Backup Credibility
±2 pts
When key players are Out/Doubtful, checks healthy rotation depth from game logs. Deep bench mitigates injury impact; thin rotation compounds it.
21
Rotation Stability
±2 pts
Counts core vs fringe players in recent game logs. Stable 8-10 man rotation = predictable; 12+ unique players or high churn = instability penalty.
22
Vegas (30%)
blend
Vegas implied win probability blended at 30% weight into the final score. Calculated from moneylines: a -300 favorite implies ~75% win probability. This blend anchors extreme statistical outliers toward market consensus. The other 70% is our stat formula.
23
Vegas Divergence
±3 pts
When our stat model and Vegas disagree by 8+ points, confidence is dampened. A 15+ point gap = -3 (strong disagreement), 10-14 = -2 (moderate), 8-9 = -1 (mild). Vegas has access to injury/motivation info we may lack.
24
Star Player Form
±3 pts
Compares top scorer L5 game log avg vs season avg. A star slumping (15 PPG L5 vs 22 season) = negative signal not captured by season stats. Surging stars get a boost. Scored per team, differential applied.
25
Betting Splits
±2 pts
Public betting % from SportsDataIO. When 75%+ public bets on one side: contrarian edge if we disagree (+1), caution if we agree (-1). Fading heavy public is historically profitable.
26
Playoff Context
modifier
In playoff games, all confidence scores are tightened 10% toward 50 (less variance, more execution-focused). Regular season games are unaffected.
The raw score starts at 50 and all factors are added or subtracted. This score is passed to the SandmanEdge engine as a starting point, not a final answer.
STAGE 2 — SANDMANEDGE ANALYSIS
The SandmanEdge engine receives all available data and generates a structured prediction. Here is exactly what data is analyzed:
→ Team Season Stats
Win-loss record, points per game, opponent points per game, scoring margin, field goal %, three point %, free throw %, plus/minus, and rebounds/assists/turnovers. All totals divided by games played.
→ Home / Away Splits
Each team's record, scoring average, and scoring margin split by home vs away games. Reveals if a team performs significantly differently at home — some teams have massive home/away splits that the overall record masks.
→ Player Stats — Last 5 Game Logs
Instead of season averages, we fetch each player's last 5 individual game logs and calculate rolling averages. This reflects true current form, not what happened months ago.
→ Three-Point Profile
Rolling 10-game average of three-point attempts, attempt rate (% of shots that are threes), and 3P%. Teams are classified as heavy 3PT, balanced, or paint-focused.
→ Turnovers & Steals
Turnovers committed vs steals forced per game. Teams labeled as turnover-forcing, neutral, or turnover-prone. Affects pace and transition opportunities.
→ Injury Report
All players listed as Out, Doubtful, or Questionable with position and body part affected. Injuries are sorted by player importance so the most impactful absences appear first.
→ Recent Form
Results, scores, and opponents from each team's last 5 completed games. Context on momentum and recent schedule difficulty.
→ Head-to-Head History
Last 5 meetings between these two teams with dates, scores, and winner. Some teams have significant H2H edges regardless of overall record.
→ Rest & Fatigue
Days since each team's last game plus travel distance (GPS-based) between arenas. Back-to-backs, cross-country trips, and compressed schedules are all factored in.
→ Divisional Context
Matchup type detection — divisional (high familiarity, rivalry intensity), conference, or interconference. Divisional matchups weight H2H and trends more heavily.
→ Clutch Record
Win % in close games (5-point or less margin). Some teams consistently win close games while others collapse.
→ Vegas Lines
Actual moneyline, spread, and over/under from SportsDataIO. The engine evaluates whether the predicted margin supports or challenges the spread.
→ Calibration Feedback
The engine's recent accuracy is fed back in: ML/ATS/O&U records, accuracy by confidence bucket, and average score deviation. If recent predictions are off, the engine self-corrects.
→ Statistical Confidence Score
The Stage 1 score (52–85%) from 26 weighted factors is passed to the engine as a starting point, blended with 30% Vegas implied probability.
→ Advanced Statistical Models
Four independent models run alongside the confidence engine: ELO ratings (chess-style power ratings updated after each game), Pythagorean W% (expected win rate from points scored/allowed), Log5 (head-to-head probability from each team's true strength), and an Ensemble that blends all models with Vegas implied probability. These are displayed in the Advanced Models card below the Score Breakdown.
→ Adaptive Factor Weights
The engine tracks which confidence factors historically correlate with correct vs. incorrect predictions. Factors that consistently predict well get boosted (up to 1.5x), while unreliable factors get dampened (down to 0.5x). This self-tuning requires 20+ graded predictions to activate.
→ Closing Line Value (CLV)
After games are graded, the system compares the lines at prediction time to the closing lines. Consistently beating the closing line (positive CLV) indicates genuine edge over the market. Track CLV trends on the History page's CLV Tracker tab.
HOW EACH PICK IS GENERATED
MONEYLINE
SandmanEdge predicts the winner and confidence percentage. The moneyline odds shown are calculated from the engine's confidence using standard probability-to-odds conversion — they are our model's implied odds, not the sportsbook's line.
POINT SPREAD
The point spread displayed is the real Vegas line from SportsDataIO. The engine's predicted score margin is compared against the actual spread to determine the cover pick. The line never changes between predictions — only the cover pick changes based on the engine's score prediction.
OVER / UNDER
SandmanEdge predicts a final score for both teams. The predicted total is compared to the Vegas O/U line. Confidence is based on how far the predicted total deviates from the line. Confidence is capped at 75% because totals are notoriously difficult to predict.
LOW CONFIDENCE FLAG
The engine flags low_confidence: true when it detects significant uncertainty — for example, key injury statuses that are listed as Questionable (could play or not), very evenly matched teams where the data is inconclusive, or missing data for a key player. When flagged, a gold warning banner appears above the picks. This is SandmanEdge being honest about its own limitations rather than always projecting false certainty.
KNOWN LIMITATIONS
—
Player stats require game logs to be refreshed regularly. If logs are stale, last-5-game averages may not reflect current form.
—
Opponent points per game (defensive rating) may be null if the SQL population query has not been run. This reduces the accuracy of the scoring margin factor.
—
The pace estimate is based on combined game totals, not true possession count. It is an approximation.
—
Vegas lines (spread, moneyline, O/U) are only as current as the last data refresh. Lines can move significantly on game day.
—
SandmanEdge's analysis reflects the data it is given — garbage in, garbage out. Stale injuries or missing player logs will hurt prediction quality.
—
No model can consistently predict = strtoupper($sport) ?> games at better than ~60% accuracy over a full season. Anyone claiming otherwise is misleading you.
SandmanEdge Prediction Engine · For entertainment purposes only · Not financial or betting advice
Select a Game to Analyze
Last refresh: 6:48 PM EDT