Methodology
This page explains how the advanced stats and grades on this site are computed, and what they don't (yet) account for. Nothing here is invented for this page — every formula and threshold below is the one the site actually runs, pulled from the same code that produces the numbers you see on a player, team or game page.
Possessions and pace
A team's possessions are estimated the standard way, from its own box score:
possessions = FGA − OREB + TOV + 0.44 × FTAA game's possession count averages both teams' estimates (game_poss), since the two sides don't always play the exact same number of trips. Rate stats that need a possession denominator (offensive/defensive rating, TOV%) use whichever side's estimate is the correct denominator for what they're measuring.
Shooting efficiency
- eFG% (effective field goal percentage) weights a three-pointer at 1.5× a two:
(FGM + 0.5 × 3PM) / FGA. - TS% (true shooting percentage) folds free throws into the same shot-value logic:
PTS / (2 × (FGA + 0.44 × FTA)).
Both are used exactly as defined above for teams; player TS%/eFG% use the same formulas over the player's own attempts.
Shot zones
Both stats providers this site imports from ship per-shot x/y coordinates, not just a make/miss and a shot type. From that:
- A shot tagged as a two-pointer is classified midrange once it's more than 3.2 metres from the rim — the site trusts the feed's own 2-point/3-point tag rather than re-deriving it from the plotted coordinate, which is occasionally off by enough to misclassify a shot near the arc.
- Shots closer than that split into rim and paint attempts, and everything beyond the arc is a three.
Team and player pages break shooting down by these zones (rim / paint / midrange / three) rather than only by the box score's 2P/3P split.
Clutch and period splits
A clutch possession is one inside the last 5 minutes of the fourth quarter (or of any overtime), with the score within 5 points at the moment it's counted — the standard definition. Splits are also available by quarter/overtime period, and box scores can be sliced to any custom clock range within a game.
Grades: the shared idea
Players, teams and coaches are all graded the same way: a holistic, 2K-style letter (A+ down to F) built from rate and efficiency stats only — never counting stats, so a player who plays 12 minutes a game is judged on what he did with them, not docked for playing fewer of them than a starter.
The letter is not relative to whoever else happens to be in a query result. It's an absolute percentile against one reference environment — the top competition tier — so a B+ means the same thing on a youth-league page as it does on a top-flight one. That requires translating every league's numbers onto one common scale before any percentile is taken:
- Each metric is z-scored against its own league — how many standard deviations a player/team is from that league's own mean and spread that season.
- That z is then shifted by how far the league sits below the reference tier, on a competition-strength ladder (
1.0= top flight, scaled down by division/age category). The shift isLEAGUE_Z_GAP × (F_REF − f)— one constant standing in for what used to be 23 hand-tuned per-metric sensitivities, calibrated from the actual efficiency gradient measured between league tiers. - The translated z becomes a percentile, and the percentile maps to a letter through fixed bands (A+ at the 95th percentile down to F below the 10th) — median performance in the reference league lands around C+, not B, because the scale isn't centred on "average in whatever league you're looking at."
Recency matters more than history: the sample is capped and recency-weighted with a half-life (25 games for players, 25 for coaches), so a player's grade tracks his current form rather than his whole career, but a cold stretch doesn't erase what came before it either. A minimum sample (minutes for players, games for teams/coaches) and a minimum qualified pool size gate when a letter is shown at all, rather than publishing one off too little data.
One metric can also drop out of a specific league's grade entirely: if that league's spread on a metric is far narrower than the reference league's — a sign the metric isn't really being measured there, not that everyone is unusually alike — it's excluded rather than turned into a wild z-score. The clearest case on this site: the ABA League's play-by-play carries no assist attribution, so every made shot is recorded "unassisted" and that metric is dropped from ABA grades rather than tanking every player in the league on a data gap.
Player grades
A player's two headline letters — Offense and Defense — roll up eight attribute categories, each a weighted blend of the underlying rate stats:
- Offense: Outside Scoring, Inside Scoring, Shot Creation, Scoring Efficiency, Playmaking
- Defense: Rebounding, Perimeter Defense, Rim Protection
Defense is the weaker signal of the two, and is marked as such where it's shown: without play-by-play tracking data, on-ball defense can only be estimated from steals, blocks, fouls and rebounding — real stats, but an incomplete picture of a half spent guarding someone.
Team and coach grades
Teams and coaches share the same z-translation machinery as players, with two differences. First, team defense is graded from real opponent production (defensive rating, opponent eFG%/TS%, opponent turnover rate, …) rather than the proxy stats a player's defense grade has to rely on — a team's defense grade is the more trustworthy of the two. Second, the ladder-gap constant is fitted separately for each side of the ball (TEAM_OFFENSE_Z_GAP/TEAM_DEFENSE_Z_GAP), because league difficulty doesn't land evenly on offense and defense — the fitted gap is wider on defense, since a team's defensive rating absorbs the full quality gap of whatever it's facing, where a player's steals and blocks are his own events and absorb much less of it.
Team and coach letters are built from the same underlying subcategories (Scoring Efficiency, Playmaking, Shot Profile, Rebounding, Defensive Efficiency, Perimeter/Interior Defense, …), but weighted differently: a team grade leans on results — efficiency numbers carry more weight, since a team's efficiency is largely a function of the roster it has. A coach grade leans more on system and decisions — shot profile, ball movement, turnover economy, rotation management — the parts of the game a coach has more direct control over than his roster's raw talent.
Some metrics are shown for context without ever being graded — identity metrics like pace, rotation size or bench minutes. They describe how a team plays, not whether it's good, and grading a style choice as though it were a skill would be a category error (a nine-man rotation isn't "better" than an eight-man one).
Coverage and caveats
Advanced stats depend on how much detail a competition's stats feed actually carries. Play-by-play — the source of shot location, assist attribution, lineup-based splits and the lead-flow chart on a game page — isn't available for every competition and season this site covers. Where it's missing, a game still gets a full box score, but zone breakdowns, clutch splits and shot charts simply aren't offered for it rather than being estimated.