Beta
← Experiments
Force Document

Interior Dominance — Shaq Factor

The score in one sentence

SHAQ FACTOR: a single number (0-100) that captures a player’s OFFENSIVE INTERIOR DOMINANCE.

Read the formula →

Close your eyes and visualize prime Shaq. What do you imagine? Celebrating one of his dominant performances with the Lakers in the finals? A preposterously sized man carrying half the New Jersey Nets to the hoop? An anxious trip to the foul line, sweat dripping into his eyes as he lines up for another clank? A surprisingly soft touch on hooks around the paint? Gathering in offensive rebounds by the dozen?

These are all Shaq, anecdotally, and they are lenses on the most physically dominant player of the full-data (post 1997) era1. A bull in the china shop of a player - lives at the rim, goes through (rather than around) defenders, and converts the paint into their sovereign territory. The Institute can now exclusively release the data that backs up this claim, but also casts some interesting light on it.

Note: all data is post-1997 — the shot data required for populating the formula is lacking prior to then.
Section I — The Top of the Index

The Top of the Index

Top 30 player-seasons by shaq_factor. Each row is a single season. Traded players appear under their primary stint.

Section II — The Lopez Arc

The Lopez Arc

Brook Lopez is a fascinating illustration in year-over-year shaq_factor. Across sixteen seasons he travelled most of the index — classic low-block operator into his late twenties, then a complete reformation into a Mike Budenholzer floor-spacing big. When you visualize Brook Lopez now, it isn’t a mammoth human clearing space in the post, it’s setting his feet for a trailing three.

The dashed line is the league-wide qualifying-player average. Interestingly, league-wide shaq_factor is a near-constant, year over year.

3045607509NJN13BKN18LAL19MILleague avgBrook Lopez
Brook Lopez, shaq_factor by season. Dots colored by team; the league-wide qualifying average sits remarkably flat, 42–45, across the entire span.
Three more arcs that travelled the same road
Marc Gasol
Memphis post-up DPOY → Toronto title 5-out floor-spacer. The arc people remember; the span people forget.
40600005101520256431
Carmelo Anthony
Three-level scorer with a healthy interior diet through Denver and New York. By the LAL/POR ride-along years he was a stationary corner shooter.
40600005101520255929
Kevin Love
Minnesota 20-and-15 → Cleveland stretch-4 → Heat & Jazz spot-up specialist. The basketball case for shaq_factor in one career.
40600005101520256230
And three counter-trends — non-shaq → shaq
Giannis Antetokounmpo
Skinny project to full-bull MVP. Twelve consecutive seasons of upward pressure on the index — the cleanest non-shaq → shaq line on file.
40600005101520258349
Nikola Jokić
The soft-touch big who quietly grew into one of the heaviest interior diets in the league. Each MVP year another tick north.
40600005101520257352
Shai Gilgeous-Alexander
A guard. The index does not, as a rule, flatter guards. SGA disagreed: the foul-drawing component carries him into territory normally reserved for centers.
40600005101520256945
Section III — The Podium

Two Low Block Artists, Then Everybody

shaq_factor was, for nineteen consecutive seasons, the domain of exactly whom you would think. From 1996–97 through 2014–15, the same two men held the #1 slot — Shaquille O’Neal for the first ten, Dwight Howard for the next nine. Beginning 2015–16, however, the index broke into a roll call: DeAndre, Gobert, Drummond, Giannis, Zion. Is this the result of the decline of the singular paint-bully and the rise of the league’s deepest ever interior-finisher rotation? The league lacking a generational athletic marvel? Better overall shooting? More specialization? The data is clear, but the conclusion is not.

