Vegas Golden Knights
Pacific · 14-8
2025-26 · playoffs
How to read this map
One rink, both ends: what VGK generates on the left, what it concedes on the right. Every attempt is a Gaussian bump of height = its model xG, summed per game. The controls switch the surface (xG heatmap ↔ vs league, the league baseline at the same strength) and the markers: × goal · • on net · ◦ missed · small • blocked.
The page opens at 5v5; empty-net attempts are excluded throughout, and the strength buckets segregate them anyway — which is why the empty-net control greys out unless the view can actually contain one. Everything inside the outlined box moves with the filters; everything below it does not.
Observed production
5v5 · playoffsPercentiles and the gray spread rank against all 32 teams recomputed under the current filter — every bar and band here moves together, so a slice never ranks against a different slice's league.
Rolling xGF%
5v5 · playoffsModel estimates
🔒 full season · 5v5These four are not centred at zero: the league average of each sits well away from it, and the two against columns barely vary between teams, since every team faces roughly average opposition. So the level of a bar is not the signal — its rank is. They are shown because they genuinely move adjusted xGF% below, and folding them into the two own-team rows would have hidden half of that.
How it's built, and what it isn't
How it's builtEvery 5v5 shot is re-scored with
σ(logit(xG) + shooter − goalie) and both ends re-summed. Both skill terms land on
every shot — one team's for side, the other's against side — so the league share still
averages 50%. The two moves are taken in that order and sum exactly to the total;
shares don't decompose additively, so a side-by-side split would not close.
What it isn'tA descriptive re-score of shots already taken, not a forecast. Against future goal share the combined adjustment is indistinguishable from plain xGF% (+0.019 r, p = 0.192); only the shooting half shows a small honest lift (+0.026, p = 0.020), and the saving half contributes nothing forward-looking. The premise underneath is itself unestablished — xGF% over GF% is +0.040, p = 0.246. Read it as what this roster's skill was worth on these shots — nothing more.
The four segments are the four rows above, in order. They are four and not two
because η puts both rating terms on every shot: the shots we took carry
our shooters and the opposing goalie, and the shots we faced carry their shooters
and ours. Over a full season the two “against” terms would sit near league
average and contribute nothing — but the ratings are not centred at zero this
season, so they do move the number, and hiding them inside a single “shots faced”
figure would have left half the adjustment unexplained.
Season context
descriptive · not modeledFull table · all numbers
| Family | Stat | Value (current slice) |
|---|---|---|
| Observed ◆ filtered | Goals for / against | 49 / 45 |
| Observed ◆ filtered | xG for / against | 44.4 / 39.0 |
| Observed ◆ filtered | Shots for / against | 452 / 495 |
| Observed ◆ filtered | Attempts for / against | 985 / 1,112 |
| Modeled 🔒 5v5 | Shooting — our skaters · on our shots | +3.4 G 100th pctl |
| Modeled 🔒 5v5 | Saving — our goalies · on shots faced | +1.1 G 69th pctl |
| Modeled 🔒 5v5 | Shooting against — their skaters · on shots faced | -1.5 G 31st pctl |
| Modeled 🔒 5v5 | Saving against — their goalies · on our shots | -2.1 G 25th pctl |
| Modeled 🔒 5v5 | Unadjusted xGF% | 53.2% |
| Modeled 🔒 5v5 | ↳ shooting shift | +1.85 pp |
| Modeled 🔒 5v5 | ↳ saving against shift | -1.11 pp |
| Modeled 🔒 5v5 | ↳ shooting against shift | -0.94 pp |
| Modeled 🔒 5v5 | ↳ saving shift | +0.66 pp |
| Modeled 🔒 5v5 | Adjusted xGF% | 53.7% 75th pctl |
| Context | Ice time — share by strength | -0.7 |
| Context | Score state — TOI by game state | often tied |
| Context | Goalie workload — starter's share of shots | 100% |
| Context | Schedule strength — opponents' net xG-RAPM | — |
Observed values reflect the active rink filters; modeled values are fixed at their full-season 5v5 fit.
Modeled ratings come from joint__baseline_xg__42ccb89b
(as of 2026-06-14) — a separate surface from the
box-score xG model badged in the footer.