Player Ratings
Game Rating
Game Rating (3.0–10.0)
Every game in a player’s game log carries a single number summarizing how well they played that night. It’s built from points, assists, rebounds (split offensive and defensive), steals, blocks, turnovers, fouls, plus/minus, and scoring efficiency measured against that season’s league average — then squeezed onto a fixed 3.0–10.0 scale so a game is always easy to read at a glance, no matter the era or the box score.
A player needs at least 10 minutesplayed in a game to receive a rating. Below that, the sample is too small to grade fairly (a hot 2-minute garbage-time stretch shouldn’t count the same as a real performance), so the log shows — instead.
Step 1 — The raw score
Every stat from that game is multiplied by a weight and added together. Positive plays add to the score, negative plays subtract from it:
raw = 1.0×PTS + 1.4×AST + 1.0×OREB + 0.5×DREB + 2.0×STL + 1.7×BLK − 1.5×TOV − 0.5×PF + 0.2×(+/−) + 0.7×Efficiency
What each weight means in plain terms:
- +1.0 per point (PTS) — the baseline: every point counts once.
- +1.4 per assist (AST) — weighted above a point because a box score assist undersells how much offense it created.
- +1.0 per offensive rebound (OREB) — extends a possession that would otherwise be over, so it’s worth more than a defensive one.
- +0.5 per defensive rebound (DREB) — ends the opponent’s possession, but is more common and lower-impact than an offensive board.
- +2.0 per steal (STL) — takes the ball away entirely: the opponent loses a possession and the player’s team gains one.
- +1.7 per block (BLK) — erases a shot attempt, though the ball doesn’t always come back to the player’s team the way a steal does.
- −1.5 per turnover (TOV) — costs a possession outright, so it’s penalized more heavily than a missed shot.
- −0.5 per personal foul (PF) — a smaller penalty, mostly there to discourage reckless, foul-prone play.
- +0.2 × plus/minus — a light nudge from team point differential while the player was on court. Kept small on purpose since plus/minus is heavily influenced by teammates and opponents, not just this player.
- +0.7 × Efficiency — rewards scoring more (or costs scoring less) than expected for the volume of shots taken. See below.
Step 2 — The efficiency term
Rather than a flat penalty for every missed shot, the rating compares the points a player actually scored to the points an average player would have scored on that same volume of shot attempts that season:
TSA = FGA + 0.44 × FTA
TSA (“true shot attempts”) folds free throws in at about 0.44 attempts each, since most free-throw trips are two shots but and-ones, three-shot fouls, and technicals mean it isn’t a clean 0.5. Same idea used in TS% and Usage elsewhere on the site.
Efficiency = PTS − (league-average points per TSA that season) × TSA
A player who scores more than an average player would have on the same number of shots gets a positive number here; a player who scores less gets a negative number. It rewards efficient scoring and penalizes empty volume without needing to know exactly how many shots were made or missed.
Step 3 — Scaling to 3.0–10.0
The raw score from Step 1 has no natural ceiling or floor — a monster stat line can push it very high, a disastrous one very low. To make ratings comparable across every game in the dataset, the raw score is stretched (or compressed) onto the fixed 3.0–10.0 scale using two reference points calibrated across NBA history: the lowest raw score ever recorded (−33.63) maps to 3.0, and the highest (64.01) maps to 10.0.
rating = 3.0 + [(raw − (−33.63)) ÷ (64.01 − (−33.63))] × 7.0
The result is then locked so it can never fall outside 3.0–10.0, even if a future game somehow beats those all-time bounds.
What the ranges mean
- 8.5 – 10.0 (green) — a standout game: big production, strong efficiency, or both.
- 5.5 – 8.4 (no color) — a normal, unremarkable box score line. Most games players play fall here.
- Below 5.5 (red) — a rough night: low production, poor efficiency, or a costly turnover-heavy game.
Season Average Rating
Season Average Rating
A single number summarizing a player’s whole season. It starts as a plain average of every Game Rating that season (only games where the player logged at least 10 minutes count), then adds a small context bonus of up to ±1.0 from defensive impact, clutch performance, and hustle stats — things a box score line doesn’t capture, like a game-saving block or a string of winning-time stops. It uses the same 3.0–10.0 scale and the same green (8.5+) / red (below 5.5) coloring as Game Rating.
Step 1 — Average the games
Every rated game that season (10+ minutes played) is averaged into one number. This is the starting point before any bonus is applied.
Step 2 — The context bonus
Three season-long signals are each converted into a z-score— a way of measuring how many standard deviations above or below that season’s league average a player’s number is. Doing this lets very different kinds of stats (a percentage, an index, a raw count) get combined fairly on one shared scale:
- Defensive impact (40% weight) — the shooting percentage opponents made when this player was their primary defender, flipped so that holding opponents to a lower percentage counts as a positive.
- Clutch performance (40% weight) — a Clutch Performance Index built from possessions in clutch time (close games in the final minutes).
- Hustle stats (20% weight) — deflections, charges drawn, screen assists, and box outs, combined into one hustle total.
bonus = 0.4 × z(defense) + 0.4 × z(clutch) + 0.2 × z(hustle)
The bonus is then capped to stay between −1.0 and +1.0, so it can nudge a season rating but never dominate it.
Step 3 — Put it together
Season Average Rating = average(Game Ratings) + bonus
Just like Game Rating, the final number is locked to the 3.0–10.0 scale so it always stays comparable across players, seasons, and eras.

