Every night during the NBA season, dozens of games tip off simultaneously. Analyzing each matchup manually — rolling statistics for every team, the impact of injuries, back-to-back fatigue, odds movements — is simply impossible for a human. That is why ProbWin developed a specialized artificial intelligence for professional basketball analysis.
Our machine learning system processes thousands of data points in real time to identify games where the bookmakers have it wrong. The historical result for the 2025-26 season: 69.5% win rate on Totals with a +32.8% ROI across 220+ picks. These figures are verifiable in our public pick history.
In this detailed guide, discover how our AI works, what algorithms it uses, and why it outperforms traditional human analysis.
Join ProbWin for free
Access our AI predictions for NBA, NHL, Soccer & Tennis. Sign up in 30 seconds.
The Machine Learning Model: Gradient Boosting on 50+ Features
Why Gradient Boosting
Our NBA model is built on the Gradient Boosting algorithm (via scikit-learn), an ensemble method that constructs decision trees sequentially. Each tree corrects the errors of the previous one, producing a final model with exceptional accuracy.
Why this choice over neural networks or logistic regression?
| Criterion | Gradient Boosting | Neural Networks | Logistic Regression |
|---|---|---|---|
| Accuracy on tabular data | Excellent | Good | Average |
| Interpretability | Good (feature importance) | Low (black box) | Excellent |
| Data requirements | ~3 seasons sufficient | Very data-hungry | Low |
| Handling non-linearities | Excellent | Excellent | Limited |
| Training time | A few minutes | Hours | Seconds |
Basketball is a sport where interactions between variables are critical: a back-to-back has a different impact depending on the team's pace, their average roster age, and whether they are playing at home or on the road. Gradient Boosting naturally captures these interactions without explicit feature engineering for every combination.
The 50+ Features Powering the Model
Our model ingests more than 50 variables (features) for every game. Here are the main categories:
Rolling team statistics (last 5, 10, and 20 games):
| Feature | Description | Window |
|---|---|---|
off_rtg_r10 |
Points scored per 100 possessions | 10 games |
def_rtg_r10 |
Points allowed per 100 possessions | 10 games |
net_rtg_r10 / r5 / r20 |
OFF - DEF difference (overall strength) | 5, 10, 20 games |
pace_r10 |
Possessions per game | 10 games |
efg_pct_r10 |
Effective Field Goal % (weights three-pointers) | 10 games |
ts_pct_r10 |
True Shooting % (includes free throws) | 10 games |
tov_pct_r10 |
Turnover rate | 10 games |
oreb_pct_r10 |
Offensive rebound rate | 10 games |
fg3_pct_r10 / fg3_rate_r10 |
Three-point percentage and frequency | 10 games |
ft_rate_r10 |
Free throw rate | 10 games |
win_pct_r10 / r5 / r20 |
Win percentage | 5, 10, 20 games |
Opponent defensive stats (Four Factors on defense):
opp_efg_pct_r10 -> eFG% allowed to opponents
opp_tov_pct_r10 -> Turnovers forced
opp_oreb_pct_r10 -> Offensive rebounds conceded
opp_ft_rate_r10 -> Free throws allowed
These four defensive metrics are essential: they measure not what the team does on offense, but what it prevents opponents from doing. A team with a low opp_efg_pct has an elite defense.
Contextual factors:
| Feature | Description |
|---|---|
home_b2b / away_b2b |
Back-to-back (game the previous night) |
home_3in4 / away_3in4 |
3 games in 4 days |
home_4in5 / away_4in5 |
4 games in 5 days |
home_road_trip / away_road_trip |
Consecutive road games |
rest_advantage |
Rest days difference between the two teams |
home_hca_factor |
Team-specific home court advantage |
is_conference_game |
Conference game (higher intensity) |
is_division_game |
Division game (rivalry) |
home_injury_impact / away_injury_impact |
Estimated injury impact |
home_stars_out / away_stars_out |
Number of key players absent |
Engineered features (derived variables):
pace_matchup -> Interaction of both teams' pace profiles
net_rtg_diff -> Net Rating gap (spread proxy)
pace_diff -> Pace difference (style asymmetry)
combined_off_rtg -> Combined offensive rating of both teams
pts_trend -> Scoring trend over the last 5 games
net_rtg_trend -> Net Rating trend (improving/declining form)
Training and Retraining
The model is retrained every Monday (09:00 UTC) with the latest data. Each training cycle uses 3+ full seasons of data, representing approximately 3,700 games. This volume is sufficient for Gradient Boosting to learn the patterns without overfitting.
The training process generates two distinct models:
- totals_fade_model.pkl: predicts the probability that the actual total exceeds the bookmaker's line
- spreads_follow_model.pkl: predicts the probability that the home team covers the spread
The Game Script V2 Method: Projecting How Games Unfold
The Problem with the Classic Approach
Before V2, our Analyst (the AI agent that evaluates each game) reasoned like a simple PPG (Points Per Game) counter. It added up scoring averages, compared them to the line, and drew a conclusion. The result: a massive Under bias (62 Under picks versus only 18 Over picks during the season).
But in games with a large spread (8+ points), the total goes Over 57% of the time — because garbage time in Q4 accelerates the pace and inflates scoring. The PPG approach cannot capture this phenomenon.
The Game Script Method: Scenario-Based Reasoning
Since February 2026, our Analyst uses the Game Script method — a five-step approach that projects the game quarter by quarter:
Step 1 — Project the game script (Q1 through Q4)
The AI imagines the likely progression: who leads in the first half? Is there a blowout risk by Q3? Will garbage time in Q4 accelerate the pace?
Step 2 — Estimate pace and possessions
The expected pace is calculated with a specific weighting: expected_pace = (average_pace x 0.6) + (faster_team_pace x 0.4). The faster team imposes its rhythm more — this is a statistical fact verified across 3+ seasons of data.
Step 3 — Analyze the real impact of injuries
A player averaging 25 PPG being absent does NOT remove 25 points from the total. His replacements also score — typically, the absence of a star costs between 8 and 12 actual points, not the totality of their production. The market frequently overvalues the impact of absences.
Step 4 — Build a total range
The Analyst constructs a range for each team: for example HOME 108-115, AWAY 102-110, giving an estimated total between 210 and 225 points.
Step 5 — Compare to the bookmaker's line
If the line (e.g., 219.5) falls outside the estimated range, that is a strong signal. If it falls inside the range, the correct decision is to PASS (the market is probably right).
Required JSON Fields
Every analysis produced by our Analyst contains structured fields that guarantee the rigor of the reasoning:
{
"game_script": "BOS leads from Q1, 8pt spread, garbage time Q4 likely",
"pace_estimate": "102.3 — fast pace, ~205 possessions",
"total_estimate": "HOME 112-118, AWAY 105-111 -> range 217-229",
"injury_analysis": "Tatum out -> -10pts real impact, but White/Hauser step up",
"devils_advocate": "Against Over: LAL defense top-10 last 10, pace has slowed",
"direction": "OVER",
"confidence": 72
}
The devils_advocate field is mandatory: the Analyst must argue against its own decision before confirming it. This is an essential anti-bias mechanism.
Concrete Example: AI Analysis of an NBA Game
Here is how our system analyzes a typical game, step by step.
Game: Boston Celtics vs Los Angeles Lakers
Raw data collected by the Scout:
| Stat | BOS (HOME) | LAL (AWAY) |
|---|---|---|
| Net Rating R10 | +8.2 | +1.4 |
| Off Rating R10 | 118.5 | 113.2 |
| Def Rating R10 | 110.3 | 111.8 |
| Pace R10 | 100.8 | 99.4 |
| Win% R10 | 80% | 50% |
| Back-to-Back | No | YES |
| eFG% R10 | 56.2% | 52.8% |
| Rest days | 2 | 0 |
Bookmaker line: Total 219.5 | Spread BOS -7.5
Analyst Game Script analysis:
"Boston dominates at home with an elite Net Rating (+8.2). LAL on a back-to-back, fatigue expected especially in Q3-Q4. Likely script: BOS pulls away from Q2, leads by 15+ in Q3, garbage time Q4 with accelerated pace. LAL's B2B reduces their defense by ~3 pts/100 possessions. Expected pace: ~101.5 (fast), approximately 203 possessions."
Estimated range: BOS 114-120, LAL 108-114 -> Total 222-234
Line at 219.5 -> below the range -> Strong OVER signal
Confidence: 72% -> above the minimum threshold (65%) -> Official pick
Totals vs Spreads: Why Totals Are Our Specialty
Historical Results Speak for Themselves
| Market | Win Rate | Cumulative Profit | ROI | Picks |
|---|---|---|---|---|
| Totals | 69.5% | +72.1 units | +32.8% | 220+ |
| Spreads | 54.1% | +6.87 units | +2.7% | 257 |
Totals are clearly the more profitable market. But why?
Why the Totals Market Is More Exploitable
-
Less public information baked in. Recreational bettors focus on "who will win" (spreads/moneyline), not "how many points total." This creates more frequent pricing inefficiencies on totals.
-
Pace is undervalued. Pace (the number of possessions per game) is the single best predictor of game totals. Yet most bookmakers adjust their lines primarily based on scoring averages, not on specific pace matchups between teams.
-
Injuries create asymmetric mispricings. When a star is absent, the market overreacts on the spread but underreacts on the total. The absence of a high-volume scorer does not reduce the total as much as the public believes — his replacement also scores, and the opponent adjusts its approach.
-
Garbage time is systematically underestimated. In games with large spreads, Q4 in garbage time produces accelerated pace and additional scoring that pre-game lines do not sufficiently account for.
Spreads: A More Efficient Market, But Still Exploitable
The NBA spreads market is the most heavily watched in the world — lines are extremely efficient. Our model still identifies edges, primarily in small spreads (0-4 points) with an edge of 3%+:
| Spread Category | Required Edge | Historical Win Rate |
|---|---|---|
| 0-4 points | 3%+ | 70.6% |
| 4.5-8 points | 3%+ | 55.9% |
| 8+ points | Any | ~50% (not exploitable) |
Net Rating is the most important feature for spreads: it measures the difference between a team's offensive and defensive efficiency, normalized per 100 possessions.
The Multi-Agent Process: From Data to Pick
Our system does not rely on a single algorithm — it is a chain of 5 specialized agents that collaborate every day.
1. Scout — Data Collection and Structuring
The Scout activates and gathers all fresh data: - Rolling stats for both teams (R5, R10, R20) - Current bookmaker odds (Pinnacle, FanDuel) - Injury reports and absences - Last 5 head-to-head matchups (H2H) - Odds movements since opening
The data is structured into markdown tables that the Analyst can interpret directly.
2. Analyst — Evaluation via the Game Script Method
The Analyst receives the Scout's data and evaluates it using the Game Script method described above. It produces: - A projected game script (Q1-Q4) - A pace and possessions estimate - A total or margin range - A calibrated confidence score (0-80%) - A contradictory argument (devil's advocate)
The Analyst is informed by the Playbook — a strategy document updated daily by the Learner with recent winning and losing patterns.
3. Executor — Strict Validation and Filtering
The Executor applies mechanical rules before making a pick official: - Confidence must fall within the calibrated window (currently 65-100% for Totals, 65-74% for Spreads) - Odds must be available and above the minimum threshold - No double-bet on the same game (one Totals OR one Spread pick, not both) - Picks outside the window are created in shadow mode so the Learner can analyze them
4. Writer — Detailed Analysis
The Writer produces a comprehensive analysis for each official pick, visible on our NBA page: - Game context and stakes (standings, streaks, rivalries) - Key factors identified by the AI - Confidence level and Game Script reasoning - Recommended odds and suggested stake
5. Learner — Post-Game Self-Calibration
This is the most important agent in the system. Every morning at 08:30 UTC, after results are settled, the Learner analyzes the previous night's performance and adjusts the system.
The Learner: ProbWin's Competitive Advantage
The Daily Learning Cycle
Every morning, the Learner executes a complete cycle:
-
Result analysis: every official pick (win or loss) is dissected — the Learner identifies whether the Analyst's reasoning was correct or whether the result was due to variance.
-
Shadow pick analysis: the Learner also examines games the system decided NOT to play. If those games would have been systematic winners, the Learner can loosen the criteria.
-
Pattern detection: the Learner searches for recurring patterns. For example, it detected that CREER picks (created from scratch by the Analyst, without model validation) won only 53% of the time versus 73% for JOUER picks (validated by the model).
-
Threshold adjustment: confidence windows are dynamically recalibrated. The Learner can adjust thresholds by +/-3 points per cycle, stored in the
agent_configtable.
Real Calibration Examples
| Parameter | Initial Value | After Calibration | Reason |
|---|---|---|---|
totals_min_confidence |
70% | 65% | Game Script V2 produces lower but more accurate scores |
totals_max_confidence |
85% | 100% | No overconfidence detected on Totals |
spread_max_confidence |
85% | 74% | Spreads above 74% performed worse (market too efficient) |
The Playbook: Strategic Memory
Every day, the Learner updates the Playbook, a strategy document that the Analyst consults before each analysis. The Playbook contains: - Recent winning patterns (e.g., "Over on games with pace > 101 + large spread") - Anti-patterns to avoid (e.g., "do not count PPG as the primary signal") - The Game Script method summary - Results from the last 7 days with analysis
Essential NBA Metrics for Predictions
To fully understand our analyses, here are the key metrics used by our AI:
| Metric | Simplified Formula | Interpretation | Elite Threshold |
|---|---|---|---|
| Net Rating | OFF Rating - DEF Rating | Overall team strength | > +7.0 |
| Pace | Possessions per 48 min | Game tempo | > 101 (fast) |
| eFG% | (FG + 0.5 x 3PM) / FGA | Shooting efficiency (weights threes) | > 55% |
| TS% | PTS / (2 x (FGA + 0.44 x FTA)) | True efficiency (includes FTs) | > 60% |
| TOV% | TOV / (FGA + 0.44 x FTA + TOV) | Turnover rate | < 13% |
| OREB% | OREB / (OREB + Opp DREB) | Second-chance opportunities | > 30% |
| FT Rate | FTA / FGA | Ability to get to the line | > 0.25 |
Quick guide: an Off Rating above 115 indicates an elite offense. A Def Rating below 110 indicates an elite defense. These thresholds are built into the reference guides provided to the Analyst.
How to Use Our NBA Picks
Recommended Bankroll Management
Our recommendation to get the most out of our picks:
- Flat betting: Always bet the same amount (1-3% of your bankroll) per pick. This is the most reliable method over the long term.
- Don't chase losses: a losing streak is part of the game, even with a historical win rate of 69.5%.
- Follow all picks: being selective reduces the statistical edge. If you only follow the picks that "feel right," you introduce human bias.
- Be patient: the edge manifests over the long term (50+ picks minimum). Over 10 picks, variance can mask the advantage.
What NOT to Do
- Do not combine our picks into parlays (this drastically reduces ROI)
- Do not double your stake after a loss (martingale = guaranteed ruin)
- Do not bet on a game our system decided to pass
- Do not modify picks (e.g., playing Over when we recommend Under)
Where to Place Your Bets
To get the best odds and maximize your ROI, we recommend bookmakers with the lowest margins: - Pinnacle (via AsianConnect for European bettors) — lowest margins in the market - BetOnline — accessible worldwide - Exchanges like Betfair — 0% margin (commission only)
FAQ: Frequently Asked Questions About Our AI NBA Predictions
Can AI really beat the bookmakers?
Yes, but not in every market. Bookmakers are extremely efficient on spreads and moneylines, because that is where the betting volume concentrates. However, the Totals market receives less attention from the general public, which creates exploitable inefficiencies for our model. Our historical track record across 220+ Totals picks this season demonstrates this.
How many picks do you issue per day?
On average, 2 to 4 picks per NBA game night — only when our model identifies a significant edge. On nights when the market is well-calibrated, we may issue zero picks. The discipline of only playing when the advantage is real is the key to long-term profitability.
Why not bet on every game?
Because the bookmakers are right most of the time. On a typical night with 10 NBA games, our model detects an exploitable edge on only 2-4 of them. Betting without an edge means playing against the bookmaker's margin — a losing strategy over the long run.
Does the model adapt during the season?
Absolutely. The Learner recalibrates thresholds daily, and the model is fully retrained every Monday with the most recent data. Mid-season trades are integrated from the very next game through rolling statistics.
What bankroll do I need to get started?
We recommend a starting bankroll that can sustain at least 100 unit bets. If you bet $10 per pick, plan for a $1,000 bankroll. This ensures that inevitable losing streaks do not put you at risk.
To deepen your understanding of NBA betting, check out our guides on Pace and NBA Totals, Net Rating, NBA Trades impact on betting, and Bankroll Management.