Version: 2.1 | Date: 2026-04-03 | Database: research-pipeline.db
| Table | Rows | Source | Schedule | Freshness Key |
|---|---|---|---|---|
sports_edges (NHL) |
4,019 | Edge scanner (Pinnacle vs Kalshi) | 8AM/10AM/2PM/6PM + closing | edge-scanner-nhl |
| — ML edges | 243 (31 exec) | Shin de-vig | — | edge-scanner-nhl-ml |
| — Spread edges | 560 (289 exec) | Normal dist, σ=2.0 | — | edge-scanner-nhl-spreads |
| — Total edges | 3,216 (913 exec) | Poisson, λ from O/U | — | edge-scanner-nhl-totals |
market_implied_curves (NHL) |
24,397 | Kalshi alt-line ladders | Every 30min | implied-curves-nhl |
nhl_custom_metrics |
32 | Computed from tier1+tier2 | 11 AM daily | nhl-custom-metrics |
| Table | Rows | Source | Schedule | Freshness Key |
|---|---|---|---|---|
sports_odds_snapshots (NHL Kalshi) |
2,377,303 | Kalshi API (15 series) | Every 30min | kalshi-nhl-team |
sports_odds_snapshots (NHL Pinnacle) |
13,691 | Odds API / Stealth scrape | Adaptive (2h→15m→5m) | pinnacle-nhl |
pinnacle_nhl_odds |
13,665 | Dedicated Pinnacle table | Adaptive | pinnacle-nhl |
sbr_book_odds (NHL) |
~3,400 | SBR 6-book scrape | 8AM/10AM/2PM/6PM | scrape-sbr-nhl |
pregame_consensus (NHL) |
~200 | Pregame.com | 10AM/2PM/6PM | scrape-pregame-nhl |
live_game_scores (NHL) |
18,835 | ESPN scoreboard | Every 60s during games | live-game-scores-nhl |
| Table | Rows | Source | Schedule | Freshness Key |
|---|---|---|---|---|
dratings_ratings |
457 | dratings.com scrape | 11 AM daily | scrape-dratings-nhl |
dratings_predictions |
30 | dratings.com scrape | 11 AM daily | scrape-dratings-nhl |
sagarin_ratings |
62 | sagarin.com scrape | 11 AM daily | scrape-sagarin-nhl |
sagarin_predictions |
11 | sagarin.com scrape | 11 AM daily | scrape-sagarin-nhl |
gamesim_predictions (NHL) |
64 | Monte Carlo sim | 12 PM daily | scrape-gamesim-nhl |
moneypuck_predictions |
124 | moneypuck.com scrape | 11 AM daily | scrape-moneypuck-team |
moneypuck_simulations |
32 | moneypuck.com scrape | 11 AM daily | scrape-moneypuck-team |
| Table | Rows | Source | Schedule | Freshness Key |
|---|---|---|---|---|
moneypuck_team_stats |
160 | MoneyPuck CSV (107 cols) | 11 AM daily | moneypuck-team-stats |
nhl_ppk_rates |
32 | Computed from MoneyPuck 5on4/4on5 | 11 AM daily | nhl-ppk-rates |
nhl_ewma_form |
96 | Computed (3 alpha values) | 11 AM daily | nhl-ewma-form |
nhl_pdo |
32 | Computed (5v5 SH% + SV%) | 11 AM daily | nhl-pdo |
nhl_schedule_strength |
64 | Computed from standings | 11 AM daily | nhl-schedule-strength |
nhl_team_variance |
31 | Computed (mean/std/skew/kurtosis MOV) | 11 AM daily | nhl-team-variance |
nhl_h2h_series |
2 | NHL API | Game day | nhl-h2h-series |
nhl_advanced_stats |
1,827 | NHL API | 11 AM daily | (shared) |
| Table | Rows | Source | Schedule | Freshness Key |
|---|---|---|---|---|
nhl_period_scoring |
31 | Computed from game periods | 11 AM daily | nhl-period-scoring |
nhl_one_goal_stats |
31 | Computed (1G Win%, sustainability) | 11 AM daily | nhl-situational-stats |
nhl_period_situational |
31 | Computed (Lead/Tied/Trail after P2) | 11 AM daily | nhl-situational-stats |
nhl_empty_net_stats |
31 | Computed (EN goals, pull rates) | 11 AM daily | nhl-empty-net |
nhl_flow_baselines |
31 | Computed (pace, O/U thresholds) | 11 AM daily | nhl-flow-metrics |
nhl_venue_adjustments |
32 | Computed (per-venue λ adjust) | Weekly | nhl-venue-adjustment |
nhl_game_periods_cache |
2,332 | NHL API (raw period data) | 11 AM daily | (computation source) |
| Table | Rows | Source | Schedule | Freshness Key |
|---|---|---|---|---|
goalie_starters |
105 | DailyFaceoff scrape | 11AM/1PM/3PM/5PM | scrape-dailyfaceoff |
goalie_starters_history |
310 | DailyFaceoff (historical) | Continuous | scrape-dailyfaceoff |
nhl_goalie_matchup_history |
1 | NHL API game logs | 11 AM daily | nhl-goalie-matchup |
nhl_goalie_workload |
71 | Computed (starts, shots faced) | 11 AM daily | nhl-goalie-workload |
moneypuck_goalies |
95 | MoneyPuck CSV (GSAx, SV%) | 11 AM daily | scrape-moneypuck |
ref_assignments |
453 | ScoutingTheRefs scrape | Game day | scrape-scoutingtherefs |
| Table | Rows | Source | Schedule | Freshness Key |
|---|---|---|---|---|
nhl_fatigue_metrics |
31 | Computed (rest, B2B, travel, TZ) | 11 AM daily | nhl-fatigue-metrics |
| Table | Rows | Notes |
|---|---|---|
sports_edge_summary |
61 | Daily summary across all sports |
kalshi_nhl_prices |
1,480,073 | Dedicated Kalshi NHL price archive |
kalshi_nhl_futures |
196,852 | Kalshi NHL futures archive |
kalshi_nhl_player_props |
1,274,672 | Kalshi NHL player props archive |
moneypuck_line_combos |
2,206 | Line combination data |
| Parameter | Value |
|---|---|
| Poisson max goals | 15 |
| Spread std dev | 2.0 |
| OT lambda adjustment | +0.15 |
| Min net edge | 4 cents |
| Kalshi fee rate | 7% on profit |
| Kelly fraction | 0.25 |
| EWMA alphas | 0.10, 0.12, 0.15 |
| PDO normal range | 0.985–1.015 |
| Rung cap (no-bet) | 5+ |
| Implied prob range | 15%–85% |
| Source Type | Expected Freq | Stale Threshold |
|---|---|---|
| Daily scrapers (11AM) | 1440 min | 1560 min (26h) |
| 4x daily (edge scanner) | 240 min | 420 min (7h) |
| 3x daily (SBR, pregame) | 480 min | 780 min (13h) |
| Every 30min (Kalshi) | 30 min | 120 min (2h) |
| Adaptive (Pinnacle) | 120 min | 360 min (6h) |
| Weekly (venue adj) | 10080 min | 10560 min (1w+4h) |
| Live scores | 3 min | 10 min |
| Item | Status | Notes |
|---|---|---|
| Kalshi WebSocket | Design phase | Needed for live execution, not edge detection |
| Massey ratings | BUILT — 32 teams | Low priority, existing models sufficient |
| NaturalStatTrick | Blocked | Source unavailable; MoneyPuck covers same stats |
| Proprietary xG model | Data collection | Collecting raw NHL API shot data |
| Negative Binomial | Design only | Poisson adequate; swap if overdispersion detected |
| Data validation framework | Assigned | DeepSeek R1 to build shared service |
| 32-team beat reporter list | Not started | Required for research pipeline |
| Dimers NHL | FIXED — scraper fetches NHL | Scraper exists, 0 NHL rows |
| Goalie matchup delta | Table exists, 0 rows | Depends on matchup history (now 655 rows) |