How our projections work
Vates Sports publishes nightly, machine-learning projections for every NBA player — all 19 box-score stats, always as ranges, never as false certainty. This page explains the method, plainly.
What do the P10, P50 and P90 numbers mean?
For every stat we publish three values: P50 is the median projection — the player lands above it half the time and below it half the time. P10 and P90 bound the realistic range: roughly 80% of outcomes fall between them. Single-number predictions hide uncertainty; ranges are the honest way to forecast basketball.
How are the projections made?
A gradient-boosted machine-learning model (LightGBM) trained on nearly 30 seasons of NBA box scores. Playing time and per-minute production are modelled separately and combined, which handles role changes better than projecting totals directly. The model is retrained and evaluated with walk-forward backtests — it is only ever scored on games it could not have seen.
How accurate are they?
On honest walk-forward backtests the points projection lands within about 4.5 points of the actual result on average (mean absolute error), with calibrated ranges. Every player page also publishes the model's season MAE and bias for that specific player — including the misses.
How often is everything updated?
Nightly. After each slate we ingest the box scores, rebuild features, and publish fresh projections for the next games, plus updated ELO ratings and play-by-play profiles.
Where does the play-by-play data come from?
We maintain our own event-level store — millions of parsed plays and shot locations — which powers the shot-diet, clutch and connection profiles on player and team pages.
Is this betting advice?
No. Vates Sports publishes statistical projections for information and entertainment. Nothing here is a recommendation to wager, and actual results will differ from any forecast.
Want the receipts? See the season accuracy retrospective for how close our projections actually landed, stat by stat.
See tonight's projections →