A New Look at Aging Curves for NHL Skaters (part 1)

How do NHL players age? When do they peak? How quickly do they decline? Questions about player aging in the NHL have been debated for years, and an incredible amount of research has already been done trying to answer these questions. Within the past 3 years, however, it seems a general consensus has been reached. Rob Vollman summarizes this quite well in his book Stat Shot: The Ultimate Guide to Hockey Analytics: “Most players hit their peak age by age 24 or 25 then decline gradually until age 30, at which point their performance can begin to tumble more noticeably with the risk of absolute collapse by age 34 or 35.”

The vast majority of this work has been done looking at points, goals, shot attempts, special teams, etc., but the release of Dawson Sprigings’ WAR (Wins Above Replacement) model gives us a new statistic from which we can derive value and, possibly, a new way to look at how NHL skaters age. It seems only natural that we’d revisit the NHL player aging question using this new model. If you’re unfamiliar with his WAR model, you can read all about it here.

The most common approach to determine how the average player ages is generally done through constructing an “aging curve” that shows how player performance changes from one age to the next. Most aging curves are constructed using the delta method, which appears to have been originally proposed by Tom Tango here. This shows the average change in any given variable (WAR in our case) from age to age and “chains” that average change together to get an aging curve. This is the basic description.

The simplest way to approach this is by taking each player’s respective change year-over-year in Overall WAR, totaling that change for each “age bucket” (18-19, 25-26, etc.), and then calculating the average for each age bucket. We can convert the average change per age into a cumulative change and adjust the peak to 0 – this is how we visualize the aging curve.

Basic Chart

Here is the cumulative difference represented in graphical form. I’ve used the “Year II” age for the age label (the average change from 22-23 is labeled as 23, for instance):

WAR Basic chart

Initially, it looks like the average NHL skater “peaks” at 23. However, since the change between ages 22 and 25 is minimal, it might be better to say the average NHL skater plateaus from age 22 to 25. Personally, I feel that “peak age” (from a delta method perspective) is rather misleading and something of a misnomer, but I digress… This is about as basic an age curve as we can construct using the delta method. Before I continue I need to address a few things about the sample we’re working with and what that says about the players we’re measuring. Here are some notes; feel free to skip ahead if you don’t want to read the wall of asterisks I’m about to present.

  • The data comes directly from the data Sprigings made available here. His model includes only the top 390 forwards and 210 defensemen in total TOI for each season. This attempts to represent 13 forwards and 7 defensemen from each team for each season. I will refer to this group as “qualified” players.
  • The age of a player for each season was determined based on whether that player played the majority of a certain season at a certain age (Feb. 1st was used as the cutoff). For example: Jagr’s birthday is 2/15/72 – in this analysis, he played the majority of the ’15-16 season as a 43 year old (and god bless him for that).
  • Only player data from 2008-2016 is available. Goalies are not currently included in this WAR model, so this aging curve will deal only with skaters.
  • I prorated the 2012-2013 lockout season. Every aspect (TOI and each WAR component) was multiplied by 1.70833 (82 / 48) for each player. This results in a total WAR per component that appears to be in line with the other seasons (seen here):

Count of Seasons

  • Only players with at least two continuous/back-to-back seasons can be included in a delta analysis.
  • A player who missed a season but had at least two continuous qualified seasons is still measured, but two delta samples will be missing for that player. For instance, Zach Parise has 7 seasons of WAR data. He did not qualify for the ‘10-11 season because of injury. His change from ’09-10 and ’10-11 (ages 25 to 26 and 26 to 27) cannot be measured – I attempted to adjust for this, but it… um didn’t work.
  • Since we’re only able to measure players who have at least two continuous qualified seasons, I would consider the proceeding age curve to represent how “NHL regulars” age. For example, Jordan Schroeder played 4 seasons through the end of 2016, but the only season that qualified was his ’12-13 season. Therefore, his data (and the data of many other fringe/bubble players) is not included in this analysis.
  • There are 4655 player-seasons in the data. The delta method shown above yielded 3249 samples (measurable changes from “Year I” to “Year II”).

Now that we’ve gotten through all of that, let’s get back to improving our initial delta approach. Almost every publicly available aging curve analysis of NHL players – mainly Hawerchuk’s often cited article and the many articles Eric Tulsky wrote about NHL player aging (here, here, here, here, here, and here) – do not lay out the methodology used. So, as with so many things, let’s look at how baseball did it.

Note: from here to the next section, I am going to explore several alternate ways to construct the aging curve. This gets rather detailed. If you like you can skip to the “Positions” section. 

Tom Tango’s work “Forecasting Pitchers – Adjacent Seasons” (found here) is frequently cited by Tulsky, but I’ve found Mitchel Lichtman’s 2-part series for The Hardball Times “How do baseball players age?” (part 1 and part 2) to be a little easier to adapt for what we’re trying to do with hockey WAR. In this series, Lichtman very clearly lays out his methodology for calculating the average aging curve of an MLB player and addresses several problems with the Delta Method (which I will talk more about in part 2). These are essentially the same issues that Tango found with the delta method in the “Forecasting Pitchers” article.

To start, Lichtman converts his measured variable (in his case, baseball’s “linear weights” metric) into “change per 500 plate appearances” and uses a plate appearance weighted average to calculate the average change from age to age. This method can be applied to hockey fairly easily by changing “500 PA” to the league average TOI for each position (1272 minutes for defensemen and 1020 minutes for forwards – average TOI of all players in the WAR data). I’m using the respective TOI averages for defensemen and forwards, which I think is warranted given that baseball does not have the type of discrepancy in PA’s that we see in TOI between positions.

To demonstrate how I adapted Lichtman’s method for hockey, here’s what Ovechkin looks like:


