# Total Player Score and Contract Valuation

Photo credit:John E. Sokolowski-USA TODAY Sports
2 years ago
Here’s the thing. There’s a ton of great analytics resources out there. Evolving Hockey, Hockey Viz, and others are producing amazing insight into the NHL that has given us new ways of looking at the players around the league and predicting the success of teams. Their knowledge of hockey, analytics, and programming is beyond what I could ever hope to put together.
The problem for someone like me is that I like to know how the sausage is made, and trying to figure out how they’ve made their sausage hurts my head at time, so I’ve decided to make my own. For better or worse, I decided to embark on the idea of pulling together my own measure that combines the individual contributions of a player with the outcomes of when they are on the ice. I then wanted to take that combined score, and compare it to their contract. A lot of my approach has been drawn from what Dom Luszczyszyn has done with Game Score, which you can read about here. The differences in my version of score, is the separation of on ice play calculations from individual result calculations, and the omission of faceoffs in game score and the inclusion of hits instead, with the intention of finding the means to value defensive play at a higher rate to make the players more comparable to forwards. At this time I haven’t factored goaltenders into this measure, but hope to do so as I refine what I’ve started on.

# What’s included?

Individual Outputs
So the calculation breakdown is fairly simple:
Goals * 0.8
Primary Assists * 0.7
Secondary Assists * 0.5
Penalties Drawn – Penalties Taken * 0.2
Blocked Shots * 0.1
Hits * 0.02
Those results would be added together and divided by games played to produced the individual output component.
Aspects that were in Game Score like individual shots, and face off win/loss would lend itself more to forwards than defensemen so they have been removed. There has been slight adjustment’s compared to Dom’s approach on when it comes to goal valuation, blocked shot valuation, and secondary assists as well, and a modest bump up to penalties drawn/taken as well. Dom’s work was based on valuation created by Matt Cane for a weighted shot model, my shifts in valuation were kept minimal to stay as consistent with this approach as possible.
I also acknowledge that hits are a particularly subjective stat, in how they are recorded, the impact of a hit, and of course the factor that if you are hitting you don’t have control of the puck and that’s a bad thing. Given that even the best teams are going to be playing without the puck 40% of the time, considering actions that could help recover the puck seemed beneficial and worth including, even if requires an additional grain of salt be factored into this.
Most notably, the CF-CA part of Game Score has been excluded from the individual output, and that’s because it’s been given separate consideration as part of the Total Player Score below…
On Ice Play
So trying to balance the individual outputs with the on ice outputs is equally important, especially when trying to quantify the impact of defensemen. Rather than a straight forward CF to CA, I made the decision to put some additional emphasis on high danger shot attempts, and significantly less on the low danger chances. The multiplier for High Danger was based on the league total high danger shot attempts related to medium danger ones. The same is true of low danger in relation to medium danger. Arguably the same could have been achieved by using an existing expected goals value, but the purpose of this stat is to be for simple people like myself to be able to see how the sausage is made, and to do that, I relied on my less nuanced values.
Here’s the calculation:
High Danger Corsi For divided by High Danger Corsi For and Against * 2.89
Medium Danger Corsi For divided by Medium Danger Corsi For and Against
Low Danger Corsi For divided by Low Danger Corsi For and Against * 0.24

The sum of these three values is multiplied by time on ice.
The outputs give an exaggerated version of Corsi, and that’s essentially what I was hoping for out of this. I considered using HDCF exclusively, but decided the weighting approach captured the idea of “the full 60 minutes” better.
Total Player Score
After arriving at the two numbers, they are multiplied by each other to give us the Total Player Score. Here’s an example of the Leafs Total Player Scores at 5v5 through the first 10 games of this season:
 Players TPS On Ice Play Ind. Outputs Auston Matthews 0.612 0.585 0.640 Justin Holl 0.557 0.733 0.380 Mitchell Marner 0.499 0.451 0.548 Travis Boyd 0.425 0.100 0.750 Jake Muzzin 0.407 0.537 0.278 William Nylander 0.379 0.370 0.388 Morgan Rielly 0.359 0.414 0.304 Joe Thornton 0.318 0.448 0.188 John Tavares 0.295 0.349 0.242 TJ Brodie 0.290 0.387 0.192 Zach Hyman 0.289 0.522 0.056 Jimmy Vesey 0.271 0.267 0.274 Alexander Kerfoot 0.193 0.186 0.200 Ilya Mikheyev 0.191 0.196 0.186 Wayne Simmonds 0.180 0.166 0.194 Jason Spezza 0.155 0.094 0.216 Travis Dermott 0.130 0.203 0.058 Zach Bogosian 0.114 0.190 0.038 Alexander Barabanov 0.072 0.035 0.110 Joey Anderson 0.050 0.000 0.100 Pierre Engvall 0.048 0.000 0.095 Mikko Lehtonen 0.012 0.070 -0.045 Adam Brooks 0.010 0.000 0.020 Nicholas Robertson 0.000 0.000 0.000
