A player projection is two numbers multiplied together: how many minutes he plays, and what he does with each one. Every line we show — points, rebounds, threes, the percentiles on his card — is built from those two pieces.
Start with what a player produces per minute, learned from seven seasons of box scores. Give him the minutes his team's rotation actually has for him. Then, once games are played, let this season's numbers take over — fast for the stats that settle fast, slowly for the ones that don't. When a teammate is ruled out, hand those minutes to the players who really get them. That's the whole idea, and each piece was kept only because it beat the simpler version on games it hadn't seen.
engine
Minutes × production
We project what a player does per 36 minutes, stat by stat, and separately how many minutes a night he plays; the per-game line is one times the other. Keeping them apart matters because they move for different reasons. A player's per-minute production is a skill: it comes from a model that learns each player's level from his own seasons, leans on his position and the league when his own sample is thin, weights recent seasons more than old ones, and bends with age around a peak near 28. Minutes are a decision: they come from a review of every rotation in the league, and each team's minutes add up to the 240 a game actually has. A bench player who plays well per minute doesn't get a starter's line until he gets a starter's minutes — and when he does, the line follows.
data
Where the inputs come from
sources
SportsDataIO box scores, injury reports and rosters, seven seasons of NBA box scores (2019-20 onward), college stats for incoming rookies
training
The per-minute model fits 2019-20 through 2025-26, recent seasons weighted more; the early-season hand-over was fit on 2022-23 through 2024-25
holdout
Every layer was scored on a season it didn't see before it shipped; the nightly lines are graded against the box score every day of this season
calibration
Out-of-sample performance
This season's nightly lines, graded against the box score
4.88
points
average miss per player-game
2.02
rebounds
average miss per player-game
1.37
assists
average miss per player-game
2025-26, held out: typical miss per player-game for three ways of making the nightly line
stat
preseason forecast alone
season average alone
our blend
points
6.97
6.26
6.19
rebounds
2.75
2.58
2.54
assists
2.06
1.89
1.87
threes
1.37
1.33
1.31
steals
0.97
0.97
0.95
blocks
0.76
0.76
0.74
turnovers
1.26
1.22
1.20
Top: 1,611 player-games from opening night through October 31, each graded from the last line we showed before tip. Table: root-mean-square error on the 2025-26 season, which none of the three methods was fit on.
The blend beats both of its parts on every stat. That's the point of it: the preseason forecast knows the player, the season average knows this season, and neither alone is as good as the two weighed by how much each has earned.
key levers
What controls the projection
Minutes
Minutes drive more of a projection than anything else, so they get the most care. Before the season they come from a review of all 30 rotations, balanced so each team's players add up to 240 minutes a game across 82 games. Once games are played, a player's minutes blend his preseason number with what he's actually been getting, and the blend shifts toward the real rotation as the sample grows — a player who has been handed a bigger role sees his line rise to match it.
The early-season hand-over
Each stat hands over from the preseason forecast to this season's numbers at its own pace, measured on three past seasons. Points settle fast: after about three games the line is half forecast, half this season, and from the tenth game on it's the season's own average. Rebounds and assists take a little longer. Steals, blocks and turnovers are noisy game to game, so the forecast keeps a real say through the first 50 games — after a dozen games it's still about half. The pace isn't a guess; it's the weight that would have predicted the next game best.
Injuries
Every ten minutes we read the league's injury report. When a player is ruled out, his minutes don't vanish — they go to his teammates at the positions that can absorb them, guards to guards and wings, centers to bigs and forwards. Who gets how much comes from a model trained on nearly 2,000 past absences: recent minutes, scoring rate, whether the role is trending up, and how crowded the position is. A teammate's whole line rises with his minutes, and his card names the player he's covering for when it's worth two minutes or more. On those past absences it missed the real minutes by 3.7 a game, against 4.1 for assuming nobody's minutes change.
Opponent and pace
Tonight's and the next five games' points, rebounds, assists and threes move with the opponent: how much that defense gives up per possession, times how many possessions it plays. A slow, stingy team trims a line; a fast, generous one adds to it. Both are measured from this season's games, pulled toward last season until a team has played about ten. Tested across eleven past seasons and more than 200,000 player-games, it improved every one of those stats — modestly, a fraction of a percent, but in nearly every season.
Shooting
Shooting percentages are pulled toward the average for a player's position, as if he'd taken fifty extra shots at that rate. A big sample barely moves; a hot streak on few attempts moves a lot. A player who almost never shoots threes is projected not to, rather than given a percentage on nothing. In season, makes and attempts scale with the points line so the shooting and the scoring always agree.
Rookies
A rookie has no NBA minutes to learn from, so his per-minute line is half his college production translated to the NBA and half the start made by the ten most similar rookies of recent years. It's the least certain projection we make, and the in-season blend replaces it quickly once he plays.
faq
Common questions
What do the percentiles on a player card mean?
Each point on the Scoring and Role shapes is a player's place among everyone we project for 20 or more minutes a night — about 210 of the roughly 640 players on the board. That gate keeps the regulars, so the middle of it is a real rotation player: the median player in it is projected for about 14 points, against about 5 across the whole board. Percentiles round, so a 100th can be the second-best, not only the best.
What does the 'so far' switch show?
The same shapes, built from this season's box scores instead of the projection: the same 20-minute regulars, counting only players with at least three games played. Shooting is made shots over attempted shots across his games, not an average of nightly percentages.
What is usage?
How much of the offense runs through a player while he's on the floor: his shots, his trips to the line and his turnovers, counted per 48 minutes and read against a typical team's, so about 20% is average. High-usage players are the ones the offense is built around; a low number is a role player who finishes what others create.
What does the trust dial on a card mean?
How much of a stat's expectation now comes from this season rather than the preseason forecast. It fills as games are played, at the pace that stat earns trust: points and minutes fill within the first few weeks, steals and blocks take most of a season, and three-point percentage takes years — it needs about 340 attempts before this season's rate carries half the weight. The expectation shown is the two blended by that trust.
How is 'on pace for' worked out?
What he has already banked this season, plus his projected line times the games we expect him to have left. It's a full-season total that respects both what's happened and what's still to come.
Why doesn't a player's line match his season average?
Early on, because the preseason forecast still has a say — less each game, and at a different pace for each stat. Any night, because tonight has an opponent and an injury report: a teammate ruled out or a fast-paced matchup moves the line off the average, and a tough defense can trim it.
How often do the projections update?
The injury layer runs every ten minutes. Box scores come in twice a day, and every line that leans on this season — the blend, the opponent adjustment, the 'so far' view — moves with them. The preseason forecast underneath is set before the season and changes only when a player's situation does.
apex framework
For the platform-wide methodology framework — pre-registration policy, data philosophy, bias controls, and honesty notes — see the apex methodology page.