Methodology

How the numbers work

Every metric on Hustle Stats, how it is built, and how much of it is skill versus noise. The full method notes, with live tables, also sit at the bottom of each tool.

Data

Play-by-play comes from NBA.com's live data feed: every shot, foul, turnover, rebound and substitution for the 2020-21 through 2025-26 regular seasons (7,230 games), retrieved through the public nba_data archive. The 2026-27 season is pulled from NBA.com every Monday.

Player tracking (deflections, loose balls, screen assists, contests, box-outs, contested rebounds, distance and speed) comes from NBA.com's tracking stats, pulled month by month so recent games can be weighted more.

Totals are checked against official box scores, and the two sources are checked against each other: charges drawn match player by player (r = 0.995).

Shot Profile

Shot Profile measures points per shot attempt above a baseline and splits the gap into five parts, all in points per 100 attempts. An attempt is a field-goal attempt or a shooting-foul trip.

Decisions

  • Selection: takes shot types worth more than an average attempt.
  • Alignment: takes more of the shots where he beats the baseline and fewer where he doesn't.
  • Foul drawing: gets to the line on shots, valued at baseline FT%.

Execution

  • Making: finishing by zone, on a baseline shot mix.
  • FT making: his FT% against baseline, times his shooting-foul free throws.

Total = Decisions + Execution. The five parts add up exactly to the difference between his points per attempt and the baseline's.

Zones and shot types

Zones use NBA's own tags: restricted area, paint, mid-range, corner 3 and above-the-break 3. Shot-type mode splits those further with the play-by-play descriptors (cuts and lobs, putbacks, drives, floaters, post-ups, catch-and-shoot, pull-up and step-back threes), and grades each shot only against the same shot type.

Garbage time

Player numbers drop garbage time: 4th-quarter margins of 25+ in the first 3 minutes, 20+ in the next 3, or 15+ in the last 6. Team numbers keep every possession, the way team ratings are usually reported.

Does it repeat?

Year-to-year correlation of single-season scores (players with 450+ attempts in both seasons), across all five season pairs since 2020-21: Decisions 0.83 to 0.88, Execution 0.65 to 0.72, Total 0.73 to 0.79. Shot choices are one of the most stable things a player does.

Hustle Plus-Minus

Hustle Plus-Minus (HPM) is the number of points per 100 possessions a player adds through hustle, compared with an average player, split into offense (O-HPM) and defense (D-HPM).

Plays with a direct points value

Each play is valued by what it is worth on the scoreboard, measured from possessions in 2023-24 to 2025-26:

PlayPoints
Average possession1.14
Steal (possession it starts)1.32
Charge or offensive foul drawn1.11
Block the defense recovers1.47 avg
Block the offense recovers0.37 avg
Offensive rebound (points that follow)1.11

Rebounding impact

oREB and dREB Impact are lineup-adjusted: a ridge regression (RAPM) over about 1.46 million possessions with all ten players on the floor, controlling for score margin and home court, with games 550 days old counting half. One percentage point of team offensive rebound rate is worth 0.58 points per 100 possessions.

Plays without a direct value

Deflections, screen assists, loose balls, contests and box-outs get the weight the data says they earn: how much each predicts lineup-adjusted impact beyond steals, blocks, charges and rebounding. Each weight is pulled toward zero by its uncertainty:

weight used = learned weight × z² / (1 + z²)

Most of these earn very little once steals and rebounding are counted. The deflections that matter become steals, and good box-outs show up as rebounds. They stay on the site as their own leaderboards.

Does it repeat?

Year-to-year correlation of single-season HPM (2,000+ possessions in both seasons): 0.69 to 0.71. Blocks (0.87 to 0.92) and screen assists (0.93 to 0.96) repeat most; rebounding impact (0.39 to 0.54) least.

Skill vs noise

Every number on the site is an estimate from a limited sample, so two ideas run through all of it.

Shrinkage

Rates are pulled toward a baseline in proportion to how little data stands behind them, with the pull k estimated from how much real talent varies:

estimate = (makes + k × baseline) / (attempts + k)

Small samples get pulled a lot and big samples barely move, so a hot month can't top a leaderboard.

Likely real or could be noise

Each result carries a noise range from its sample size or the model's uncertainty. Likely real means the result is more than twice its noise range away from average. Could be noise means it may still be real, but the sample can't rule out luck yet.

Role peers

A center and a point guard shouldn't be judged against the same average. Each player can be compared with his closest role peers: the most similar players on usage, playmaking, share of assisted makes, minutes and shot locations. Hustle stats are never used to pick peers, so a player can't be compared only with other hustlers.

Listed positions cover players active from 2023-24 on. For about 180 players whose careers ended earlier, position is estimated from their most similar players (within one position 98% of the time).

Limits

  • Shot difficulty inside a zone (defender distance, shot clock) isn't in the play-by-play.
  • Defenses decide which shots are available, so read Alignment as a signal, not a verdict.
  • Transition defense, closeouts and communication don't show up in either data source.
  • Tracking stats exist only as player totals, so they can't be lineup-adjusted.
  • Age, team changes, injuries and role changes all move trends. Check context before calling a trend development.