Friday, October 14, 2011

Adjusting for Zone Starts: Zone Start Adjusted Corsi

In a previous article I discussed zone starts and introduced a new approach to analyzing the effect of zone starts - breaking up performance by each type of ice time: offensive zone the first shift after the faceoff, offensive zone faceoff after a change, after a neutral-zone start, defensive-zone start after an on-the-fly change and the first shift after a defensive-zone faceoff. In this article, I will introduce a metric that adjusts for zone starts and a simplified metric that provides a good rule-of-thumb for you to use when looking at BTN.

Zone Start Adjusted Corsi

The idea is simple: take a player's ice time and use the league average Corsi for each type of start to determine what an average player's Corsi would be with the same ice time. Subtracting that off will give you how much he is above, or below, what the average player would get with his ice time. To see how this works, let's look at the poster child for zone-start adjustment, Manny Malhotra. Here is a chart summarizing Malhotra's time in each start, along with his Corsi numbers:

Manny MalhotraTime (mins)Corsi / 60
Ozone, first shift55.248.913
Ozone, after change170.8-7.376
Neutral Zone340.3-6.524
Dzone, after change142.3-13.073
Dzone, first shift178.7-31.234
All Time887.2-9.265

Here are the league averages for each type of ice time:

League AverageCorsi / 60
Ozone, first shift40.147
Ozone, after change2.818
Neutral Zone0
Dzone, after change-2.818
Dzone, first shift-40.147

Weighting by Malhotra's ice time gives us -5.496, meaning that if someone performing at the league-average level was given Mr. Malhotra's ice time he would have a Corsi of -5.496. To get Manny's Zone Start Adjusted Corsi we subtract that off, in other words add 5.496, to get -3.769.

A Rule of Thumb: Simplified Zone Start Adjusted Corsi

That's all well and good, but it would be nice to have something a little more portable. Even with all the data, I'd like to be able to just pull up BTN and get an idea how to adjust for a guy's Ozone%. To get something simpler, I recorded the Ozone% according to BTN for all of the players with at least 600 minutes of even-strength-goalies-on ice time and ran a regression to get the average adjustment for a given ozone%. Here is a scatter plot of the 508 players. The numbers on the x-axis represent how far off from 50% Ozone%, the y-axis is the size of the adjustment or the negative of what the average player would get with the same ice time:

As you can see, a simplified formula will come very close to the more complicated version above which forces us to look at the individual data. Any differences are based on how much time a player spends in the relatively neutral situations where he is jumping on the ice after a faceoff at either end. The result of this is a simple formula. To adjust for zone starts, multiply how many percentage points the player's Ozone% is from 50% by 0.18 and add or subtract accordingly. In formula, with Ozone% out of 100:

Simplified Zone Start Adjusted Corsi = Corsi/60 - (Ozone% - 50)*0.18

Another way to think about it is to add or subtract 1.8 for every 10 percentage points. So if you gave a guy with even zone starts 60% Ozone starts then we'd expect his Corsi rate to go up 1.8. If you put him in more defensive spots with just a 30% Ozone% then his Corsi will drop about 3.6.


I don't want to clutter it with a 900-row table, so I'll make a table with the top 25 and another with a few players of interest with particularly high or low Ozone%. Here is a google spreadsheet with all the Zone Start Adjusted Corsi stats from 2010-2011.

