Best NBA Players of 2016-17

Who were the most productive NBA players of the 2016-17 season? This is an update of a post from 2011, introducing Total Statistical Production for basketball. Total Statistical Production is adapted from the TENDEX system created by the godfather of basketball statistics, Dave Heeren.

Heeren's TENDEX system formed the basis of almost every subsequent attempt at statistical player evaluation in basketball. I read Heeren's Basketball Abstract I don't know how many times in the '80s and '90s. Since then, we've had similar creations, including Dean Oliver's Approximate Value (AV), John Hollinger's Player Efficiency Rating (PER) and Game Score, the NBA's own Efficiency statistic, and David Berri's Win Score and Wins Produced, based on the book The Wages of Wins, by Berri, Martin B. Schmidt, and Stacey L. Brook. The heart of Heeren's work, and most of the others, is that through most of NBA history, an average possession is worth about one point. Let me quote from Heeren:

"The formula works because a ball possession is worth one point on the average. This means that rebounds and steals which acquire possession are valued at one point apiece, an assist which converts an ordinary one-point possession into an easy two-point basket is worth one, and missed shots which result in squandering possession are equivalent to turnovers and are minus-one. Of course, if an offensive rebound follows a missed shot, the team having missed the shot is back where it started — still having the ball without having scored. A minus-one is given to the player who missed the shot and a plus-one to the player who rebounded. The sequence results in zero, as indeed it should because no points are scored."

The problem is that a rebound (+1) is not as valuable as a steal (also +1), and a missed field goal or free throw (both -1) is not as bad as a turnover (-1). Why not? Because only about 70% of missed shots are rebounded by the other team. If a player misses a shot, his team still has a 30% chance of getting the ball. If he commits a turnover, his team's chance of having the ball is 0%. A steal always turns a possession for your opponent into a possession for your team. Getting a steal is the equivalent of forcing the miss and grabbing the rebound.

Heeren is right that an offensive rebound cancels out a missed shot — it's appropriate for those to be equal — but the real value is plus or minus 7/10 of a possession. And he's right that a steal cancels out a turnover, since those are opposite sides of the same coin. But a missed shot doesn't create a turnover — it creates a neutral possession. With that in mind, the formula for Total Statistical Production (TSP) is:

PTS - .5*FTA - FG - .7*FGM + .7*ORB +.3*DRB +.5*AST + STL - TOV + .5*BLK

