🏒 NHLForecasts.com
Data-Driven NHL Predictions & Analytics
2026-27 Preseason

What the shot count hides

On January 22, 2026, Edmonton generated 40 unblocked attempts to Pittsburgh's 33 in the five-on-five play captured by our data. A seven-attempt advantage looks substantial on a game chart.

After adjusting for the score, that advantage became an estimated one-attempt deficit.

The observed count stays 40–33. The adjustment estimates how much the game situation contributed to that gap. A team chasing a lead has a different reason to shoot than a team protecting one. Treating those attempts as though they all came in a tied game can give us the wrong impression of the play.

We wanted to know how much that changes our reading of a game—and whether it helps us predict the next one.

Fewer attempts, better average chances

In our verified five-on-five sample from 2025–26, trailing teams generated 44.2 unblocked attempts per 60 minutes. Leading teams generated 37.8, about 14% fewer.

The leading teams' average attempt was better, though: 0.066 expected goals, compared with 0.063 for trailing teams. Their total xG rate was still lower. The extra quality did not fully make up for the missing volume.

Five-on-five state Attempts per 60 xG per 60
Trailing 44.2 2.77
Tied 40.8 2.54
Leading 37.8 2.50

Better teams may simply lead more often. We narrowed the comparison to the same attacking team, against the same opponent, in the same season and ten-minute portion of the game. Both leading and trailing states received equal weight within each comparison.

The quality difference survived. Across the two evaluation seasons, leading-state attempts had about 6% higher modeled scoring probability in this matched sample. The difference was positive in both seasons.

Close-range attempts explained most of it. After setting aside rebounds and our broad rush flag, close attempts made up 15.3% of leading-state shots and 13.7% of trailing-state shots. The leading teams also generated better average chances within that category.

The rush data is less useful. Leading teams had fewer rebound flags, and our stored “rush” flag includes quick shots after faceoffs, hits and other events. Almost a third of those flags followed a faceoff. The event feed does not tell us exactly when possession changed, so we cannot identify this as a counterattack effect.

Shot location helps explain the pattern; the tactical cause remains unresolved.

A matchup has two shot histories

The same caution applies before a game. Looking only at a team's attacking preferences leaves out what its opponent tends to allow.

We split attempts into four categories: rebounds, close range, long range and other. Before each month, we built each team's attacking and conceded profiles from earlier games. Recent observations counted more, and small samples were pulled toward the league average.

Then we asked which profile better predicted the next game's shot mix: the attacking team's, the defending team's, or a blend.

The blend won. It beat either side alone in both evaluation seasons. A simple 50/50 blend performed almost identically to a fitted blend that leaned slightly toward the attacking team.

The improvement was small, but it held up. That gives us a useful starting point for a matchup preview: an estimate of where each side's attempts may come from. It does not tell us which side will win, and a high close-shot share does not necessarily mean a high number of close shots. A team can allow very few attempts while a larger fraction of them come from dangerous areas.

What changes on a game page

The advanced matchup view brings the pregame pieces together: recent five-on-five form, score-adjusted form, and the blended shot-pattern profiles. It shows the sample size and the last observation date. Old or thin samples are marked unavailable.

On completed games, a separate section shows the raw attempt differential, its neutral-score estimate, and attempts above the model's expectation. The last measure also accounts for the teams involved. A strong team can lead the attempt count while still generating less pressure than we would normally expect from it.

For Pittsburgh at Edmonton, the comparison looks like this:

Edmonton's differential Attempts
Observed +7.0
Neutral-score estimate −1.1
Above the full expectation −8.1

The correction does not always change the direction. Against New Jersey on January 6, the Islanders' raw deficit of 24 attempts became an estimated 15.7 after score adjustment. New Jersey still had a large advantage.

Among 2,321 games with sufficient coverage, score adjustment changed the sign of the raw differential in 167—about 7%. Some of those adjusted differences were tiny. The numbers are a way to examine a game, not a confident verdict about which team deserved to win.

Did this improve the win model?

We tested that directly. We replaced recent shot form with score-adjusted form, tested a separate adjustment for xG, and compared both with the same data left unadjusted. The new form calculations and monthly classifier fits used earlier games. Some unchanged inputs use today's stored xG estimates, so this remains a historical comparison.

The most promising variant kept the existing win model's other inputs and replaced only shot form. Across 2,624 games, its Brier score improved from 0.240874 to 0.240626. Lower is better, but the difference was small and uncertain. It improved the first season and slightly worsened the second. Replacing both shot and xG form did worse than the current model.

We are keeping the win model as it is.

That result helps define what these tools are for. Score adjustment made attempt-rate estimates better. Combining attacking and defensive histories made shot-mix estimates better. Neither result established a reliable improvement in predicting the winner.

The next time a trailing team piles up attempts, we can ask a more useful question: how much of that pressure was expected from the situation, and what kinds of chances came with it? The matchup view puts those comparisons beside the forecast, where the distinction is visible.

Data, methods and limits

The research used three regular seasons, with 2023–24 providing warm-up history and 2024–25 plus 2025–26 providing chronological evaluations. Shift checks required five skaters and a goalie on each side. They retained 89.3% of eligible mapped attempts. The matched quality comparison retained 40,000 leading/trailing attempts across 1,897 games, about 40% of eligible attempts in those states. Its conclusions apply to that shared support.

Shot quality came from saved monthly xG scorers trained before each scored month, without score context as an input. The matched difference was +0.00373 xG per attempt, with a 95% week-block interval of [+0.00215, +0.00541]. Matching does not account for every lineup, venue or within-season change, and these intervals condition on the fitted scorers and selected support.

Shot profiles use a 120-day half-life and 100-attempt shrinkage. Score adjustments use separate partially pooled rate models for attempts and xG, fitted before each month. Neutral-score values subtract expected output at the actual score and add expected output if tied. They are retrospective estimates conditional on observed playing time, not literal counts or causal estimates of a game played entirely tied.

The win test retained the existing logistic/gradient-boosting architecture. The direct shot replacement's Brier change was −0.000248, with a 95% paired week-block interval of [−0.001604, +0.001074]. Other existing xG-dependent inputs retain a current-vintage limitation. We have explored these seasons repeatedly; the tests are not pristine prospective validation. No new research feature was promoted into the winner model.

← Back to Articles