Methodology & backtest
No black box: here is exactly how projections are computed, how well they did on the last signing class, and what this engine deliberately does not model.
August 2026 market shift — what we missed, what we changed
Change note · 2026-09-01
Cale Makar signed 8 × $20.4M on August 28, 2026 — 18.0 % of the 2027-28 cap. We had projected him at $9.85M (midpoint) with a $9.0–12.8M range: the summer's four landmark deals (Carlsson, Bedard, Celebrini, Makar) moved the elite share of the cap from 12–15 % to ~18 %, and a comparables engine fed on history cannot see a regime shift on its own.
What changed: neighbors are now weighted by recency (18-month half-life); a July 1, 2026 era breakpoint separates and boosts post-break comparables and widens the range when they are fewer than three; the backtest now measures the market drift per pool and position group and feeds it back into projections when it exceeds ±5 % — displayed verbatim. Cap percentages use the cap of the season a contract starts, not the cap at signing.
Re-run on the day before his signing, v2 projects Makar at $12.76M with a $7.1–15.6M range and the regime-shift badge — closer, still short, and honest about why: no post-break UFA defenseman existed yet. He is that comparable now. The backtest below is v2 on the 2026-27 class, landmark deals included.
Era adjustment — everything in % of the cap
Every historical contract is normalized to its share of the salary-cap upper limit of the season it STARTS (AAV ÷ cap, in basis points) — a deal signed in August 2026 that begins in 2027-28 is measured against the 2027-28 cap. Projections come out in % of cap and convert to dollars using the cap of the target season. With the cap climbing roughly 9% per year, comparing raw 2021 dollars to 2027 dollars would be a lie — % of cap is how working capologists compare eras.
Two markets, never mixed — three, counting goalies
RFA and UFA pools are hard-separated on the player's status when the deal was signed (derived from his previous contract, or an age heuristic flagged as estimated). A leverage-less RFA does not price like a courted UFA. Goalies form their own pool and never claim more than medium confidence — their market is notoriously unpredictable.
Similarity — visible features, no black box
Each projection finds the 8 nearest comparables by weighted distance over visible features: age at signing, platform production (platform season 60% / previous 40%) — points/60, goals/60, xG%, TOI per game, games played. Weights live in a versioned config file. Below 5 eligible neighbors, the engine refuses to project — honesty before filler.
Outputs — always a range
Projected AAV is the weighted median of the neighbors' cap percentages — weight = similarity × recency × era boost — with a 25th–75th percentile range (10th–90th under a thin post-break sample). Projected term is the neighbors' modal term, capped by today's CBA limits (7 years re-signing / 6 external) through the same rule engine the rest of the site uses. Every projection shows its comparables — clickable, nothing hidden.
Methodology v2 — recency, era breakpoints, drift
Recency: each comparable's weight decays with the age of its signing (half-life — months) — last summer weighs almost fully, a deal from four years ago about a fifth. Era breakpoints: a configured date after which the market changed regime (—, —); comparables signed after it are shown separately and weighted ×—. With fewer than — post-break comparables the range widens to the 10th–90th percentile and the projection carries a "regime shift — limited sample" badge — four data points justify a correction, not a certainty.
Drift calibration: the backtest measures, per market and position group, the median of actual ÷ projected over the latest signing class. Beyond ±— % with at least — deals, that factor is applied to live projections — and always displayed on the projection itself. Pool discipline is untouched: RFA landmarks influence a UFA projection only through the drift, never as direct comparables.
The backtest — published, whatever it says
The most recent signing class in the pool is re-projected using only data available before each signing, then compared to the real deals. Anyone can sell a black box; we publish our hit rate.
Assumed limits (v2)
No aging curves (production is taken at signing, not projected forward). No negotiation context — clauses, team pressure, agents. Goalies are volatile. The comparables pool is built from the FULL-tier clubs' curated signings; it grows with each curation pass, and the coverage report in the back office says exactly where it is thin.