As in other systems, everything is scaled to points. A missed free throw is a half-point deduction. A successful free-throw is a half-point addition. A successful field goal which gives the other team possession is a full-point deduction, since it ends the possession. Thus, a regular two-point basket gives a player +1: 2 PTS - 1 FG. A missed field goal (which might be rebounded by the shooter's team) is -0.7, while an offensive rebound is +0.7. A defensive rebound is valued at +0.3. In this system, a player must shoot at least 41.2% on two-pointers, 26.0% from the arc, and 50% from the line in order to score positive points as a shooter. Anything below those levels will lower his score.

Take that 41.2% shooter. In 1000 shots, he will score 824 points and miss 588 times. About 412 of those will result in defensive rebounds, so his team loses the ball. But there will also be about 176 offensive rebounds. So that's 824 points and 176 offensive boards. 824 + 176 = 1000. This is a zero-value offensive player, and a zero-value scorer in TSP. Someone can shoot 42% or 43% and get a positive TSP rating from that, but his value will still be very close to zero-level. TSP is compared to zero, not to replacement level, so zero-value is a very poor player. This season only one player (Georges Niang) had negative TSP in more than 45 minutes of game time. Most players with negative scores played fewer than 20 minutes all season.

TSP values assists at half a point, steals as plus-one, and turnovers as minus-one. Blocked shots (on defense) are worth half a point. Fouls, which may be good or bad, are not part of the system. A foul which turns an opponent's breakaway into an in-bound pass, or an easy layup into a pair of free throws, is a good foul. A defensive foul near the end of the game is often helpful, even necessary. Fouls can also be associated with aggressive defense, which we would not wish to punish. I am open to the idea of a small penalty for fouls in the future, but right now I don't see a need. However, as Heeren expressed nearly three decades ago, the league should track offensive fouls separately, since those always result in loss of possession and are equivalent to a turnover. Similarly, flagrant/technical fouls are always negative.

The system is logically consistent. A missed shot (-0.7) and an offensive rebound (+0.7) cancel each other out. A turnover (-1) and a steal (+1) cancel each other out. The missed shot is less harmful (-0.7) than a turnover (-1), because a turnover definitely goes to the other team, but a missed shot creates a loose ball that the shooter's team might get back. A missed shot (-0.7 for the shooting team) and a defensive rebound (+0.3 for the other team) — effectively resulting in a turnover — are worth the same amount (1) as a turnover. The formula is in harmony.

There is one variable with which I am not entirely satisfied: Free Throw Attempts, scored as minus-½. Two successful free throws are worth the same (+1) as a successful field goal. That makes sense. But three successful free throws are worth less (+1.5) than a successful three-pointer (+2). A two-point basket plus a free throw is also worth +1.5. That's not fair. If a player gets fouled while attempting a three-pointer and makes all three shots, that should be the same value as a successful three. If a player drives and gets fouled, but his shot goes in and he makes the free throw, that should be the same value as a successful three. There's a similar problem regarding missed free throws, which are over-penalized.

Since I recognize this problem, why not fix it? Honestly, because I'm not smart enough to see a solution. I could lower the deduction for free throw attempts, say, from 0.5 to 0.4. But now a pair of free throws is worth more (1.2) than a two-point basket. Values with a free throw attempt set at -0.4:


That seems just as bad, and unnecessarily complicated to boot. So why not just penalize missed foul shots, and let successful ones stand? But that would overvalue free throws. Sink them both, and now that's worth twice as much as a two-point field goal, equal to a three-pointer. Besides, a lot of free throws are at the end of the game when the other team is trying to foul, wants you shooting free throws. If you go 1/2, your opponent is happy.

Maybe I'm missing something obvious, and someone better at math than I am can tell me how to correct the formula. Wins Produced estimates the value of a free throw attempt at -0.47, but in the interest of saving some decimal points, I think -0.50 is close enough. For now, I'm willing to live with the fact that free throws are slightly undervalued, and make subjective adjustments for this.

Here's an example of the system in action: Bradley Beal's 2016-17 season. Beal scored 1,779 points. That's +1779. He made 637 field goals (-637) and missed 685 (-480), bringing his score to +662. Remember, a missed shot is -0.7, a two-point field goal is +1.0 (+2 points, -1 possession), and a three-pointer is +2.0 (+3 pts, -1 poss). Beal also shot 342 free throws (-171), so his TSP from shooting is +491. Another way of looking at this is as 414 two-point field goals (+414), 223 three-point field goals (+446), 817 missed field goals (-480), 282 free throws (+141), and 60 missed free throws (-30). So 414 + 446 - 480 + 141 - 30 = 491.

Beal grabbed 53 offensive rebounds (+37) and 186 defensive rebounds (+56), raising his score to +584. Add 267 assists (+133.5) and 21 blocks (+10.5), he's at +728. Finally, give him +83 for his steals and -157 for turnovers: +654. That's the system.

PTS - .5*FTA - FG - .7*FGM + .7*ORB +.3*DRB +.5*AST + STL - TOV + .5*BLK

In the first version of this article, six years ago, I used raw TSP as my preferred rating system. That will provide a good sense of the best players, but it's more accurate if you adjust for game pace, and it has become clear to me that Total Statistical Production Over Replacement (TSPOR) — I pronounce that "tee-spore" — is a better method.

You'll probably want a spreadsheet to calculate TSPOR. (If you don't enjoy math, please just skip down until you see a list of players. This next bit is a little technical.)

Adjusting for game pace is easy. The data is available at, and the math is simple. I use a baseline of 95 possessions per team per game. That's a little low in today's game — it was 96.4 last season — but it's (more or less) historically normal. The actual figure doesn't change where anyone ranks, it's just an effort to keep close to an average game pace. You could use 100 to keep the math simpler, and it wouldn't make much difference. Anyway, multiply the player's TSP times 95 divided by his team's game pace. The Washington Wizards averaged 97.3 possessions per game, so for Beal, it's 654 * (95 / 97.3).

We'll use this method of adjusting for game pace to calculate TSPOR:

[ (TSP/MP * game pace) - (positional value) ] * (MP/100)

First, figure a player's TSP/MP. Continuing to use Bradley Beal as an example, he played 2,684 minutes this season, so his TSP/MP was 0.244. That's just 654 divided by 2,684. Multiplying that by the Wizards' game pace, .244 * (95 / 97.3) = .238.