From age 29 to 30, to pick one delta sample, his overall WAR increased from 3.08 to 3.34 – a raw change of +.26 WAR. This “raw” change is what was averaged among all player ages in the first iteration shown above. To convert the “raw change” into “change per avg TOI” we will simply use his average TOI from the two seasons being measured (’14-15 / ’15-16) and employ the standard “per 60” formula replacing 60 with the average position TOI:

(.26 / 1511.43) x 1020 = .18

I did this for every delta sample and then averaged that change for each age bucket to come up with a basic rate version. Lichtman took this a step further and weighted this average using each players’ average PAs (TOI) from the 2 years measured – essentially giving more weight to players who played more. Surprisingly, both of these methods arrive at very similar aging curves in comparison to the “raw” aging curve that we calculated earlier. Below, you can see the simple average of the “change per avg TOI” (“Rate dWAR”) and my adaptation of the delta method used by Lichtman (“TOI Weighted Rate dWAR”):

3 Version Chart

And here are the two different rate averages laid over the above “raw change” numbers from earlier:

WAR 3 Versions charts

It would seem that converting the average change into a “per TOI” figure would require a different scale, but since we’re using the average TOI of the sample (only qualified players’ average TOI), both rate change versions end up being about the same as the raw change version. Because of this, I feel using the “raw” delta method is our best approach given the sample. It is also less confusing and is better suited for practical application. If we had WAR data for all players (no TOI threshold), this would almost certainly not be the case. For instance: a player played 1600 minutes and posted 2 WAR in one season and played 100 minutes and posted -.1 WAR in the next. This would probably require a much more in-depth investigation, and the “rate” version(s) might handle that better. Fortunately (or unfortunately) for us, we do not have this problem.


Now that I’ve laid out the methods for determining an initial Overall WAR aging curve (and identified which one I prefer), let’s separate the forwards and defensemen. Here are the numbers using the “raw” change delta approach (the original method we used at the beginning):

Screen Shot 2017-03-23 at 2.39.26 AM

And here is a graph of those numbers:

Overall WAR F_D

Look at those forwards! That curve is so smooth! Oh, the defensemen you ask? Don’t worry about that, we need not concern ourselves…

The breakout of positions using Overall WAR definitely raises some questions. First, what is going on with the defensemen? Breaking out F/D leaves us with some pretty slim totals (mainly for the younger and older players), and there are almost certainly selective sampling issues going on here. This is one of the issues with the delta method – the players on the edges are not truly representative of an actual “average” NHL player at that age. There isn’t much we can do about the younger players here. I’ll get into this more in part 2 when we look at correcting for survivorship bias, so right now I hesitate to state defensemen “peak” at 22. This initial analysis says defensemen basically plateau from ages 19 to 24 and decline steadily after that. Moneypuck’s analysis of WAR-On-Ice’s WAR (found here) appears to line up with that assessment, but our sample is severely limited (the delta method yielded only 20 defensemen aged 18-20). I’m not sure we can trust the data for the young defensemen, and as you will see in part 2, I don’t know if we will actually be able to correct for this. With that said, I think we need to break down Overall WAR into its components and see what that tells us.

Component Aging Curves

Sprigings’ WAR model is comprised of six components: EV offense, EV defense, PP offense, Taking Penalties, Drawing Penalties, and Faceoffs. Using the delta method to look at how the average player ages for each component might shed some more light on our initial Overall WAR aging curve, and as an added bonus, I don’t think anyone has done an age curve analysis for individual player penalty numbers or faceoffs, so we get a nice look at those too!

Below are the numbers and graphs for each component using the “raw” change method. I kept the scale for each graph the same (except faceoffs).

Even-Strength Offense:


Even-Strength Defense:


Powerplay Offense:


Taking Penalties (Age 39 for the defensemen was removed as the 6 players had an average increase of .47 WAR, which I deemed an outlier):


Drawing Penalties:


Faceoffs (note scale):


Okay, that’s a lot of information. First question: do we still think measuring the average NHL player’s aging curve using Overall WAR is “correct” given what we’ve seen now? I’m not sure. It appears the drawing penalties component has very little correlation with player age year-over-year, and the taking penalties component seems to suggest that players age in an opposite manner when compared to the EV components (and Overall WAR)… but the upward trend in the 30+ age range could be a result of the sample. To be honest, I’m not really sure what to make of this. Regardless, the results are very interesting. As has been demonstrated (by Tulsky and further explored by Travis Yost), taking and drawing penalties appears to be a repeatable skill. However, I feel it is difficult to conclude based on these results that taking or drawing penalties is an aspect of the game players really get better or worse at as they age. I might suggest that some players are just naturally good or bad at taking/drawing penalties in comparison to the average NHL player, but there is clearly still work to be done here.

It seems that including the special teams components of WAR in our aging curve might not be the best approach to determine the ideal average NHL skater aging curve. I have a feeling that some combination of the components that correlate better with player age might be better suited for this task. However, first we need to address the glaring issue of survivorship bias. In part 2, I will attempt to correct for survivorship bias, determine the combination of the WAR components that best represent how the average NHL skater ages, and offer some final remarks and a very long list of references of past work and further reading.

3 thoughts on “A New Look at Aging Curves for NHL Skaters (part 1)

  1. For the taking penalties graph: Is it possible we are seeing the upward trend for older players due to changes in officiating trends & rules over the years? Another factor to consider is physical deterioration. Some players lose their speed & mobility and will use the stick to compensate, which would result in taking more slashing & tripping penalties.

    • It seems the “opposite” aging curve for taking penalties makes sense – in theory, the average player takes more penalties until they “level-off” … at which point they start improving. But given the sample I’m not sure we can draw any conclusions at this point.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s