How to Build an NHL Betting Model: The Essential Framework (Tested)
You’re tired of placing bets based on gut feelings or what the talking heads say. You know there has to be a structured, repeatable way to find an edge in hockey betting, but the complexity of building a NHL betting model feels impossible. I completely get that frustration. I’m pulling back the curtain on my 2016-17 spreadsheet model that returned nearly 12% ROI and beat the closing line over 87% of the time. This isn't about copying old code; this is about understanding the winning mindset.
I’m going to walk you through every tab, every formula decision, and every validation step used in that original structure. While the specific numbers have changed since then, the architecture for separating successful analysts from casual bettors remains exactly the same. You’ll walk away with a crystal-clear blueprint for how predictive analysis works.
Here's What We'll Cover
- Why an old, high-ROI model is still the best learning tool
- The core statistical inputs that actually predict hockey wins
- How to accurately estimate team strength when data is sparse
- The critical role of goalie modeling and player adjustments
- The method used to confirm real betting value
Why Reviewing an Old NHL Betting Model Still Matters
People constantly ask how to start sports modeling and what the process looks like from the inside. The answer, frankly, is showing proof of concept. I built this initial NHL betting model using only Excel over a decade ago. It nailed the market distinction between luck and skill back then.
I must be upfront. If you copy this exact spreadsheet today, it won't be profitable. The market is far more efficient now. The edges that existed in 2017 have been priced in by smarter analysts with better tools. However, the foundation—the architectural thinking—is entirely evergreen. Winning in betting isn't about having the newest proprietary data; it's about asking the right questions about data you already possess.
Think of this journey as observing a professional dissecting a problem. We’ll cover the structure, the variables we chose, and how we judged whether the model actually found something real. That's the valuable part for you.
Spreadsheet Organization: Color Coding the Process
The structure of the file itself reflects a clear workflow. I color-coded the main tabs for easy navigation, even though there were 20 other hidden tabs feeding data, like raw inputs for multi-year goalie breakdowns.
Here’s the color scheme I used:
- Blue Tabs: The bedrock. This is where research data and foundational assumptions lived.
- Green Tabs: Team Ratings. This is where we calculated baseline strengths.
- Orange Tabs: Goalie Modeling. Because goalies are massive variables, they required dedicated attention.
- Yellow Tabs: Game Day Adjustments. This accounts for immediate factors like injuries or travel.
- Red Tabs: The output. Where the final picks and projected lines appeared.
- Light Blue Tabs: The results ledger, tracking performance versus expectations.
This organization ensures that every piece of input funnels logically toward the final prediction output. You see the complexity without getting lost in the noise.
Deconstructing the Core Predictive Engine
The first hurdle in building any statistical NHL betting model is identifying what *actually* causes success. Casual fans point to goals scored. And yes, goals win games. But goals are incredibly noisy indicators over a small sample size. One bad bounce can cost you the game even if you completely dominated play.
We needed stats that reliably predicted goal share over the long run. This meant running a regression analysis to map inputs (stats) to the output we cared about (goal share).
Key Variables That Explained 95% of Variance
I tested several variables, but three inputs explained roughly 95% of the variance in goal share across hundreds of historical team seasons. That's an incredibly strong statistical fit.
These were:
1. CF percentage (Corsi For %): This measures shot attempt share. If your team generates 55% of all shot attempts at even strength, your Corsi For is 55%. It acts as a proxy for territorial control and overall pace of play.
2. SH percentage (Shooting %): This is simply what percentage of your team's shots actually go in. This relates directly to finishing talent.
3. SV percentage (Save %): The opposing team's save percentage against you. This is the rate at which goalies stop pucks aimed at your net.
If you can accurately estimate those three numbers for two teams facing each other, you can predict with high confidence which team *should* score more goals over 82 games.
I also tested replacing Corsi with Scoring Chances (SCF %). The fit dropped significantly to about 82.6%. The thing is, we had far more Corsi data points than SCF data points, allowing the Corsi signal to stabilize faster. Corsi became the backbone.
Creating Stable Team Ratings from Noisy Data
Here's where most attempts at sports modeling fail. You can’t just look at the standings after 15 games and assume your team rating is accurate. Early season data is thin, and lucky streaks or unlucky cold spells distort initial numbers.
The Solution: Blending Time Frames
The solution we implemented in the Team Ratings tab was blending historical context with current form. This is how we stabilized the early-season projections.
We blended three things, focusing only on 5v5 play because special teams add unnecessary noise:
- Full Season Context: The prior season's complete stats.
- Multi-Year History: Stabilizing data going back several years.
- Recent Form: The team’s performance over the last 10 or 15 games.
For the start of the season, we leaned heavily on history. As the year went on, we gradually shifted more weight toward recent results, allowing the model to adapt to actual roster changes.
This process generated a composite rating that projected an expected goals for percentage for that team on a neutral sheet. This allowed us to stack rank every team—Tampa Bay, Pittsburgh, Vegas—from best to worst.
Adjusting for Player Absences
Crucially, these projections needed to account for injuries. Columns on the right side of the Team Rating tab tracked short-term and long-term absences of significant players. These injuries forced mathematical adjustments to the projected team strength. Losing a key offensive driver like Nashville's Philippe Forsberg visibly lowered their projected strength rating.
Addressing the Single Biggest Variable: Goalie Modeling
Save percentage isn't a team trait; it's a measurement that belongs almost exclusively to the individual starting goalie. You can’t just plug in the team’s season save percentage and call it a day.
I built a specific goalie model that looked at goalie performance across three seasons, weighted heavily toward the most recent year. Shots faced also served as a sample size weight. More shots faced means a more reliable save percentage figure.
Value Over Replacement Player (VARP) for Goalies
We utilized a custom metric based on Wins Above Replacement Player (VARP) for goalies, developed with input from Dom Lucian. This metric quantified how many wins a specific goalie provided compared to an anonymous, league-average backup.
This was powerful for applying real-time adjustments. If a top-three goalie like Carey Price (who rated near 2.8 VARP) was injured and replaced by a low-tier backup, the model immediately dropped the team’s projected strength significantly. For example, replacing Vegas’s starter with a truly weak backup dropped them from a top-three team to well outside the top 15.
Keep in mind, goalie analysis has exploded since 2017. We didn't have access to things like Goals Saved Above Expected, which are common now. Our model was relatively simple weighted save percentage, which was its weakest link, but still effective back then.
Game Day Factors and Finalizing the Edge
Once the baseline team and goalie projections were set, the final layer involved real-time, game-specific adjustments. This is where we layered in skater value and schedule fatigue.
Skater Impact Using VARP
For skaters, we used VARP to measure what a player contributed above a replacement level. If Connor McDavid is out, you’re losing the massive performance gap between McDavid and the player who replaces him in the lineup. This loss is quantifiable.
Minor players retiring or sitting doesn't move the needle much, but an elite absence absolutely does. The rankings tab was adjusted based on these VARP losses or gains. For instance, losing two key players like Brad Marchand and Ryan Lindgren might translate to a loss of 3.3 projected wins for Boston over the rest of their schedule.
Schedule Compression Adjustments
The model also recognized physical toll. Playing the second game of a back-to-back slate or having three games in four nights imparts a measurable disadvantage. The model slightly lowered the win probability for the tired team accordingly.
When the schedule tab ran its final calculation for a specific game, it pulled the adjusted home/away ratings, factored in goalie quality, accounted for player VARP losses, and applied rest penalties. The output was a projected win probability for both sides.
For example, our opening night projection for St. Louis at Pittsburgh suggested Pittsburgh should be favored at -172. The market odds were slightly shorter at -180. This small difference indicated the NHL betting model was finding a positive expectation right out of the gate, even if small.
Tracking Wagers and Validating the True Edge
Finding value is one thing. Proving you can consistently beat the market is another. This is the crucial step many sharps skip.
I manually tracked every wager in the Wagers tab. I recorded the line we took, the closing line value (CLV), and whether we won or lost. It wasn't automated like today, but the discipline was non-negotiable.
The Importance of Closing Line Value
The results showed a 56.3% win rate and a 11.7% ROI over 341 bets. But the real test was CLV. We beat the closing line 87.4% of the time. When we took a bet that moved the market in our favor, our ROI was 13.8%. When we lost a bet *and* the market closed against us, our ROI was negative 3%.
This confirmed that the model found real, exploitable edges, not just variance luck. We were identifying lines that the broader market would eventually correct to.
Interestingly, the model was consistently wrong about certain teams for betting purposes, even if they were good teams overall. Betting against Arizona actually lost us significant money, as did betting against the Kings and Vegas early on. Conversely, fading Ottawa returned nearly $25,000.
Common Questions About NHL Betting Model Construction
The Easiest Way to Start Building Today
If you're looking to start your own NHL betting model, forget the fancy stats initially. Start simple. Take those foundational three inputs—Corsi, Shooting %, Save %—and run a basic regression in a spreadsheet. The goal is to establish a repeatable framework before adding complexity like VARP or schedule adjustments.
Why Can't I Just Use Season Averages?
Season averages are too noisy, especially early in the year, due to small sample sizes. If your star player misses 10 games, your season average is skewed. We blend recent form with multi-year history to create a tempered, more reliable true team strength projection, stabilizing the input data.
How Important Is Goalie VARP in Modern Hockey Modeling?
Goalie VARP is extremely important. Goalies impact win probability more dramatically than any other single position in hockey. While newer metrics are better than simple weighted save percentage, understanding how much value a starter adds over a replacement is essential for accurate game projection.
What Was the Biggest Flaw in the 2017 Model?
The biggest flaw was the simplicity of the goalie analysis and the manual injury tracking. Today, analysts use goals saved above expected derived from underlying shot data, which captures true goaltending skill better than we could in 2017. Automation would also replace the manual injury logs we maintained.
How Do I Know If My Model Found a Real Edge?
The best indicator is Closing Line Value. If your model consistently recommends bets where your line is better than the closing line, you are finding value, regardless of short-term results. Long-term profitability always follows consistent CLV.
Your Next Steps
This throwback model proved that sophisticated analysis doesn't require proprietary chips or massive cloud computing power. It requires asking the right questions about observable variables. You need the right statistical framework and, most importantly, the honesty to validate whether your framework is actually working by tracking closed lines.
We covered the core regression, the stabilizing tactics, and the necessary game-day adjustments. Now, it’s your turn to apply this mindset. If you want to discuss these components, share your own model structures, or ask granular questions about the Excel tabs, join our free community.
We talk modeling strategy constantly on our Discord server. Go check out discord.gg/hammer, or find the link in the description below. Start building your framework today; the thinking is what matters.
About Circle Back
To support Circles Back: Sign up for new sportsbook accounts using our custom links and offers. Click HERE.
Stay Updated: Subscribe for more Circle Back content on your favourite platforms:
Follow Us on Social Media:
- Follow CirclesOff on X / Twitter
- Follow Rob on X / Twitter
- Follow Betstamp on X / Twitter
- Follow The Hammer on X / Twitter
- Follow Jacob on X / Twitter
- Follow Geoff on X / Twitter
- Follow Kirk on X / Twitter
Scale Your Winnings With Betstamp PRO
Betstamp Pro saves you time and resources by identifying edges across 100+ sportsbooks in real-time. Leverage the most efficient true line in the industry and discover why Betstamp Pro is essential for top-down bettors.
Limited number of spots available! Apply for your free 1-on-1 product demo by clicking the banner below.


















