Beta
Join
← 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 once, under their full-season line.

Section II — The Lopez Arc

The Lopez Arc

Brook Lopez is a fascinating illustration in year-over-year shaq_factor. Across seventeen 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.

30456075’09NJN’13BKN’18LAL’19MIL’26LACleague avgBrook Lopez
Brook Lopez, shaq_factor by season. Dots colored by team; the league-wide qualifying average sits remarkably flat, 41–44, 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.
4060’00’05’10’15’20’256631
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.
4060’00’05’10’15’20’256129
Kevin Love
Minnesota 20-and-15 → Cleveland stretch-4 → Heat & Jazz spot-up specialist. The basketball case for shaq_factor in one career.
4060’00’05’10’15’20’256230
And three counter-trends — non-shaq → shaq
Giannis Antetokounmpo
Skinny project to full-bull MVP. Six seasons of upward pressure on the index, then seven holding in the 70s — the cleanest non-shaq → shaq line on file.
4060’00’05’10’15’20’258049
Nikola Jokić
The soft-touch big who quietly grew into one of the heaviest interior diets in the league. Each of his first two MVP years another tick north.
4060’00’05’10’15’20’256650
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.
4060’00’05’10’15’20’256945
Section III — The Podium

Two Low Block Artists, Then Everybody

shaq_factor was, for eighteen consecutive seasons, the domain of exactly whom you would think. From 1996–97 through 2013–14, the same two men held the #1 slot — Shaquille O’Neal for the first ten, Dwight Howard for the next eight. Beginning 2014–15, however, the index broke into a roll call: DeAndre, Gobert, Randle, 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 · 70Tyrone Hill · CLE · 1996–97 · 70Shaquille O'Neal · LAL · 1996–97 · 77Shaquille O'Neal · LAL · 1996–97 · shaq_factor 77SO ’97Alonzo Mourning · MIA · 1997–98 · 69Jayson Williams · NJN · 1997–98 · 71Shaquille O'Neal · LAL · 1997–98 · 80Shaquille O'Neal · LAL · 1997–98 · shaq_factor 80SO ’98Shawn Kemp · CLE · 1998–99 · 69Dikembe Mutombo · ATL · 1998–99 · 70Shaquille O'Neal · LAL · 1998–99 · 79Shaquille O'Neal · LAL · 1998–99 · shaq_factor 79SO ’99Elton Brand · CHI · 1999–00 · 66Dikembe Mutombo · ATL · 1999–00 · 67Shaquille O'Neal · LAL · 1999–00 · 80Shaquille O'Neal · LAL · 1999–00 · shaq_factor 80SO ’00Bo Outlaw · ORL · 2000–01 · 64Jahidi White · WAS · 2000–01 · 67Shaquille O'Neal · LAL · 2000–01 · 81Shaquille O'Neal · LAL · 2000–01 · shaq_factor 81SO ’01Pau Gasol · MEM · 2001–02 · 66Elton Brand · LAC · 2001–02 · 68Shaquille O'Neal · LAL · 2001–02 · 79Shaquille O'Neal · LAL · 2001–02 · shaq_factor 79SO ’02Elton Brand · LAC · 2002–03 · 66Amar'e Stoudemire · PHX · 2002–03 · 67Shaquille O'Neal · LAL · 2002–03 · 80Shaquille O'Neal · LAL · 2002–03 · shaq_factor 80SO ’03Amar'e Stoudemire · PHX · 2003–04 · 67Erick Dampier · GSW · 2003–04 · 69Shaquille O'Neal · LAL · 2003–04 · 79Shaquille O'Neal · LAL · 2003–04 · shaq_factor 79SO ’04Danny Fortson · SEA · 2004–05 · 69Amar'e Stoudemire · PHX · 2004–05 · 70Shaquille O'Neal · MIA · 2004–05 · 79Shaquille O'Neal · MIA · 2004–05 · shaq_factor 79SO ’05Dwight Howard · ORL · 2005–06 · 72Eddy Curry · NYK · 2005–06 · 72Shaquille O'Neal · MIA · 2005–06 · 76Shaquille O'Neal · MIA · 2005–06 · shaq_factor 76SO ’06Shaquille O'Neal · MIA · 2006–07 · 73Eddy Curry · NYK · 2006–07 · 74Dwight Howard · ORL · 2006–07 · 76Dwight Howard · ORL · 2006–07 · shaq_factor 76DH ’07Shaquille O'Neal · MIA · 2007–08 · 70Tyson Chandler · NOH · 2007–08 · 70Dwight Howard · ORL · 2007–08 · 79Dwight Howard · ORL · 2007–08 · shaq_factor 79DH ’08Andris Biedrins · GSW · 2008–09 · 68Shaquille O'Neal · PHX · 2008–09 · 72Dwight Howard · ORL · 2008–09 · 80Dwight Howard · ORL · 2008–09 · shaq_factor 80DH ’09Marc Gasol · MEM · 2009–10 · 66Amar'e Stoudemire · PHX · 2009–10 · 67Dwight Howard · ORL · 2009–10 · 78Dwight Howard · ORL · 2009–10 · shaq_factor 78DH ’10DeAndre Jordan · LAC · 2010–11 · 69Blake Griffin · LAC · 2010–11 · 71Dwight Howard · ORL · 2010–11 · 79Dwight Howard · ORL · 2010–11 · shaq_factor 79DH ’11DeMarcus Cousins · SAC · 2011–12 · 69Tyson Chandler · NYK · 2011–12 · 73Dwight Howard · ORL · 2011–12 · 79Dwight Howard · ORL · 2011–12 · shaq_factor 79DH ’12Nikola Pekovic · MIN · 2012–13 · 69Tyson Chandler · NYK · 2012–13 · 70Dwight Howard · LAL · 2012–13 · 78Dwight Howard · LAL · 2012–13 · shaq_factor 78DH ’13Andre Drummond · DET · 2013–14 · 73 (+5 tracking)DeAndre Jordan · LAC · 2013–14 · 73 (+4 tracking)Dwight Howard · HOU · 2013–14 · 78 (+8 tracking)Dwight Howard · HOU · 2013–14 · shaq_factor 78 (+8 tracking)DH ’14DeMarcus Cousins · SAC · 2014–15 · 72 (+8 tracking)Dwight Howard · HOU · 2014–15 · 76 (+8 tracking)DeAndre Jordan · LAC · 2014–15 · 77 (+4 tracking)DeAndre Jordan · LAC · 2014–15 · shaq_factor 77 (+4 tracking)DJ ’15Dwight Howard · HOU · 2015–16 · 73 (+8 tracking)Andre Drummond · DET · 2015–16 · 74 (+8 tracking)DeAndre Jordan · LAC · 2015–16 · 79 (+4 tracking)DeAndre Jordan · LAC · 2015–16 · shaq_factor 79 (+4 tracking)DJ ’16Dwight Howard · ATL · 2016–17 · 72 (+7 tracking)DeAndre Jordan · LAC · 2016–17 · 74 (+4 tracking)Rudy Gobert · UTA · 2016–17 · 75 (+5 tracking)Rudy Gobert · UTA · 2016–17 · shaq_factor 75 (+5 tracking)RG ’17Rudy Gobert · UTA · 2017–18 · 72 (+5 tracking)Andre Drummond · DET · 2017–18 · 72 (+7 tracking)Julius Randle · LAL · 2017–18 · 73 (+2 tracking)Julius Randle · LAL · 2017–18 · shaq_factor 73 (+2 tracking)JR ’18Andre Drummond · DET · 2018–19 · 72 (+8 tracking)Rudy Gobert · UTA · 2018–19 · 77 (+6 tracking)Giannis Antetokounmpo · MIL · 2018–19 · 80 (+3 tracking)Giannis Antetokounmpo · MIL · 2018–19 · shaq_factor 80 (+3 tracking)GA ’19Andre Drummond · DET · 2019–20 · 75 (+7 tracking)Rudy Gobert · UTA · 2019–20 · 77 (+5 tracking)Giannis Antetokounmpo · MIL · 2019–20 · 78 (+2 tracking)Giannis Antetokounmpo · MIL · 2019–20 · shaq_factor 78 (+2 tracking)GA ’20Rudy Gobert · UTA · 2020–21 · 73 (+4 tracking)Giannis Antetokounmpo · MIL · 2020–21 · 74 (+3 tracking)Zion Williamson · NOP · 2020–21 · 82 (+4 tracking)Zion Williamson · NOP · 2020–21 · shaq_factor 82 (+4 tracking)ZW ’21Bam Adebayo · MIA · 2021–22 · 69 (+3 tracking)Giannis Antetokounmpo · MIL · 2021–22 · 75 (+3 tracking)Rudy Gobert · UTA · 2021–22 · 77 (+5 tracking)Rudy Gobert · UTA · 2021–22 · shaq_factor 77 (+5 tracking)RG ’22Mason Plumlee · CHA · 2022–23 · 70 (+2 tracking)Rudy Gobert · MIN · 2022–23 · 71 (+5 tracking)Giannis Antetokounmpo · MIL · 2022–23 · 79 (+2 tracking)Giannis Antetokounmpo · MIL · 2022–23 · shaq_factor 79 (+2 tracking)GA ’23Rudy Gobert · MIN · 2023–24 · 73 (+5 tracking)Zion Williamson · NOP · 2023–24 · 75 (+1 tracking)Giannis Antetokounmpo · MIL · 2023–24 · 79 (+2 tracking)Giannis Antetokounmpo · MIL · 2023–24 · shaq_factor 79 (+2 tracking)GA ’24Daniel Gafford · DAL · 2024–25 · 71 (+2 tracking)Giannis Antetokounmpo · MIL · 2024–25 · 76 (+3 tracking)Zion Williamson · NOP · 2024–25 · 80 (+1 tracking)Zion Williamson · NOP · 2024–25 · shaq_factor 80 (+1 tracking)ZW ’25Jalen Duren · DET · 2025–26 · 74 (+6 tracking)Zion Williamson · NOP · 2025–26 · 75 (+1 tracking)Giannis Antetokounmpo · MIL · 2025–26 · 77 (+6 tracking)Giannis Antetokounmpo · MIL · 2025–26 · shaq_factor 77 (+6 tracking)GA ’26Shaq held #1, ten straightDwight held #1, eight 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 options2.
    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 committed 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 mid 60s 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 center3 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 low 80s 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 bonus credits players who actually operate in those zones. This separates high-volume rim-runners from genuine low-block operators. The bonus is shown beside the score as “+N tracking”, not added to it; every season, tracked or not, is ranked on 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 = base    # interior_bonus is shown beside it, not added

Footnotes

  1. With apologies to Chris Dudley. ↩

  2. 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? ↩

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

Sign up to receive information on experiments, features, releases, and other news from the Institute. No spam. Cancel any time.