4050607080Rony Seikaly · ORL · 1996–97 · 68Tyrone Hill · CLE · 1996–97 · 68Shaquille O'Neal · LAL · 1996–97 · 75Shaquille O'Neal · LAL · 1996–97 · shaq_factor 75SO97Alonzo Mourning · MIA · 1997–98 · 66Jayson Williams · NJN · 1997–98 · 67Shaquille O'Neal · LAL · 1997–98 · 78Shaquille O'Neal · LAL · 1997–98 · shaq_factor 78SO98Shawn Kemp · CLE · 1998–99 · 67Dikembe Mutombo · ATL · 1998–99 · 68Shaquille O'Neal · LAL · 1998–99 · 77Shaquille O'Neal · LAL · 1998–99 · shaq_factor 77SO99Elton Brand · CHI · 1999–00 · 64Dikembe Mutombo · ATL · 1999–00 · 64Shaquille O'Neal · LAL · 1999–00 · 77Shaquille O'Neal · LAL · 1999–00 · shaq_factor 77SO00Bo Outlaw · ORL · 2000–01 · 62Jahidi White · WAS · 2000–01 · 65Shaquille O'Neal · LAL · 2000–01 · 79Shaquille O'Neal · LAL · 2000–01 · shaq_factor 79SO01Tim Duncan · SAS · 2001–02 · 63Elton Brand · LAC · 2001–02 · 65Shaquille O'Neal · LAL · 2001–02 · 77Shaquille O'Neal · LAL · 2001–02 · shaq_factor 77SO02Tim Duncan · SAS · 2002–03 · 63Amar'e Stoudemire · PHX · 2002–03 · 65Shaquille O'Neal · LAL · 2002–03 · 77Shaquille O'Neal · LAL · 2002–03 · shaq_factor 77SO03Amar'e Stoudemire · PHX · 2003–04 · 65Erick Dampier · GSW · 2003–04 · 66Shaquille O'Neal · LAL · 2003–04 · 76Shaquille O'Neal · LAL · 2003–04 · shaq_factor 76SO04Amar'e Stoudemire · PHX · 2004–05 · 68Danny Fortson · SEA · 2004–05 · 68Shaquille O'Neal · MIA · 2004–05 · 77Shaquille O'Neal · MIA · 2004–05 · shaq_factor 77SO05Eddy Curry · NYK · 2005–06 · 70Dwight Howard · ORL · 2005–06 · 70Shaquille O'Neal · MIA · 2005–06 · 73Shaquille O'Neal · MIA · 2005–06 · shaq_factor 73SO06Shaquille O'Neal · MIA · 2006–07 · 70Eddy Curry · NYK · 2006–07 · 72Dwight Howard · ORL · 2006–07 · 74Dwight Howard · ORL · 2006–07 · shaq_factor 74DH07Amar'e Stoudemire · PHX · 2007–08 · 66Tyson Chandler · NOH · 2007–08 · 67Dwight Howard · ORL · 2007–08 · 77Dwight Howard · ORL · 2007–08 · shaq_factor 77DH08Andris Biedrins · GSW · 2008–09 · 65Shaquille O'Neal · PHX · 2008–09 · 69Dwight Howard · ORL · 2008–09 · 77Dwight Howard · ORL · 2008–09 · shaq_factor 77DH09Tyson Chandler · CHA · 2009–10 · 64Amar'e Stoudemire · PHX · 2009–10 · 65Dwight Howard · ORL · 2009–10 · 76Dwight Howard · ORL · 2009–10 · shaq_factor 76DH10Shaquille O'Neal · BOS · 2010–11 · 69Blake Griffin · LAC · 2010–11 · 71Dwight Howard · ORL · 2010–11 · 79Dwight Howard · ORL · 2010–11 · shaq_factor 79DH11DeMarcus Cousins · SAC · 2011–12 · 69Tyson Chandler · NYK · 2011–12 · 73Dwight Howard · ORL · 2011–12 · 78Dwight Howard · ORL · 2011–12 · shaq_factor 78DH12Tyson Chandler · NYK · 2012–13 · 69Nikola Pekovic · MIN · 2012–13 · 69Dwight Howard · LAL · 2012–13 · 77Dwight Howard · LAL · 2012–13 · shaq_factor 77DH13Andre Drummond · DET · 2013–14 · 78DeMarcus Cousins · SAC · 2013–14 · 78Dwight Howard · HOU · 2013–14 · 85Dwight Howard · HOU · 2013–14 · shaq_factor 85DH14DeMarcus Cousins · SAC · 2014–15 · 80DeAndre Jordan · LAC · 2014–15 · 81Dwight Howard · HOU · 2014–15 · 83Dwight Howard · HOU · 2014–15 · shaq_factor 83DH15Dwight Howard · HOU · 2015–16 · 81Andre Drummond · DET · 2015–16 · 82DeAndre Jordan · LAC · 2015–16 · 83DeAndre Jordan · LAC · 2015–16 · shaq_factor 83DJ16DeAndre Jordan · LAC · 2016–17 · 78Dwight Howard · ATL · 2016–17 · 78Rudy Gobert · UTA · 2016–17 · 80Rudy Gobert · UTA · 2016–17 · shaq_factor 80RG17Steven Adams · OKC · 2017–18 · 77Andre Drummond · DET · 2017–18 · 78Dwight Howard · CHA · 2017–18 · 79Dwight Howard · CHA · 2017–18 · shaq_factor 79DH18Andre Drummond · DET · 2018–19 · 80Rudy Gobert · UTA · 2018–19 · 82Giannis Antetokounmpo · MIL · 2018–19 · 83Giannis Antetokounmpo · MIL · 2018–19 · shaq_factor 83GA19Montrezl Harrell · LAC · 2019–20 · 75Rudy Gobert · UTA · 2019–20 · 81Giannis Antetokounmpo · MIL · 2019–20 · 81Giannis Antetokounmpo · MIL · 2019–20 · shaq_factor 81GA20Giannis Antetokounmpo · MIL · 2020–21 · 77Rudy Gobert · UTA · 2020–21 · 78Zion Williamson · NOP · 2020–21 · 85Zion Williamson · NOP · 2020–21 · shaq_factor 85ZW21Jarrett Allen · CLE · 2021–22 · 74Giannis Antetokounmpo · MIL · 2021–22 · 77Rudy Gobert · UTA · 2021–22 · 82Rudy Gobert · UTA · 2021–22 · shaq_factor 82RG22Rudy Gobert · MIN · 2022–23 · 76Anthony Davis · LAL · 2022–23 · 76Giannis Antetokounmpo · MIL · 2022–23 · 81Giannis Antetokounmpo · MIL · 2022–23 · shaq_factor 81GA23Zion Williamson · NOP · 2023–24 · 76Rudy Gobert · MIN · 2023–24 · 77Giannis Antetokounmpo · MIL · 2023–24 · 81Giannis Antetokounmpo · MIL · 2023–24 · shaq_factor 81GA24Ivica Zubac · LAC · 2024–25 · 73Giannis Antetokounmpo · MIL · 2024–25 · 78Zion Williamson · NOP · 2024–25 · 81Zion Williamson · NOP · 2024–25 · shaq_factor 81ZW25Shaq held #1, ten straightDwight held #1, nine moreEveryone gets a turn● #1   ● #2   · #3   — season mean
Top three shaq_factor entries per season, dots colored by team. The faint horizontal tick is that season’s qualifying-player mean. Hover to identify the player.
Section IV — Read the formula