Matthews being the best amongst the Leafs isn’t really a surprise. And with the season Holl has had, the fact that he’s right up there isn’t really a surprise either. Travis Boyd is an interesting one, as bad things seem to be going on when he’s on the ice, but he’s been very fortunate in his small sample of games to get on the scoresheet.
Looking at the Total Player Score for the 2019-20 season, Auston Matthews favours pretty well around the league at 5v5…
 Player TPS On Ice Play Ind. Output Auston Matthews 0.641 0.663 0.619 Kailer Yamamoto 0.634 0.607 0.661 Jake Guentzel 0.624 0.637 0.611 Evgeni Malkin 0.618 0.639 0.597 Roman Josi 0.618 0.727 0.509 Ryan Ellis 0.611 0.756 0.467 Leon Draisaitl 0.585 0.555 0.614 Charlie McAvoy 0.584 0.725 0.443 Artemi Panarin 0.582 0.545 0.619 Nathan MacKinnon 0.575 0.528 0.621 Connor McDavid 0.567 0.522 0.613 Anthony Mantha 0.561 0.637 0.486 Thomas Chabot 0.559 0.771 0.346 Oliver Bjorkstrand 0.558 0.620 0.496 Brendan Gallagher 0.556 0.608 0.503 Brady Tkachuk 0.553 0.617 0.489 Shea Weber 0.553 0.744 0.361 Ryan Pulock 0.549 0.704 0.395 Mathew Barzal 0.549 0.587 0.510 Bryan Rust 0.546 0.600 0.491
There are no shortage of names that we’d expect to see up there, but there are also names like Yamamoto, Guentzel, and Rust that are products of their linemates as well. If there is a shortcoming that is particularly glaring for me, it’s that I can’t remove Rust from Crosby or Yamamoto from Draisaitl in this, though it’s perhaps worth noting that they have excelled in their passenger roles.

## The Contract Comparison Component

The next piece I wanted to look at with this was taking a look at how the TPS value would directly compare to their salary cap hit. Basically, how good is the player’s pay compared to their contract. The values I used were strictly a comparison of percentiles. Looking at the 2019-20 TPS scores for players who played more than 300 minutes, their percentile was compared to their AAV percentile giving us a Contract value vs. Performance score. Any score close to 0 shows the contract is pretty much right on target value wise, and scores with a high number represent the best value contracts (often entry level contracts of star players), and the lowest values represent the worst contracts in the league (Hi, Loui Eriksson.)
I decided to take that value one step further with a weighted value that adjusted the score based on age, years until free agency, whether they’d be an unrestricted free agent when the deal ended, if they have an over 35+ clause, and if they have a No Trade/No Movement clause.
The values usually end up being nearly identical for RFAs, especially ELC contracts, but the values shift a bit more for unrestricted free agents.
Top Value Contracts
 Player AAV Weighted Contract Value Cale Makar 880,833 0.781 Elias Pettersson 925,000 0.768 Kailer Yamamoto 894,167 0.759 Miro Heiskanen 894,166 0.758 Andrei Svechnikov 925,000 0.723
Worst Value Contracts
 Player AAV Weighted Contract Value Jeff Skinner 9,000,000 -0.681 Marc-Edouard Vlasic 7,000,000 -0.594 Josh Anderson 6,265,000 -0.581 Brendan Smith 4,350,000 -0.523 Loui Eriksson 6,000,000 -0.521
The numbers are being run off of 2019-20 Total Player Scores, and when I switch the TPS Percentiles over to the 2021 season, I’m sure we’ll (sadly) see a redemption story for Josh Anderson.

## The Dashboard

While I can write all I want about what I’ve done to date, perhaps the best way to get feedback on this is to share the work to date with the world. So here is a link to the Tableau Dashboard.
The dashboard includes the percentile of their current cap hit around the league, their TPS percentile for the 2019-20 season. The Total Player Score Report (TPS Report) gives the Total player score, but also shows what is driving that score, either the individual outputs or the on ice play. The contract value shows the weighted contract value first, and the more raw number second. As you can see above for Matthews, his contract is right about where it should be and there isn’t any change between the weighted and raw scores, which is common for RFA aged players.
The player’s stat line is also included as a point of reference as these are the building blocks for the TPS score, as well as some of the most important comparators like expected goals, corsi, and game score.
Lastly there is a second filterable graph that allows you to look at comparisons for the player above, and see some of the trending patterns.

## Next Steps

Hooooo Doggy, there is still work to be done. First and foremost I need to bring goaltenders into the fold on this. I’m currently leaning towards a save percentage model similar to the one used for the On Ice Play approach.
In addition to that, it would be great to bring prospects into the mix in some regard through lite version of this mixed in with NHL equivalencies. Other pieces like establishing a common value of draft picks would also be a goal.
The other piece that I want to work into this is a means to establish who is driving the line a bit better. Take some of the Draisaitl shine off of Kailer Yamamoto, and what not.
Finally the hope is to add a bit of a predictive component for what the player’s cap hit should be, what their trade value is, and based on history what we can predict their future TPS scores to be as well.
In short, there is still plenty of work that needs to be done on this, but for now I’m happy to better understand how the sausage is made.