u/ocelotanalytics

NHL Aging Curves
▲ 3 r/HockeyStats+1 crossposts

NHL Aging Curves

I built a set of historical aging curves using goals above replacement (GAR) for every skater from 2011-12 through 2025-26. I converted everything to a per-60 rate to take ice time out of the equation, used a season-over-season delta method to control for survivorship bias, and normalized each season to account for league scoring shifts. Then I bucketed forwards by scoring (Elite/Top-6/Middle/Depth) and defensemen by ice time (Elite/Top Pair/Second Pair/Third Pair) so we're comparing guys to their actual peers instead of lumping a fourth-liner in with McDavid.

A few things jumped out. Offense goes first, while defense is stickier and it's what gives depth players most of their value. Franchise players are elite because they manage to maintain their production for longer, while good but not great players tend to fall off a cliff. Some GMs probably could have made use of this yesterday...

You can read the article here - https://open.substack.com/pub/danbrousseau/p/nhl-aging-curves-peak-plateau-and

u/ocelotanalytics — 3 days ago

Working on a model. Early results are promising

Hello everyone,

Over the past while I’ve been working on a model that uses raw NHL API data to compute all my own stats, then feeds the data into an xG model, and finally uses it to generate player ratings/team ratings/fantasy projections/matchup probabilities.

I am continually tinkering with the xG model. As it currently stands I’ve achieved a 0.78 AUC… looking at the other publically available information it seems like I’m getting pretty close to the ceiling of what is possible with our player/puck tracking but that won’t stop me from looking for further improvements.

The player ratings us RAPM and ultimately provide a GAR/xGAR output. Everything else builds off this, including the team strength ratings.

The game prediction engine uses team attack/defence ratings to build a Poisson grid, which is then used to determine win probabilities. It also considers several other factors (rest, travel, strength aware OT resolution) to improve its accuracy. To test the accuracy I’ve benchmarked the outputs against the market and backtests show a positive ROI, so I’m pretty happy with its performance.

Fantasy projections are also a big part of the tool. I use per-60 rates with aging curves and projected games played/ice time to forecast players counting stats. It also includes a VORP calculator to translate the projections into a draft ranking.

I’ve posted a more detailed introduction to the model here - https://open.substack.com/pub/danbrousseau/p/the-ocelot-project

Now that I have the tool in a useable state my plan is to start sharing insights and outputs from the model with the goal of helping out my fellow hockey fans and (hopefully) getting some feedback that will help me further improve the model.

PS - I realize that this is a brand new account. I just created it to avoid doxing my main account.

u/ocelotanalytics — 6 days ago