Gravity
GRAVITY SCORE: a single number (0-100) that calculates the amount of ATTENTION a player “SHOULD” attract, given their shooting profile.
Read the formula →“Mass tells space-time how to curve; space-time tells mass how to move. Basketball respects these laws. Here’s how.”
The Observation
Gravity. It exists in any game of basketball at any level. It is the push and pull between bodies on offense and defense, pulling and warping in multiple vectors, for many reasons. Passing, shooting, rim pressure, three point range — these are all pulls acting on the various bodies in space. Bodies of greater mass deform the grid, and defenders failing to observe this law are punished.
However, the eye test and the math agree that no one has adjusted gravity like Stephen Curry. Using the full extent of the three point line, his revolutionary combination of skill, stamina, playmaking, and outlandish range create the opportunity for a new metric, introduced by the Institute here: Gravity. Unsurprisingly, Curry dominates this metric, but he is not alone on the leaderboard. What is compelling is not necessarily that others are trying (to varying degrees) to be like Steph, it’s those who have achieved gravitational effects in different ways.
Plate I · The Surface
A half-court rendered as a deformable mesh. Each player- season’s shot locations create gravity wells into the surface; the deeper the well, the more defensive attention is activated. Curry’s arc reads as a wide, continuous depression around the perimeter (with some seasons showing a great deal of rim pressure as well). A paint-only player’s reads as a single deep crater near the rim. Similar saturation score, different shape. Click a season in the register to morph the surface; drag to orbit.
The Register · Top 30
The overall table.
Pick a team and a season; load every qualifying player- season's surface in one rail and watch the mesh deform as you switch between teammates. Same morph, different cohort.
Catalogue Notes · On the Computation
gravity is the σ-smoothed composite of two sub-signals: shooting-gravity and scoring-gravity. Coverage starts in 1996–97, where shot-event data begins — though the metric reads in the long shadow of the 1979–80 three-point line, a true before-and-after moment in the history of the league’s geometry.
Note that Gravity is a measure of how much attention an offensive player should be receiving, more so than how much they did receive. This is working under an assumption that the shots being taken are roughly equal in their ability to be defended. It does not take into account launch point, angle, exit velocity, or any other details, only the amount of scoring pressure created by the offensive players at any specific place on the court.
- shooting-gravityThe signal of off-ball attention earned by the threat of the shot. Three-point volume × accuracy, weighted by the position the shots come from (above-the-break vs corner) and how often the shooter is closed out on. A Curry pull-up from 28 feet warps the defense before the ball leaves his hand; this component captures that warp.
shooting_gravity = sigmoid_100( z(three_freq × three_pct_above_league) # primary attraction + z(corner_three_share) # corner = stretched defense + z(closeout_rate) # how often defenders run at you ) - scoring-gravityThe signal of on-ball attention earned by the threat of the drive, post, or rim attack. Free-throw drawing rate, drives per minute, post-up volume, the share of team possessions that route through this player. Karl Malone in '97 has little shooting-gravity but maximum scoring-gravity — the index sees both.
scoring_gravity = sigmoid_100( z(usg_pct) # share of possessions + z(ft_drawing_rate) # drawn-foul threat + z(rim_freq + paint_freq) # interior attention + z(double_team_rate) # the literal warp signal )
The two sub-signals blend with a σ-smoothed weight that shifts as the era’s 3PT volume rises — early-1980s seasons rely more on scoring-gravity, modern seasons more on shooting-gravity. The weight schedule is continuous, not stepped, so a single player’s arc reads coherently across eras.
era_weight = sigmoid((league_three_freq − 0.20) × 8)
# 0 in 1980, 0.5 around 2010, ~1 by 2024
gravity = (1 − era_weight) × scoring_gravity
+ era_weight × shooting_gravity
# clamped 0–100; ties at the upper bound are honest saturation,
# not artifacts — a half-dozen seasons every era genuinely max
# out the defensive-attention axis.