Shot Prop Lab
NHL Shots on Goal Projections for Sunday, October 4, 2026
Expected shots on goal for every skater on tonight's slate, and the chance he clears 1.5, 2.5 and 3.5. Each number starts from the shooter's own attempt rate and accuracy, times the ice time we expect him to get at 5-on-5 and on the power play, then adjusts for the defenders he is likely to face and how well the opponent kills penalties.
5 games, 180 skaters · updated Oct 4, 9:18 AM ET · model shotprops-1.1.0. Projections, not picks: we do not see sportsbook lines.
Most likely to get 3+ shots
- Dylan GuentherUTA @ NYR60% · 3.19
- Alex DeBrincatDET vs WPG59% · 3.14
- Cutter GauthierANA vs FLA58% · 3.10
- Jack EichelVGK @ VAN57% · 3.05
- Kyle ConnorWPG @ DET51% · 2.78
- Clayton KellerUTA @ NYR50% · 2.73
Softest 5v5 matchups
- Chandler StephensonSEA vs CGY+10% · 1.30
- Frederick GaudreauSEA vs CGY+10% · 1.16
- Bobby McMannSEA vs CGY+10% · 2.54
- Jordan EberleSEA vs CGY+9% · 2.09
- Matty BeniersSEA vs CGY+9% · 1.90
- Vince DunnSEA vs CGY+9% · 1.90
Toughest 5v5 matchups
- Liam OhgrenVAN vs VGK−7% · 1.58
- Elias PetterssonVAN vs VGK−7% · 1.85
- Drew O'ConnorVAN vs VGK−7% · 1.64
- Marco RossiVAN vs VGK−7% · 1.53
- Elias PetterssonVAN vs VGK−7% · 0.74
- Brock BoeserVAN vs VGK−7% · 2.04
Every skater, Oct 4
Games: WPG @ DET 1:00 PM ET · UTA @ NYR 6:00 PM ET · FLA @ ANA 8:00 PM ET · CGY @ SEA 8:00 PM ET · VGK @ VAN 9:00 PM ET. Matchup is the 5-on-5 adjustment for the defenders he is expected to face and home ice (+5% = 5% more shots than his usual rate).
| Dylan GuentherF · UTA @ NYR | 3.19 | 81% | 60% | 39% | 18:30PP 3:56 | 9.4 | −3% |
|---|---|---|---|---|---|---|---|
| Alex DeBrincatF · DET vs WPG | 3.14 | 80% | 59% | 38% | 19:33PP 2:45 | 9.0 | −1% |
| Cutter GauthierF · ANA vs FLA | 3.10 | 79% | 58% | 37% | 16:37PP 3:13 | 10.6 | −3% |
| Jack EichelF · VGK @ VAN | 3.05 | 79% | 57% | 36% | 21:04PP 3:32 | 7.8 | +7% |
| Kyle ConnorF · WPG @ DET | 2.78 | 75% | 51% | 31% | 19:29PP 3:15 | 8.5 | −2% |
| Clayton KellerF · UTA @ NYR | 2.73 | 74% | 50% | 30% | 20:07PP 3:51 | 7.8 | −3% |
| Bobby McMannF · SEA vs CGY | 2.54 | 70% | 46% | 26% | 16:55PP 1:47 | 8.0 | +10% |
| Mika ZibanejadF · NYR vs UTA | 2.54 | 70% | 46% | 26% | 20:50PP 3:33 | 6.8 | −3% |
| Nick SchmaltzF · UTA @ NYR | 2.53 | 70% | 46% | 25% | 20:56PP 3:53 | 6.5 | −3% |
| Mitch MarnerF · VGK @ VAN | 2.51 | 70% | 45% | 25% | 21:54PP 3:25 | 6.4 | +7% |
| Sam BennettF · FLA @ ANA | 2.47 | 69% | 44% | 24% | 18:43PP 2:39 | 7.5 | −1% |
| Matt CoronatoF · CGY @ SEA | 2.46 | 69% | 44% | 24% | 17:12PP 2:19 | 7.8 | +7% |
| Leo CarlssonF · ANA vs FLA | 2.46 | 69% | 44% | 24% | 17:49PP 3:08 | 8.2 | −3% |
| Brandon MontourD · SEA vs CGY | 2.44 | 68% | 43% | 24% | 22:23PP 2:19 | 5.8 | +9% |
| Beckett SenneckeF · ANA vs FLA | 2.43 | 68% | 43% | 23% | 17:57PP 3:14 | 7.7 | −3% |
| Pavel DorofeyevF · NYR vs UTA | 2.41 | 68% | 43% | 23% | 16:13PP 3:09 | 8.0 | −1% |
| Carter VerhaegheF · FLA @ ANA | 2.29 | 65% | 40% | 21% | 18:21PP 2:31 | 6.9 | −1% |
| Mark StoneF · VGK @ VAN | 2.26 | 65% | 39% | 20% | 19:52PP 3:28 | 5.4 | +7% |
| Brady TkachukF · FLA @ ANAthin | 2.21 | 63% | 38% | 19% | 13:36PP 1:37 | 9.4 | −0% |
| Matvei GridinF · CGY @ SEA | 2.21 | 63% | 38% | 19% | 17:09PP 2:18 | 6.9 | +7% |
| Tomas HertlF · VGK @ VAN | 2.20 | 63% | 37% | 19% | 14:58PP 3:09 | 6.8 | +7% |
| Alexis LafrenièreF · NYR vs UTA | 2.19 | 63% | 37% | 19% | 19:12PP 3:30 | 6.3 | −2% |
| Viktor ArvidssonF · DET vs WPGthin | 2.19 | 63% | 37% | 19% | 14:14PP 1:15 | 9.3 | −0% |
| Matthew TkachukF · FLA @ ANA | 2.19 | 63% | 37% | 19% | 16:42PP 2:41 | 6.9 | −1% |
| Sam ReinhartF · FLA @ ANA | 2.17 | 62% | 37% | 18% | 19:11PP 2:59 | 5.6 | −1% |
| Logan CooleyF · UTA @ NYR | 2.16 | 62% | 36% | 18% | 19:45PP 3:56 | 6.0 | −3% |
| Lucas RaymondF · DET vs WPG | 2.16 | 62% | 36% | 18% | 18:57PP 2:37 | 6.4 | +0% |
| Jordan EberleF · SEA vs CGY | 2.09 | 60% | 35% | 17% | 17:16PP 2:32 | 6.0 | +9% |
| Mikael BacklundF · CGY @ SEA | 2.08 | 60% | 34% | 17% | 16:53 | 7.2 | +7% |
| Moritz SeiderD · DET vs WPG | 2.04 | 59% | 33% | 16% | 24:56PP 2:50 | 4.7 | +0% |
| Brock BoeserF · VAN vs VGK | 2.04 | 59% | 33% | 16% | 19:23PP 3:28 | 5.9 | −7% |
| Anton LundellF · FLA @ ANA | 2.04 | 59% | 33% | 16% | 17:55PP 2:14 | 6.7 | −1% |
| Jackson LaCombeD · ANA vs FLA | 2.04 | 59% | 33% | 16% | 27:27PP 3:06 | 4.1 | −2% |
| Jared McCannF · SEA vs CGY | 2.01 | 59% | 33% | 15% | 15:25PP 2:53 | 6.1 | +9% |
| Mikael GranlundF · ANA vs FLA | 1.99 | 58% | 32% | 15% | 19:45PP 3:03 | 5.3 | −3% |
| Cole PerfettiF · WPG @ DET | 1.96 | 57% | 31% | 14% | 15:48PP 1:48 | 7.0 | −1% |
| Morgan FrostF · CGY @ SEA | 1.96 | 57% | 31% | 14% | 16:40PP 2:19 | 6.1 | +7% |
| J.T. MillerF · NYR vs UTA | 1.95 | 57% | 31% | 14% | 17:28PP 3:08 | 5.9 | −2% |
| Shea TheodoreD · VGK @ VAN | 1.95 | 57% | 31% | 14% | 24:14PP 1:49 | 4.6 | +7% |
| Alex KillornF · ANA vs FLA | 1.94 | 56% | 31% | 14% | 18:24PP 2:07 | 6.4 | −3% |
| Mark ScheifeleF · WPG @ DET | 1.94 | 56% | 31% | 14% | 20:07PP 3:18 | 5.0 | −2% |
| Mikhail SergachevD · UTA @ NYR | 1.93 | 56% | 31% | 14% | 25:01PP 3:53 | 4.1 | −3% |
| Matty BeniersF · SEA vs CGY | 1.90 | 55% | 30% | 13% | 17:22PP 2:45 | 5.2 | +9% |
| Michael CarconeF · UTA @ NYR | 1.90 | 55% | 30% | 13% | 13:45PP 1:19 | 8.2 | −2% |
| Vince DunnD · SEA vs CGY | 1.90 | 55% | 30% | 13% | 20:36PP 2:22 | 4.5 | +9% |
| William KarlssonF · VGK @ VAN | 1.86 | 54% | 29% | 13% | 17:04 | 6.2 | +7% |
| Elias PetterssonF · VAN vs VGK | 1.85 | 54% | 28% | 13% | 19:43PP 3:27 | 4.9 | −7% |
| Lawson CrouseF · UTA @ NYR | 1.84 | 54% | 28% | 12% | 17:56 | 6.6 | −3% |
| Joel FarabeeF · CGY @ SEA | 1.83 | 54% | 28% | 12% | 16:56PP 1:36 | 6.0 | +7% |
| Rasmus AnderssonD · VGK @ VAN | 1.80 | 53% | 27% | 12% | 20:09 | 5.1 | +7% |
| Josh MorrisseyD · WPG @ DET | 1.79 | 52% | 27% | 12% | 23:23PP 3:10 | 4.2 | −2% |
| Gabriel VilardiF · WPG @ DET | 1.76 | 52% | 26% | 11% | 17:26PP 3:08 | 5.2 | −2% |
| Filip HronekD · VAN vs VGK | 1.73 | 51% | 25% | 11% | 27:12PP 3:09 | 3.7 | −6% |
| Yegor SharangovichF · CGY @ SEA | 1.72 | 50% | 25% | 10% | 15:28 | 6.1 | +6% |
| Andrew CoppF · DET vs WPG | 1.70 | 50% | 25% | 10% | 19:04PP 1:01 | 5.4 | −1% |
| Will CuylleF · NYR vs UTA | 1.69 | 49% | 24% | 10% | 14:54PP 1:06 | 6.8 | −2% |
| Anders LeeF · UTA @ NYRthin | 1.69 | 49% | 24% | 10% | 12:29 | 8.1 | −2% |
| Zayne ParekhD · CGY @ SEA | 1.68 | 49% | 24% | 10% | 20:14PP 2:32 | 4.2 | +6% |
| Drew O'ConnorF · VAN vs VGK | 1.64 | 48% | 23% | 9% | 15:40PP 1:11 | 6.4 | −7% |
| Neal PionkD · WPG @ DET | 1.62 | 48% | 23% | 9% | 22:45PP 1:21 | 4.2 | −2% |
How the projections work
- 1. How often he shoots
- For each strength state (5-on-5, power play, shorthanded, other), we take the shooter's unblocked attempts per 60 minutes and the share of them that hit the net, from every game in roughly the last 14 months. Recent games count more (the weight halves every 8 months), and both numbers are shrunk toward the forward or defenseman average, so a hot week or a short history barely moves them. Missed shots recorded in a rink whose scorers log more misses than the league are scaled down using our arena scorer factors.
- 2. How much he will play
- Projected 5-on-5 time is a weighted average of his last 10 games, with the latest counting most. Power-play time is his share of his team's recent PP minutes times the PP time we expect tonight: the average of his team's recent PP time and the opponent's recent shorthanded time. The lineup is whoever dressed in the team's last game, or the forecast lineup when our matchup forecast has one.
- 3. Who he will face
- Every skater gets a 5-on-5 shot-suppression rating from a ridge regression on line changes (RAPM-style): unblocked attempts against while he is on the ice, adjusted for his teammates, the opponents and home ice, with every rating pulled toward zero. A shooter's matchup factor averages the opposing skaters' ratings, weighted by the minutes he is expected to share with each. Those minutes come from the matchup forecast (which knows the home coach has last change) when it is available; otherwise from each opponent's projected 5-on-5 time.
- 4. Power play and venue
- Power-play shots are scaled by the opponent's shots allowed per 60 while shorthanded, shrunk toward the league rate. Home teams shoot a little more at 5-on-5; the home and road split comes from the same regression.
- 5. From an average to a probability
- Shots in one game spread out more than a simple Poisson count, because ice time and role move from night to night. We use a negative binomial distribution whose extra spread was fit on last season's out-of-sample projections, then read off P(2+), P(3+) and P(4+) shots.
Last fit Oct 4: 1,428 games, 983 skaters rated.
How accurate is it?
Held-out test: Oct 7, 2025 – Apr 16, 2026
Every game in the test season was projected using only data from before that day, the way the live model works. Lineups were the players who dressed; ice time was projected, not known. Shots on goal are the official count (shootout attempts excluded), arena scorer factors came from the previous season, and the spread of the distribution was fit on the previous season. Lower log-loss is better. The live model scored 1.5332 against 1.5441 for a shots-per-game baseline given the same distribution (mean squared error 1.723 vs 1.757). Defender matchup ratings improved on the team-level adjustment by +0.00026 nats per projection (95% interval +0.00001 to +0.00053, resampling whole games); mean squared error 1.724 → 1.723. The gain also showed up in the tuning season. It is a real but very small effect. Even with perfect knowledge of who played against whom, the gain would be 0.0000: ice time and the shooter's own volume dominate.
| Model | Projections | Log-loss | Mean sq. error | Correlation |
|---|---|---|---|---|
| Shots per game, last 12 months | 47,230 | 1.5441 | 1.757 | 0.441 |
| Shooter rate × projected ice time | 47,230 | 1.5352 | 1.730 | 0.455 |
| + opponent team 5v5 and penalty kill | 47,230 | 1.5335 | 1.724 | 0.458 |
| + defender ratings by expected matchup (live model) | 47,230 | 1.5332 | 1.723 | 0.458 |
| Hindsight: actual matchups (upper bound, not usable) | 47,230 | 1.5332 | 1.723 | 0.458 |
Show as a table
| Line | Bin | n | Projected | Observed |
|---|---|---|---|---|
| 2+ SOG | 0–10% | 169 | 7.7% | 9.5% |
| 2+ SOG | 10–20% | 3,633 | 16.6% | 16.2% |
| 2+ SOG | 20–30% | 8,907 | 25.3% | 22.9% |
| 2+ SOG | 30–40% | 9,632 | 34.9% | 32.8% |
| 2+ SOG | 40–50% | 8,016 | 44.8% | 43.5% |
| 2+ SOG | 50–60% | 6,692 | 55.0% | 54.5% |
| 2+ SOG | 60–70% | 5,722 | 64.6% | 64.7% |
| 2+ SOG | 70–80% | 3,375 | 74.5% | 74.8% |
| 2+ SOG | 80–90% | 1,067 | 83.0% | 84.7% |
| 2+ SOG | 90–100% | 17 | 90.9% | 100.0% |
| 3+ SOG | 0–10% | 11,961 | 6.5% | 5.9% |
| 3+ SOG | 10–20% | 13,994 | 14.6% | 13.7% |
| 3+ SOG | 20–30% | 8,264 | 24.6% | 23.8% |
| 3+ SOG | 30–40% | 6,282 | 34.8% | 35.5% |
| 3+ SOG | 40–50% | 3,719 | 44.6% | 44.1% |
| 3+ SOG | 50–60% | 2,071 | 54.7% | 56.7% |
| 3+ SOG | 60–70% | 826 | 63.6% | 66.7% |
| 3+ SOG | 70–80% | 112 | 73.1% | 72.3% |
| 3+ SOG | 80–90% | 1 | 80.2% | 0.0% |
| 4+ SOG | 0–10% | 30,086 | 4.1% | 3.8% |
| 4+ SOG | 10–20% | 9,863 | 14.5% | 14.8% |
| 4+ SOG | 20–30% | 4,442 | 24.3% | 24.4% |
| 4+ SOG | 30–40% | 2,020 | 34.6% | 34.6% |
| 4+ SOG | 40–50% | 695 | 43.7% | 44.7% |
| 4+ SOG | 50–60% | 116 | 53.6% | 57.8% |
| 4+ SOG | 60–70% | 8 | 61.8% | 75.0% |
FAQ
How are NHL shots on goal projections calculated?
Expected SOG = projected ice time at each strength × the shooter's shrunk shots-per-60 at that strength × a matchup factor. The matchup factor comes from the shot-suppression ratings of the opposing skaters he is expected to face at 5-on-5, and from the opponent's penalty kill on the power play. The probabilities come from a negative binomial distribution fit on last season.
Are these betting picks?
No. These are model projections. We do not see sportsbook lines and we do not recommend bets. A 60% projection still misses four times in ten, and the calibration section shows how the probabilities have held up.
How accurate are the projections?
We test the model the way it is used: for every game of a full held-out season, it only sees data from before that day. The methodology section on this page shows the log-loss against a simple shots-per-game baseline and a calibration chart. When we say 40%, it should happen about 40% of the time.
Does the opposing defense pair really matter?
Somewhat, and less than ice time and the shooter's own volume. The page reports how much the matchup factor improves accuracy over a team-level adjustment, and how repeatable the defender ratings are from one half of the games to the other. Most matchup factors land between 0.9 and 1.1.
When do the projections update?
Overnight, after the previous night's games, and again during the day as lineups settle. Players who did not dress in their team's last game are left out until they do, so check confirmed lines before puck drop.
Why is a player I expected missing?
The lineup comes from the team's most recent game (or the matchup forecast when it has one). A player returning from injury or a healthy scratch is not projected until he dresses again.