Estimating Team Goals For and Against Rates

In my last post, I outlined a model that can predict regular season point percentage based on team goals for and goals against rates.  We were able to use it to see which teams have performed better or worse than the model for the current season, which provided some insight on which teams are likely to heat up or cool off down the stretch.   The main limitation of the model, however, is that is needs a sufficient amount of data from the current season to make these assessments.

I would like improve the predictive value of the model and it’s ability to understand which players bring the most value to a team in the salary cap era.  Eventually, I would like the model to use forecasted individual player statistics to predict team performance.  This would allow us to use the model to predict regular season point percentages from the start of the season when we have no team data for the current season.  It would also allow us to predict the effect of individual players on team performance. This could mean predicting the impact of trades or free agent signing, the impact of injuries, or assess areas where struggling teams need to focus their attention to re-build.

Today, we take the next step in building out the model and look at the how contributions to goals for and goals against rates from individual skaters can be combined to estimate team goal rates.  We want to get a reasonably close estimate of the overall team goal rates that we can use as inputs to the points predictor model.  Once have this in place, we can turn our focus to the individual players statistics.

Let’s start by looking at goals for per 60 minutes (GF/60).  We can find on-ice GF/60 for individual players and we want to combine these stats so that they closely align with the team GF/60 that we used as input to the points predictor model.   The model uses only 5v5 data, so we’ll stick to that again (data from Natural Stat Trick).

We could simply average the GF/60 of all the players on a team and check to see how close it is to the team statistic.  However, there are a couple of obvious challenges with such a simple approach that we should address. We know that each player gets a different amount of ice time and, as such, has a different amount of influence over the team numbers.  Players who play more will have a larger effect on the team.  We also know that players have different roles, the most obvious being the split between forwards and defensemen.  This split also affects the players ice time since defensemen split available ice time with other defensemen, and forwards split their ice time with the other forwards.

We also want to ensure we don’t let outliers due to small sample sizes affect our estimate.  A player who has played only a game or two throughout the full season is probably not worth us trying to include in a forecast. It may even add error to the estimate if we do.  To avoid this, we’ll use the 12 forwards and 6 defensemen who have the most games played (for the season) on each team for our estimate.  This will reflect the team’s typical lineup.

With these considerations in mind, I will use a weighted average to calculate a combined GF/60 among forwards and among defensemen separately.  We’ll then combine those two numbers to get an estimated team GF/60.  We’ll look at the last full 82 game regular season (2018-2019) and compare the estimated numbers to the actual team GF/60 to see if our calculation gets us reasonably close.

To calculate the weighted average, we’ll use the player’s time-on-ice per game played (TOI/GP) out of the total TOI/GP for forwards/defensemen to weight their contribution to GF/60.  We’ll combine the numbers within the forwards and defensemen groups to get the weighted average GF/60 for the two groups. Then we’ll combine them to come up with our estimated team GF/60.  Below is a chart of the results, along with the actual team statistics.

TeamActual GF/60Calculated GF/60% Error GF/60
Anaheim Ducks2.052.060.49%
Arizona Coyotes1.992.021.51%
Boston Bruins2.342.475.56%
Buffalo Sabres2.292.310.87%
Calgary Flames2.872.880.35%
Carolina Hurricanes2.422.451.24%
Chicago Blackhawks2.722.751.10%
Colorado Avalanche2.432.461.23%
Columbus Blue Jackets2.752.791.45%
Dallas Stars2.032.082.46%
Detroit Red Wings2.192.231.83%
Edmonton Oilers2.172.141.38%
Florida Panthers2.452.502.04%
Los Angeles Kings2.072.050.97%
Minnesota Wild2.122.224.72%
Montreal Canadiens2.832.861.06%
Nashville Predators2.522.561.59%
New Jersey Devils2.232.271.79%
New York Islanders2.412.420.41%
New York Rangers2.202.283.64%
Ottawa Senators2.522.530.40%
Philadelphia Flyers2.492.510.80%
Pittsburgh Penguins2.712.761.85%
San Jose Sharks2.882.911.04%
St Louis Blues2.502.520.80%
Tampa Bay Lightning3.163.170.32%
Toronto Maple Leafs3.033.040.33%
Vancouver Canucks2.202.210.45%
Vegas Golden Knights2.592.561.16%
Washington Capitals3.003.020.67%
Winnipeg Jets2.542.511.18%
Average  1.44%
Actual and predicted GF/60 for the 2018-2019 regular season (www.puckluckanalytics.com)

Wow! The average error is less 1.5% and there are only a couple of teams where the error creeps up around 5%.  This looks like it will accurate enough for our needs.

Let’s go through the same process for GA/60.  I expect that we will see similar results.

TeamActual GA/60Calculated GA/60% Error GA/60
Anaheim Ducks2.322.310.43%
Arizona Coyotes2.382.351.26%
Boston Bruins1.911.962.62%
Buffalo Sabres2.752.721.09%
Calgary Flames2.292.290.00%
Carolina Hurricanes2.242.230.45%
Chicago Blackhawks2.742.662.92%
Colorado Avalanche2.382.341.68%
Columbus Blue Jackets2.502.572.80%
Dallas Stars1.982.001.01%
Detroit Red Wings2.642.572.65%
Edmonton Oilers2.652.582.64%
Florida Panthers2.862.891.05%
Los Angeles Kings2.522.414.37%
Minnesota Wild2.342.392.14%
Montreal Canadiens2.452.440.41%
Nashville Predators2.162.233.24%
New Jersey Devils2.822.892.48%
New York Islanders1.891.890.00%
New York Rangers2.612.620.38%
Ottawa Senators3.243.270.93%
Philadelphia Flyers2.872.850.70%
Pittsburgh Penguins2.232.250.90%
San Jose Sharks2.782.831.80%
St Louis Blues2.212.171.81%
Tampa Bay Lightning2.412.441.24%
Toronto Maple Leafs2.502.471.20%
Vancouver Canucks2.652.621.13%
Vegas Golden Knights2.422.472.07%
Washington Capitals2.462.501.63%
Winnipeg Jets2.482.432.02%
Average  1.58%

Good news. We see very small errors in the estimates again.  This further confirms that the estimation process works quite well and it can help us translate individual statistics into team inputs for the points predictor model.

The next step in the process will be building models to predict player on-ice GF/60 and GA/60 from their individual statistics. Make sure you subscribe to follow along.

Leave a Reply

Your email address will not be published. Required fields are marked *

Wordpress Social Share Plugin powered by Ultimatelysocial