When I introduced Basketball TSP six years ago, I wrote: "One reason I like TSP is that it doesn't require a positional adjustment ... There's no slant towards big men — centers rate the same as everybody else." Having done more research since then, that's not really true. Centers and power forwards — and in today's game, point guards — accrue more statistics than shooting guards and small forwards. Point guards have always had better stats than two-guards.

The positional value approximates replacement level. There are different ways to handle this, but for this season I used 55% of league-average TSP/MP at that position. Here, the chart below shows each position's average TSP/MP and replacement level value for 2016-17:


Centers and point guards scored a little higher than normal this year, and power forwards a little lower. You could smooth that out by using a three-year or five-year average at each position. But we can plug these numbers into the TSPOR formula:

[ (TSP/MP * game pace) - (positional value) ] * (MP/100)

For Bradley Beal, that looks like this:

[(0.244 * (95 / 97.3)) - 0.091] * (2684/100)

Which becomes:

(.238 - .091) * 26.84

We estimate that a replacement-level shooting guard — a D-League player or a free agent — would average .091 TSP per minute. Beal exceeded that by .147. We multiply .147 by his minutes played (2,684), then divide by 100. Beal's TSPOR for 2016-17 is 3.95.

This system has several advantages over raw TSP. An average possession is worth a little more than one point. A team that plays fast will have more possessions: thus, more opportunities to compile statistics. Those teams aren't any better than teams that play slower. In fact, this season, the 20-62 Brooklyn Nets led the NBA in game pace (101.3). The Utah Jazz had the slowest game pace, 91.6. That's a difference of about 10 possessions per game. Adjusting for this avoids making players on teams like the Nets look better than they are, or players on teams like Utah look worse.

The positional adjustment helps us avoid comparing a player like Beal directly to someone like James Harden or Anthony Davis. While it may be generally true that point guards and centers are more important than shooting guards, there's a reason teams don't use three centers. If you're expecting about .166 TSP/MP from your shooting guard, and .250 TSP/MP from your center, a guard like Beal (.238) is +.072 above average, and just as valuable as a center who produces +.072 above average (.322).

More to the point, your emergency backup at shooting guard will probably produce about .091 TSP/MP, and your third center will probably manage more like .138 TSP/MP. The difference between Beal and his backups is larger than the difference between Miles Turner and his backup.

Raw TSP emphasizes floor time. Obviously that's important, but it underrates great players who miss time. You'd rather have Kevin Durant (0.38 TSP/MP) for half a season than 80 games from Maurice Harkless (0.19 TSP/MP). Under the TSPOR system, a small forward who averages 0.38 TSP/MP for 1,000 minutes will score dramatically better (2.77) than a small forward who averages 0.19 TSP/MP for 2,000 minutes (1.74). A great player can help you win a lot of games even in limited appearances, while an average player is just ... average.

Here are individual TSPOR leaders for the 2016-17 season:

1. Russell Westbrook, OKC — 6.40
2. James Harden, HOU — 6.29
3. Giannis Antetokounmpo, MIL — 6.16
4. LeBron James, CLE — 5.93
5. Karl-Anthony Towns, MIN — 5.84
6. Stephen Curry, GSW — 5.76
7. Kawhi Leonard, SAS — 5.62
8. Jimmy Butler, CHI — 5.40
9. Kevin Durant, GSW — 5.26
10. Isaiah Thomas, BOS — 5.11
11. Anthony Davis, NOP — 4.85
12. Rudy Gobert, UTA — 4.83
13. Chris Paul, LAC — 4.57
14. Nikola Jokic, DEN — 4.52
15. Damian Lillard, POR — 4.32
16. DeAndre Jordan, LAC — 4.30
17. John Wall, WAS — 4.085
18. DeMarcus Cousins, NO/SAC — 4.082
19. Otto Porter, WAS — 4.00
20. Mike Conley, MEM — 3.99

Russell Westbrook and James Harden are fairly close at the top. That's good, I think: it shows that this system produces intuitive results. If they weren't the top two, you'd question the TSPOR methodology — but it works.

Harden was a more efficient shooter. His two-point percentage, three-point percentage, and free-throw percentage were all higher than Westbrook's, though the difference isn't huge. Harden also had 60 more assists than Westbrook.

