xHockeyAIxHockeyAI
HomeDeskRosterMemoryTakesAskSoon
2026-27
@xhockeyai
⌘K

Stars Lab

Did he earn the deal last night?

Dallas only·2026-27 desk·@xhockeyai

Lab 2.5·Release Notes →

HubNoteMissesTrustUFACompsEx-anteStructureAgingxWARGoaliesOutlookRoles

Research note · v1.38

Fair AAV from open data

2025-26 window · last calibrated Oct 1, 2026, 8:16 PM

Thesis

Open production (MoneyPuck) plus curated contract AAVs can produce a transparent fair-AAV estimate whose market-cohort residuals are measurable and improvable — useful for judging mid-contract NHL deals without licensed WAR or full CBA tooling.

This site is the lab demo. The career asset is the method, the calibration numbers, and the public misses — not a cap encyclopedia and not a takes factory.

Problem

Fans and media argue overpays from vibes. Teams price contracts with private models. Between those poles there is little public, auditable fair-value work that separates (a) bad salary data, (b) ELC structure, and (c) real production–price gaps.

We answer one question per player: given same-season impact and the paycheck, is the deal rich, fair, or a bargain — and how wrong is the model on a held-out-style market cohort?

Data & window

  • Production: MoneyPuck official CSVs (2025-26), credited.
  • Rosters: NHL season roster API for 2025-26 — not /current FA mix.
  • Contracts: curated / import AAV only. No Spotrac scrape. No LTIR / burial / retention math.

Stars Lab 2026-27 desk on gold AAV; Worth production stays on 2025-26.

Method (summary)

Transparent TypeScript heuristics (v1.38) — not a trained ML model. Skater fair AAV blends impact-style rates (adj/HD xG, primary points, 5v5 rel xG%, special teams, two-way proxies) with an open xWAR proxy (~⅓ weight) and a light market-comps blend. Goalies prefer MoneyPuck GSAX, tempered. Aging curves differ by F / D / G. Labels: overpay if surplus ≤ −$2M, underpay if ≥ +$2M.

Full dial list: methodology.

Calibration

We do not judge the model on ELC bargains. Market cohort = curated AAV ≥ $2M, age ≥ 24, 40+ GP, not ELC/bridge.

Market cohort n=349 · MAE |%cap| 1.16 pp
Mean surplus -0.56 pp (positive = model high vs paycheck)
Labels fair 292 / overpay 37 / underpay 20

Live residuals: /research/misses. CLI twin: npm run calibrate.

Known failures

  • Stale AAV still drives many loud residuals — fix data before dialing.
  • xWAR is a proxy, not Evolving-Hockey GAR/WAR. Do not cite it as licensed WAR.
  • Same-season only — this is not yet an ex-ante “will this deal look bad in year 3?” model. That is the 90-day research stretch goal.
  • Goalie variance and small samples stay loud; confidence flags exist for a reason.

90-day focus

  1. Publish and watch market MAE / bias in pp %cap every model change.
  2. Clear AAV errors in the top misses list.
  3. One forward test: do large |surplus| names mean-revert in production or next contract? Write it up.

Lab charter (repo): RESEARCH.md

← Research hubModel missesMethodology