Read the formula

shaq_factor is a composite of four z-scored components, blended at 0.25 / 0.20 / 0.30 / 0.25 weights and squashed through a sigmoid into a 0–100 scale. The component identities:

  • shot diet
    When this player shoots, what shape are those shots? A weighted blend of rim and paint-non-restricted-area frequency, with rim attempts carrying a 1.25× premium over hooks and post-up jumpers. Dunks are layered on as a small additional signal.
    weighted_interior_freq = 1.25 × rim_freq + 1.00 × paint_freq
    
    shot_diet_z = 0.75 × (weighted_interior_freq − 0.50) / 0.20
                + 0.10 × (dunk_rate              − 0.10) / 0.10
  • interior volume
    Not just rate, but absolute volume. A high-frequency rim diet on six attempts a game is one thing; the same diet on eighteen attempts is Shaq territory. Anchored to 8 weighted interior attempts/game = league mean rotation big.
    weighted_interior_apg = weighted_interior_freq × fga_per_game
    
    interior_volume_z = (weighted_interior_apg − 8.0) / 4.0
  • fouls drawn
    Free throw drawing rate (FTA per FGA + FTA correction) and per-game free throw volume, in a 60/40 blend. Drawing fouls in the paint is the mechanical signature of physical inevitability — demonstrating when defenders have run out of legal options3.
    ft_drawing_rate = fta / (fga + 0.44 × fta)
    
    foul_z = 0.60 × (ft_drawing_rate − 0.30) / 0.15
           + 0.40 × (fta_per_game    − 5.0)  / 3.0
  • finishing
    Field goal percentage, offensive rebounds per game, and offensive charges drawn per 36 minutes. The chaos that happens after the move: the ball goes in, the rebound comes back, the defender flops.
    finish_z = 0.35 × (fg_pct              − 0.50) / 0.10
             + 0.45 × (oreb_per_game       − 2.5)  / 1.5
             + 0.20 × (off_charges_per_36  − 0.10) / 0.05

Notable absences: there is no stretch penalty. A center who shoots threes is not less Shaq-shaped on the possessions where they do go down to the block; they’re just doing fewer of those possessions. The volume signal captures that naturally. Jokić landing in the high 70s while still often spotting up on the perimeter is a feature, not a bug.

Weight is also not a signal. We are deliberately not rewarding players for being heavy. An undersized energy big who lives at the rim and draws contact (Kenneth Faried, Jonas Valančiūnas off the bench) should land high. A 7′2″, 240-pound center4 who plays outside-in should not.

Coverage starts at 1996–97. The composite is shot-events derived; pre-1997 player-seasons have no shot location data, so shaq_factor renders as “—” rather than a guess, per the Institute’s standing policy.

composite

Weighted blend of the four z-scores, then squashed through a sigmoid to a 0–100 scale. Weights sum to 1.0; the sigmoid steepness k = 0.8 keeps elite seasons in the 80s–90s without saturation.

shaq_z = 0.25 × shot_diet_z + 0.20 × interior_volume_z
       + 0.30 × foul_z      + 0.25 × finish_z

base = 100 / (1 + exp(−0.8 × shaq_z))
tracking bonus · 2013-14 +

When league-tracked paint and post touches are available, a smooth-gated additive bonus credits players who actually operate in those zones. This separates high-volume rim-runners from genuine low-block operators. Pre-tracking seasons skip this enhancement, and use base alone.

rim_factor = smooth ramp on weighted_interior_freq
             0  at 0.50    →    1.0  at 0.80

paint_bonus = max(0, paint_touches_per_game − 5.0) × 0.8
post_bonus  = max(0, post_touches_per_game  − 1.5) × 0.6

interior_bonus = min(8, (paint_bonus + post_bonus) × rim_factor)

shaq_factor = clamp(base + interior_bonus, 0, 100)

Footnotes

  1. With apologies to Chris Dudley.

  2. Setting aside when he was rehabbing on company time.

  3. There is likely some noise around this stat with bigs who were catastrophically poor free throw shooters, but also — what’s more Shaq than going 0 for 2 but going back into the post on the next possession anyway?

  4. Also not factored in — whether or not the player is Latvian.