Westbrook ranks ahead because he pulled in 200 more rebounds than Harden, with more steals and fewer turnovers. By raw TSP, Harden (1003) ranks ahead of Westbrook (977), but he played more minutes, and the Rockets played at a faster pace than the Thunder. Russell Westbrook, who averaged a triple-double, was the TSPOR champion of the 2016-17 season. He would get my MVP vote, though obviously Harden is close.

Why does Giannis Antetokounmpo rate ahead of LeBron James?

James scored more points, 1954-1832. That's +122 points for LeBron. James attempted 85 more shots than Antetokounmpo, but Antetokounmpo shot 81 more free throws. LeBron is ahead as a shooter, +527 to +448. He's also ahead by 212 assists, which is worth an additional +106. That increases his lead to +185. Where does Antetokounmpo catch up? Everywhere else.

Antetokounmpo pulled in 60 more rebounds than James, including 45 more offensive rebounds. He had 39 more steals, 107 more blocks, and 69 fewer turnovers. Add it all together, and Antetokounmpo leads in TSP, 904 to 892. He's the first player in NBA history to finish a regular season in the top 20 in total points, assists, rebounds, steals, and blocks.

Karl-Anthony Towns was the best center this season, ranking comfortably ahead of Anthony Davis and Rudy Gobert. Towns was a much higher-percentage shooter than Davis, 57.6% to 51.7% effective field goal percentage, and 83.2% to 80.2% from the line. Gobert shot 66.2%, but he only scored about half as many points as Towns and Davis. Shooting efficiently is great, but passing up shots doesn't help the team. Gobert and Towns both had over 1,000 rebounds, while Davis had under 900, with the difference coming on offensive boards. Davis had the most steals among the trio, and Gobert the most blocks, but Towns had the most assists. For the total package, he was the best.

Let's talk about Steph Curry and Isaiah Thomas. Curry ranks comfortably ahead, even though Thomas outscored him by 200 points. Actually, Thomas was the third-leading scorer in the NBA, behind only Westbrook and Harden. They rank atop the TSPOR leaderboard; why doesn't Thomas?

The answer is straightforward: rebounds and assists. Westbrook had 1,704 combined rebounds and assists. Harden had 1,565. Compared to Curry (876) and Thomas (654), that's a gigantic difference. Curry and Thomas also committed about half as many turnovers as Westbrook and Harden, about 200 fewer, but that doesn't make up for 870 rebounds and assists.

Curry ranks ahead of Thomas not only because of rebounds and assists, where he has a +222 advantage, but also steals (+73) and blocks (+4), negating Thomas' modest turnovers advantage (-29). Curry was also a slightly more efficient shooter. None of this is intended to slight Thomas; he had a great season and ranks in the top 10.

Kevin Durant led the league in TSP/MP (0.38), ahead of Nikola Jokic (0.37), Chris Paul (0.352), and Westbrook (0.349). Durant played only 62 games and 2,070 minutes, but still ranks 9th in TSPOR.

By raw TSP, the leaders are Harden (1,003), Towns (998), and Westbrook (977), with Curry (910) a distant fourth.

TSP is a retrodictive system, not a predictive one. It is designed to tell us what already happened, not what will. Of course the system has some predictive power — you'd be crazy not to project Harden and Westbrook as top-10 players again next season — but that's not what it's designed for. TSP looks at a game, season, or career, and estimates a player's statistical contributions using a simple formula.

With the NBA Finals underway — and perhaps halfway over — we'll get MVP and award announcements in the comings days. TSPOR helps us examine award worthiness, and with that in mind, here is the TSPOR All-NBA Team for 2016-17:

First Team

Guard: Russell Westbrook
Guard: James Harden
Forward: Giannis Antetokounmpo
Forward: LeBron James
Center: Karl-Anthony Towns

Second Team

Guard: Stephen Curry
Guard: Isaiah Thomas
Forward: Kawhi Leonard
Forward: Jimmy Butler
Center: Anthony Davis

Third Team

Guard: Chris Paul
Guard: Damian Lillard
Forward: Kevin Durant
Forward: Otto Porter
Center: Rudy Gobert

Comments and Conversation

June 6, 2017

Brad Oremland:

21-30: Bradley Beal, Kemba Walker, Hassan Whiteside, Kyrie Irving, Kyle Lowry, Gordon Hayward, Paul George, C.J. McCollum, DeMar DeRozan, Klay Thompson

Leave a Comment

Featured Site