Engine Overview
Most NBA prediction models use regression: they find correlations between historical statistics and game outcomes, then project those correlations forward. This works until it doesn't, typically when injuries change a lineup, when a team adjusts its playing style mid-season, or when matchup-specific factors (pace, defensive scheme, three-point volume) deviate from historical averages.
Our approach is fundamentally different. The Possession MC V5.0.2 engine simulates each game possession by possession, modeling the actual flow of a basketball game. Each simulation run plays out roughly 200 possessions (100 per team) with realistic turnover rates, shooting distributions, rebounding, free throws, and substitution patterns. We then repeat this 10,000 times per game to build a probability distribution for every possible outcome.
How the Simulation Works
1. Possession-by-Possession Modeling
Each possession begins with a ball handler and follows a decision tree: turnover probability (based on team and player TO rates), shot type selection (two-pointer, three-pointer, or free-throw-drawing play), and shot outcome. The key innovation is that each of these probabilities is drawn from the actual game context, not averaged over a season.
If a team is trailing by 12 in the fourth quarter, their three-point attempt rate increases to match observed late-game behavior. If they are leading by 15, pace drops and possessions get longer. This score-state dynamics system means the simulation naturally produces realistic game flow patterns, including comebacks, blowouts, and overtime scenarios.
2. Beta-Distributed Shooting
Player shooting accuracy is not a fixed number. A player who shoots 45% from the field does not make exactly 45 of every 100 shots. Some nights he shoots 60%, other nights 30%. We model this variance using Beta distributions parameterized by each player's season statistics. The shape of each player's Beta distribution captures both their average accuracy and their variance, meaning shooters with small sample sizes (fewer games played) have wider distributions that reflect genuine uncertainty.
This matters for betting because it means our spread and total projections include realistic tails. A team with high-variance shooters will have wider projected score distributions, which directly affects how we assess spread value and over/under pricing.
3. 13-Player Roster Modeling
We model the full 13-man rotation for each team, not just the starting five. Each player has a minutes distribution based on their season role, and substitution patterns follow observed coaching tendencies. When a starter is injured, the simulation does not simply downgrade the team by a fixed amount. Instead, the backup player enters the rotation with their own shooting distributions, rebounding rates, and defensive impact. The emergent effect on team performance is calculated, not assumed.
4. Injury Integration
Injury data is pulled from multiple sources: the ESPN injury report, Basketball Reference game logs, and the NBA's official injury report. We use a multi-source validation pipeline that cross-references these sources to avoid acting on stale or incorrect injury designations. When a key player's status changes from "Questionable" to "Out," affected games are automatically re-simulated with updated rosters.
We learned the hard way that single-source injury data is unreliable. In March 2026 we identified a bug where the engine was using a player's injury "status" field (like "Strain") instead of the severity designation ("OUT"), causing all injuries to be silently ignored. This has been fixed with explicit field mapping and multi-source validation.
5. Rating-Anchored Simulation
Raw simulation outputs can drift from reality if player statistics are noisy or incomplete. To prevent this, the engine anchors simulated outcomes to team-level offensive and defensive ratings derived from season-long performance data. This means individual player variance is preserved (high-variance shooters still produce high-variance games) but the team-level averages converge on observed efficiency metrics.
6. Calibrated Scoring and Pace Compensation
V5.0.2 includes three critical calibration improvements from earlier engine versions. First, pace-duration compensation ensures that fast-paced games (like those involving Indiana or Sacramento) produce the correct number of total possessions rather than running overtime-length simulations. Second, the contest model (which previously applied defensive adjustments that double-counted team defensive ratings) has been removed. Third, free throw dedup prevents counting free throws as both points scored and new possessions.
Data Sources
- ESPN API — Real-time schedules, scores, rosters, and injury reports
- NBA Stats API — Per-player season statistics, shooting splits, advanced metrics (PER, usage rate, true shooting)
- The Odds API — Real-time odds from multiple sportsbooks for spread, moneyline, and total markets
- Basketball Reference — Game logs and advanced stats for cross-validation
What the Model Outputs
For each NBA game, the simulation produces:
- Win probability — The percentage of simulations each team wins, including overtime scenarios
- Spread cover probability — How often each team covers the current Vegas spread across all simulations
- Projected total — The median combined score across simulations, with standard deviation
- Margin distribution — The full distribution of victory margins, allowing edge calculation at any spread
- Moneyline edge — The gap between model-implied probability and sportsbook-implied probability
These outputs are then passed through Bayesian probability shrinkage (15% toward 50%) and profitability zone analysis before generating final picks. This ensures that the edges you see have been corrected for model overconfidence.
NBA Performance
Why Possession-Level Simulation Matters for Betting
Traditional models predict game outcomes as single numbers: "Team A has a 62% chance to win." This is useful but incomplete. It tells you nothing about spread value, total value, or how different bet types interact with the model's uncertainty.
Possession-level simulation produces a full probability distribution. You can ask the model: "In how many of 10,000 simulated games does Team A win by more than 7?" or "What is the probability the total exceeds 225?" or "What is the median margin when Team A wins?" Each of these questions maps directly to a specific bet type, and the simulation answers them all from the same underlying model.
This is why we can offer spread, moneyline, and total picks from a single simulation run, with each pick having its own independently calibrated probability and edge calculation. A regression model would need three separate models for these three bet types. Our simulation does it in one pass.
Explore Other Models
CBB Model
Savant Ultra v5.0.1 — 5-on-5 player simulation with EvanMiya BPR ratings and regime calibration.
NHL Model
V19.1 Pinnacle — MoneyPuck xG, real danger zones, per-zone goalie modeling.
NFL Model
Elite V1.1 Pinnacle — EPA metrics with CDF edge calculation and drive sequencing.
Soccer Model
V16.3 PBP — FBref xG, isotonic calibration, formation analysis, and BTTS modeling.
MLB Model
Elite Matchup V4.2 — count-state simulation, catcher framing, bullpen fatigue, and park factors.
LoL Model
Championship v2.1 — 5-layer Glicko-2 with market blend and patch-aware meta analysis.