RankPlayerTeamPosZone Start Adjusted CorsiCorsiTime On Ice
1Kyle WellwoodSJSF22.12522.203462.1
2Torrey MitchellSJSF18.50418.336791.9
3Joe PavelskiSJSF17.30415.9391039
4Ryane CloweSJSF16.57116.7151148.7
5Alexandre PicardMTLD16.53817.308634.4
6Mason RaymondVANF16.51517.695922.3
7Ryan KeslerVANF16.50916.5881135.7
8Brian RafalskiDETD15.30516.0831033.4
9Nikolay ZherdevPHIF15.02914.418653.4
10Justin WilliamsLAKF14.84314.7171043.7
11Evgeni MalkinPITF14.77315.509607.4
12Sean BergenheimTBLF14.65213.625916
13Tim JackmanCGYF14.64516.275726.3
14Viktor StalbergCHIF14.21716.208799.6
15Pavel DatsyukDETF14.03913.3848.1
16Logan CoutureSJSF13.74314.0781133.7
17Alexander SteenSTLF13.72214.481081.5
18Jason DemersSJSD13.68513.5911169.9
19Mikael BacklundCGYF13.37614.034761
20Patrik EliasNJDF13.27513.3061082.2
21Mark LetestuPITF13.26214.613759.6
22Tomas HolmstromDETF12.9113.418840.7
23Chris HigginsVANF12.18311.156790.6
24Brian GiontaMTLF12.0812.1511185.1
25Tyler KennedyPITF11.81312.581996.8

People of interest:

PlayerTeamPosZone Start Adjusted CorsiCorsiTime On Ice
Henrik SedinVANF7.18511.8031235.3
Patrick KaneCHIF10.5213.7381139.9
Marian GaborikNYRF-7.194-4.829882.1
J-P DumontNSHF2.4764.62662.4
Ville LeinoPHIF-3.973-2.1871097.6
Manny MalhotraVANF-3.769-9.265887.2
Blair BettsPHIF-15.221-18.412501.9
Steve OttDALF-4.526-8.3461020.9
Jerred SmithsonNSHF-6.98-10.442965.3
Dave BollandCHIF-1.198-3.2806.3

Please Leave Feedback!

As this is my first effort in coming up with a new statistic, I would love some feedback on this. Does the methodology make sense? Is the Ozone% adjustment of .18 per percentage point pretty close to what you've been doing? Any and all comments appreciated.


  1. Relative Corsi/60 - (50 - Ozone%)*0.18

    You stat is far to team determined IMO.

  2. Do players like the Sedin's get affected the same in a defensive zone faceoff that Malholtra would? I think the answer is no. This stat doesn't take into consideration faceoffs or defensive skill.Sedins moving from 70% to 40% would have a different adjusted value then Cam Janssen moving from 70% to 40%.

    I believe the only way to do it too find each players defensive zone corsi and offensive zone corsi, then you have an idea what a switch would do.

  3. Mac,

    Thanks for the comments.

    My initial methodology was basically just what you're describing. I broke the time up by zone and using each player's Corsi in each zone looked at what their Corsi rate would be if we gave them league average ice time in terms of percentage of time for each type of start.

    The problem with this is that it's subject to sample-size problems. There were a bunch of anomalies, like 3rd and 4th liners with pretty bad Corsis overall near the top of the list for the offensive zone first shiff. It would be taking the weighted average of averages, some of which have pretty small samples. Malhotra, for example, played fewer than 60 minutes if you look only at offensive-zone shifts. His overall numbers could look very skewed based on luck and opponent strength for that time.

    I do think it would be a better way to look at it with much larger samples.

    The stat is definitely too team determined, as evidenced by all the Sharks at the top. This is a problem with Corsi stats in general.

  4. I agree, some players simply don't have enough minutes played to create a reliable adjustment. Maybe the average of the two numbers would be more accurate.

    Relative Corsi/60 - {[(50 - Ozone%)*0.18]+Player's Zone Rate} / 2

    That would make for one long excel formula

  5. You are well on the right track. The super stat would be a similar system to what you did with zone start but also with quality of competition and quality of teammate. How much does quality of competition affect the average players CORSI.

    I would have to think someone like David Legwand would rank very high in one of these superstats.

  6. An interesting approach - what I did was translate BTN Corsi data into counting numbers (multiply by ice time & games played), and regressed against the counting values for Zone Starts, coming up with a regression of 1.1 Corsi Events per Zone Start at either end of the ice.

  7. MacIsaac:

    All in good time. You can see JaredL's previous posts to indicate the problems there are with Quality of Competition - while I think this stat is far from being a catch-all, it's better than raw Corsi or Corsi Rel, imo.

  8. What is the coefficient (i.e. .18) if you do this with Fenwick or with shots alone?