PuckCast Edge
Betting edges, stake sizing, props priced against the line, fantasy tiers and the graded ledger. $14.99 a month in season, or $99 for the year.
Free resource · Analytics guide
Plain-English definitions of the analytics terms behind PuckCast predictions.
Want deeper explanations? Visit our Guides for full breakdowns of every concept.
The most popular skater prop. PuckCast projects each skater's goals for the game from their shot rate, shooting talent, deployment, power-play unit and the opposing goalie, then converts that into a probability of at least one goal. The props board ranks skaters by that probability and, for members, prices it against the posted line.
AUC is the probability that the model gives a randomly chosen winning team a higher rating than a randomly chosen losing one. It measures discrimination, meaning ordering, and ignores calibration entirely, so a model can have good AUC while systematically over-confident. It is the cleanest single number for asking whether the signal is still there: PuckCast's fell from 0.676 in 2021-22 to 0.583 in 2025-26, which is a decline in the model's ability to tell teams apart rather than a change in how it words its confidence.
season-by-season AUC →A Back-to-Back occurs when a team plays two games on consecutive days. The second game carries a measurable performance penalty: fatigue affects skating, goalie performance, and special teams. PuckCast explicitly adjusts win probability downward for teams playing the second leg of a back-to-back.
The Brier score is the average squared distance between a predicted probability and the outcome, so predicting 0.70 on a game that happens costs (0.70 − 1)² = 0.09. Lower is better. Always guessing 50% scores 0.25, which is the number worth holding any model against. It rewards being right AND being appropriately confident: a model that says 95% and is wrong is punished far harder than one that said 55%. PuckCast's walk-forward Brier is 0.2336, which reads as a genuine but modest edge rather than a large one. Hockey is a high-variance sport and honest probabilities in it sit close to even.
A model is calibrated when its stated probabilities match observed frequencies: of all the games it called 60%, close to 60% should be won. Calibration is separate from accuracy: a model can be well calibrated and barely useful (predict the base rate every time), or sharp and badly calibrated (right about who wins, wrong about how sure it should be). It matters most for betting, where the size of an edge depends on the probability being trustworthy rather than merely directionally right.
PuckCast's calibration curve →CF% is a team's share of all shot attempts while on the ice, and FF% is the same excluding blocked shots. Both are possession proxies: above 50% means a team took more of the attempts than it gave up. PuckCast shows these by strength and colours them against a 50% break-even at even strength only. A 14% CF% on the penalty kill is not a failure, it is what a penalty kill is.
Corsi & Fenwick explained →Closing line value is the difference between the price you took and the price at close. Because the closing line is the market's best estimate with all information in, a bettor who consistently gets a better number than the close is doing something the market is not. PuckCast will report CLV on its edge plays once in-season odds are flowing; it is the one measurement that says whether the model's disagreements with the market are worth money.
PuckCast grades every prediction A, B, or C+ based on how strongly the model's signals align. A-grade games have the clearest model edge, supported by multiple features. C+ grades indicate a lean with less certainty. Use grades to filter for your highest-conviction picks.
Learn more about grades →An accuracy computed from 877 games is not the same claim as one computed from 87. A confidence interval expresses that: it is the range of true rates consistent with what was observed. PuckCast uses Wilson intervals rather than the textbook normal approximation, because the normal one misbehaves near 0 and 1 and on small samples. It can produce a lower bound below zero, which is not a thing a percentage can be. If two bands' intervals overlap heavily, the difference between them is not something to act on.
intervals on every band →Corsi counts every shot attempt a team takes — goals, shots on goal, missed shots, and blocked shots (the shot-on-goal / goal / missed-shot / blocked-shot event tally in src/nhl_prediction/native_ingest.py). It's a possession proxy: teams that outshoot their opponents over a full season tend to win more. When PuckCast references shot differential, Corsi is the foundation.
Corsi & Fenwick explained →Edge is the gap between PuckCast's win probability and the implied probability baked into the betting market's odds. A positive edge means the model thinks a team is more likely to win than the market does. Large edges on A-grade games are the highest-value spots PuckCast surfaces.
How to read NHL odds →Elo is a dynamic team strength rating that updates after every game. Teams gain points for wins and lose points for losses, with the size of the change based on expected vs. actual results. PuckCast's Elo system captures momentum and recent form better than static season stats.
Elo ratings explained →ECE buckets predictions by stated probability, measures the gap between the average prediction and the observed rate inside each bucket, and averages those gaps weighted by how many games each bucket holds. It compresses a whole calibration curve into one number. Small is good, but it is worth reading next to the curve itself: ECE can look healthy while one thinly populated bucket is badly wrong, which is why PuckCast publishes both.
calibration curve →Expected goals for each side, summed. It comes from each team's scoring and suppression rates scaled against the league average goals per game, with the starting goalie in the projection. The lean is which side of a posted line the expected total favours, with a probability, and a lean near 50% is shown as the coin flip it is.
Fenwick is Corsi minus blocked shots: goals, shots on goal, and missed shots only (the shot-on-goal / goal / missed-shot event tally in src/nhl_prediction/native_ingest.py). Because blocked shots are partially controlled by the defending team, Fenwick is sometimes considered a cleaner read on a team's puck possession and zone time. It's also the shot population PuckCast's xG model scores — every Fenwick attempt gets an xG value, blocked shots do not.
Corsi & Fenwick explained →The total is a line on both teams' goals combined. PuckCast's game totals page projects an expected total from each team's offence and defence strength against the league average, then reports the probability of the over at every half-goal line, so you can read the number at the line your book actually posts.
GAx is the difference between the goals a player actually scored and the expected goals of the shots he took. Positive means he finished better than the chances warranted. It is the noisiest number PuckCast publishes at the player level: one season is a small sample, and the shot-map artifact flags the zones where it is unreliable. Those are shown muted with an asterisk rather than hidden, because hiding them would quietly flatter the profile.
Goalie Form is goals saved above expected over a goalie's last 10 games: positive when he has stopped more than the shots he faced were worth, negative when he has been leaky. It drives the goalie pages and projections. The game win probability measures goaltending per team instead, from goals allowed against a league-average goalie on the same shots, so it does not move with one goalie's streak.
Goalie stats explained →GSAx = xGA − GA: sum the trained xG model's per-shot value for every unblocked attempt (Fenwick, including empty-net) a goalie faced, subtract the goals he actually allowed (scripts/generate_goalie_advanced_stats.py). Positive means he stopped more than the shot quality said he should. Unlike GSAA, which treats every shot the same, GSAx accounts for how hard each shot actually was — it separates a goalie from the defence in front of him better than save percentage does, and PuckCast's goalie form pill uses a rolling version of it.
GSAA = (goalie's save % − league-average save %) × shots faced (scripts/starting_six_values.py). It treats every shot as equally hard, so a goalie behind a weak defence facing harder shots gets no credit for that. A positive GSAA means he stopped more than an average goalie would have on the same volume of shots. PuckCast uses it as the goaltending term in the Starting Six ratings; GSAx (below) is the shot-quality-aware version used on the goalie pages.
GSAA deep dive →Head-to-Head tracks how two teams have performed historically in direct matchups. While current-season form matters more, sustained H2H trends (especially in division rivalries) carry signal. PuckCast weights recent head-to-head results as a secondary feature in the model.
PuckCast flags a shot as high-danger when it is within 25 feet of the center of the goal AND within a 45-degree angle of a straight line to the net (src/nhl_prediction/native_ingest.py, _is_high_danger_location) — a wedge in front of the crease. It is tracked as a team count (high-danger shots and high-danger xG, for and against) that feeds the game model alongside full xG. The per-player Finishing Map uses a different, tighter box for its own "slot" and "crease" zones (scripts/generate_shotmaps.py, zone_of) — built to profile where a player scores, not to classify every shot on the ice — so the two share a name but not an edge.
High-danger chances explained →Home Ice Advantage is the well-documented statistical boost that home teams receive: better sleep, no travel fatigue, crowd energy, and last-change line matchup control. PuckCast bakes a calibrated home ice factor into every prediction rather than treating it as a coin flip.
Every moneyline converts to a probability: -150 implies 60%, +150 implies 40%. Across both sides of a game the implied probabilities add to more than 100% because the book charges a margin (the vig). PuckCast removes that margin before comparing the market to the model, so an edge is measured against the fair price, not the padded one.
The Kelly criterion sizes a bet as (edge / odds) so that a bankroll grows fastest over the long run given the true probability. Full Kelly is famously volatile, so every stake on the site is half-Kelly: half the fraction, roughly three-quarters of the growth rate, and far smaller drawdowns. It assumes the model's probability is right; if the model is overconfident, Kelly overbets, which is one reason the ledger tracks flat 1-unit results as well.
The Model Favorite is whichever team PuckCast assigns greater than 50% win probability. It's not always the betting favorite, and when those two disagree, that divergence is often where the sharpest edge lives.
Today's predictions →The moneyline is the simplest hockey market: pick the winner. A negative number is what you risk to win 100; a positive number is what 100 wins. PuckCast's game predictions are moneyline predictions, and the edge board compares the model's win probability to the best moneyline available across books.
PDO is a team's shooting percentage added to its save percentage. League average hovers around 100%, and PDO tends to regress toward that over time. A team with a PDO well above 100% is likely running hot. PuckCast uses PDO as a luck-adjustment signal.
PDO deep dive →Plus-Minus tracks whether a player is on the ice for more goals for or against at even strength. A player with a +10 was on the ice for 10 more even-strength goals for than against. It's a simple but noisy stat: it doesn't account for teammates, opponents, or shot quality.
Plus-minus explained →Starting goalie is the single most predictive input in hockey, and it is usually announced only hours before puck drop. PuckCast projects the starter from rest days, recent usage and back-to-back patterns and shows the likelihood on the goalie pages. The game win probability does not change with the starter: it is built from team-level goaltending, so a surprise backup is not in the number.
The favourite must win by two or more goals; the underdog covers by winning or losing by one. Because so many NHL games end within a goal, the favourite on the puck line usually pays plus money. PuckCast prices the puck line from its projected goal margin, not from the moneyline.
Quality of Competition and Quality of Teammates describe deployment: who a coach sends a player out against, and who he sends out with him. A shutdown defenceman with a poor raw differential may be doing exactly his job against the other team's best line. PuckCast uses these to contextualise on-ice numbers rather than to rate players directly.
Rest Days counts how many days have passed since a team's last game. More rest generally correlates with a slight improvement in performance, particularly for goalies and high-minute defensemen. PuckCast incorporates rest differential as a feature when both teams have notably different schedules.
Save Percentage (SV%) is the fraction of shots a goalie stops. Goals Against Average (GAA) is the average number of goals allowed per 60 minutes. Both are widely used but have limits: they don't account for shot quality or defensive support. PuckCast supplements them with expected-goals metrics for a fuller picture.
Goalie stats explained →A unit is whatever base stake a bettor uses, often 1% of a bankroll. The ledger reports results in units at flat 1-unit stakes at -110 pricing so the record does not depend on anyone's bankroll size. A stake of 1.5u on an edge play means one and a half of that base amount.
Vigorish, or juice, is the book's built-in edge. At -110 on both sides of a coin flip a bettor must win 52.4% of the time just to break even, which is why the ledger states its break-even rate and why an edge has to be larger than the vig before the board calls anything a strong bet.
Win Probability is the model's calibrated estimate that a given team wins in regulation or OT/SO. It's expressed as a percentage and is the single most important output PuckCast produces. Probabilities are calibrated against historical outcomes: a 65% pick wins roughly 65% of the time.
Win probability explained →WOWY compares a player's on-ice results while sharing the ice with a particular teammate against his results without him. It is how you separate a player who drives a line from one who is carried by it. PuckCast publishes 5-on-5 shared time and the xGF% difference for each linemate above a minimum-time floor, because pairs with only a few minutes together produce differences that are noise.
PuckCast's xG is not a fixed formula. It's a gradient-boosted classifier trained on this season's own shot-by-shot outcomes (distance and angle to the net, shot type, strength state, zone, and whether the shot was a rush, a rebound, a deflection, screened, or a one-timer) to predict the probability a given attempt becomes a goal (src/nhl_prediction/native_ingest.py). It's scored for every unblocked shot attempt (Fenwick, including empty-net) and summed for a team or player total. A shot from the slot carries a higher xG than one from the perimeter because the model learned that from real outcomes, not because a zone table says so.
xG deep dive →xGA measures the quality of scoring chances a goalie has faced, independent of whether they stopped them. A goalie posting a low goals-against on a weak-shot diet looks better than the raw numbers suggest. PuckCast uses xGA to separate goalie skill from team defense.
Goalie stats explained →xGF% is the share of total expected goals that belonged to a team while it was on the ice: xGF divided by xGF plus xGA. Above 50% means a team generated better chances than it allowed. It is a quality-weighted cousin of Corsi: where Corsi counts attempts, xGF% weights each one by how dangerous it was. The team figures PuckCast publishes are raw and unadjusted: no score effects, no venue adjustment, no strength of schedule.
xG deep dive →Common Questions
Expected goals (xG) measures shot quality: how many goals a team should have scored based on where shots came from and how dangerous they were. A slot chance counts for more than a shot from the blueline. PuckCast uses xG to evaluate true offensive strength, separate from luck or goaltending.
Corsi is a shot attempt differential metric that counts shots on goal, missed shots, and blocked shots at even strength. Teams with a positive Corsi (more shot attempts than their opponents) tend to possess the puck more and win more games over time. It's one of the foundational possession stats in modern NHL analytics.
PDO is a team's shooting percentage plus its save percentage. The league average is approximately 100%, and PDO regresses toward that mean over a season. Teams running significantly above 100% are often getting lucky. PuckCast uses PDO as a luck-adjustment signal in its predictions.
Fenwick is similar to Corsi but excludes blocked shots, leaving only shots on goal and missed shots. Some analysts prefer Fenwick because blocked shots are partly controlled by the defending team. Like Corsi, a positive Fenwick percentage indicates strong possession and tends to predict future success.
PuckCast assigns every prediction a Confidence Grade of A, B, or C+ based on how strongly the model's signals align. A-grade picks have the clearest edge, backed by multiple features. C+ grades are valid picks with a lesser degree of model conviction. Use grades to filter for your most confident plays.