If you took a look at our numbers on our team pages, you might have noticed something odd: the "Expected Wins" was almost always much higher than the actual wins. Across the whole NBA, players produced a total of about 1450 wins. Since there are by definition only 1230 wins per season, this seems like a mark against the "WP48" metric, but it wasn't.
The real culprit was position allocation. In order for the position adjustment in the metric to work, any given team's minutes must be allocated equally across all five positions. As David Berri likes to put it, "Somebody has to play center." It turns out that many players had a very beneficial position in the BoxScore Geeks database, and this inflated their wins produced. Take, for example, Giannis Antetokounmpo, who was treated as a pure small forward, and had a very strong looking WP48 of .163. But if you look at the Bucks' depth chart, something starts to pop out at you -- they don't have a lot of minutes listed at "PF". Ersan Illyasova is the first "PF" listed, at 1319 minutes.
But, as David pointed out, somebody had to play power forward. After Parker went down, they ran lots of lineups with Middleton, Antetokounmpo, Dudley, along with a point guard and a center. In those "small ball" lineups, Antetokounmpo was by far the one most likely to play PF. So, after adjusting the Buck's minute allocations, the Giannis' position turned out to be a 3.7 (meaning 70% of his minutes were at PF, and 30% were at SF). And in this case, the position adjustment reduces his WP48 to .106.
After adjusting all of the positions in the database, the expected wins lined up much better with actual wins:
Team | Expected | Actual | Delta |
---|---|---|---|
Atlanta Hawks | 55.2 | 60 | -4.8 |
Boston Celtics | 41.4 | 40 | 1.4 |
Brooklyn Nets | 33.5 | 38 | -4.5 |
Charlotte Hornets | 32.6 | 33 | -0.4 |
Chicago Bulls | 49.0 | 50 | -1.0 |
Cleveland Cavaliers | 52.8 | 53 | -0.2 |
Dallas Mavericks | 48.8 | 50 | -1.2 |
Denver Nuggets | 31.6 | 30 | 1.6 |
Detroit Pistons | 38.2 | 32 | 6.2 |
Golden State Warriors | 67.6 | 67 | 0.6 |
Houston Rockets | 50.0 | 56 | -6.0 |
Indiana Pacers | 41.7 | 38 | 3.7 |
Los Angeles Clippers | 58.3 | 56 | 2.3 |
Los Angeles Lakers | 22.9 | 21 | 1.9 |
Memphis Grizzlies | 49.7 | 55 | -5.3 |
Miami Heat | 33.7 | 37 | -3.3 |
Milwaukee Bucks | 42.2 | 41 | 1.2 |
Minnesota Timberwolves | 17.4 | 16 | 1.4 |
New Orleans Pelicans | 43.0 | 45 | -2.0 |
New York Knicks | 16.1 | 17 | -0.9 |
Oklahoma City Thunder | 46.7 | 45 | 1.7 |
Orlando Magic | 25.5 | 25 | 0.5 |
Philadelphia 76ers | 16.9 | 18 | -1.1 |
Phoenix Suns | 38.6 | 39 | -0.4 |
Portland Trail Blazers | 52.2 | 51 | 1.2 |
Sacramento Kings | 31.1 | 29 | 2.1 |
San Antonio Spurs | 57.6 | 55 | 2.6 |
Toronto Raptors | 49.2 | 49 | 0.2 |
Utah Jazz | 41.2 | 38 | 3.2 |
Washington Wizards | 43.0 | 46 | -3.0 |
Total | 1227.6 | 1230 | -2.4 |
And after this adjustment, the top win producers have changed a little bit, too. Take a visit to the stats pages to check up on how the numbers may have changed.
In the future, I'm going to solve this problem during the regular season using a height algorithm that Dave Berri and Dre came up with. No, this will not guarantee perfect position allocation, but until the NBA provides perfectly granular position data in the box scores (and in an open source format), it will be the best we can do.
Have fun with the numbers!