The formula
Compare each metric within this fixed 100-player pool using midrank percentiles. Shrink the percentile toward 50% using reliability = season minutes / (season minutes + 400). Rating = round(50 + 49 × adjusted percentile), with the additional three-point shot-evidence adjustment described below. The 50–99 scale and 400-minute prior are game design choices, not validated NBA ability estimates.
Metric preparation and overall weights
Scoring combines 65% PPG percentile and 35% approximate true-shooting percentile (PTS / [2 × (FGA + 0.44 × FTA)]). Assists, rebounds, steals and blocks use per-36-minute rates. Shooting percentages are regressed toward attempts-weighted pool means using 100 prior attempts for threes/free throws and 200 for field goals; attempts are approximated from rounded per-game data × games. Three-point rating combines 70% adjusted percentage percentile and 30% made threes per 36 percentile. For three-point shooting only, multiply the portion above the 50-point floor by estimated attempts / (estimated attempts + 20); no observed attempts gets a 50-point game floor, not an asserted ability estimate. Overall weights: scoring 22%, threes 17%, assists 16%, rebounds 10%, steals 8%, blocks 7%, free throws 8%, field goals 12%.
What a score cannot tell you
A high steal or block rate does not fully measure defense. Field-goal percentage is affected by shot selection and role. This model adjusts for minutes and shooting sample size, but not pace, opponent strength, lineup context or shot difficulty. Per-36 rates are not predictions of what a player would do with more minutes. The selected pool is biased toward high-minute players; its percentiles are not league-wide percentiles. Never use this model for betting, scouting or financial decisions.
Missing data stays missing
A missing statistic is not converted to zero. A player with no value for the current trait is excluded from that round. The current pool uses sourced 2025–26 regular-season statistics. No live-data connection is implied.
Versioned results
The game and dataset versions travel with saved builds. An incompatible or invalid shared build is rejected rather than silently recalculated. Changing the data requires a new dataset version.
Lab role and fictional career model
The role comes from the strongest pair of normalized traits: shooting/free throws, assists/scoring, rebounds/blocks, or field goals/steals. Career output uses a seeded random generator, a fixed ten-year growth curve and selected real-player per-36 scoring, assist and rebound rates shrunk toward pool means by season minutes. Simulated playing time, a separate team-strength draw and seeded year-to-year variation drive the outputs; these design assumptions have not been fitted to historical careers. All simulated statistics, draft choices, team wins, awards and dollar earnings are invented game outputs, not real NBA results, contracts or predictions.