# PuckZone：基于机器学习的NHL冰球比赛预测系统

> 一个使用Python、scikit-learn和Supabase构建的NHL冰球比赛结果预测模型，涵盖常规赛和季后赛，包含51-55个特征的综合特征工程管道。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-07T00:46:02.000Z
- 最近活动: 2026-06-07T00:50:35.785Z
- 热度: 159.9
- 关键词: NHL, 冰球预测, 机器学习, 特征工程, scikit-learn, 体育数据科学, Elo评分, 预期进球
- 页面链接: https://www.zingnex.cn/forum/thread/puckzone-nhl
- Canonical: https://www.zingnex.cn/forum/thread/puckzone-nhl
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**：justin-m-5
- **来源平台**：GitHub
- **原始标题**：my-puckzone-model
- **原始链接**：https://github.com/justin-m-5/my-puckzone-model
- **发布时间**：2026-06-07

## 项目概述

PuckZone是一个专为NHL（北美职业冰球联赛）设计的机器学习预测系统，能够预测常规赛和季后赛的比赛结果。该项目基于2017-18至2025-26赛季的历史比赛数据，通过综合特征工程管道构建预测模型。

## 数据架构与基础设施

项目采用现代化的数据架构设计。比赛数据通过NHL官方API获取，并存储在Supabase数据库中。数据摄取由配套的`my-puckzone-ingest`项目负责，确保数据的实时性和完整性。这种架构设计使得模型能够处理跨越八个赛季的庞大数据集，同时保持数据的一致性和可追溯性。

## 特征工程管道

项目的核心创新在于其统一的特征工程管道（pipeline.py），这是整个系统的单一入口点。该管道消除了训练-服务偏差（train/serve skew），确保训练环境和生产环境使用完全相同的特征计算逻辑。

特征管道包含以下关键模块：

- **比赛数据加载**：加载常规赛和季后赛的已完成比赛
- **球队排名快照**：每日球队排名统计
- **守门员表现**：基于最近10场比赛的滚动扑救率
- **球队效率统计**：包括多打少成功率（PP%）、争球成功率、射门次数等
- **Elo评分系统**：逐场比赛更新的Elo评分
- **高级统计**：Corsi、预期进球（xG）、高危机会占比等
- **球员统计**：用于预测球员得分的滚动统计数据
- **射门事件**：射门事件和xG特征构建
- **季后赛背景**：系列赛胜负和种子排名信息

## 模型体系

项目包含六个独立的预测模型，每个针对特定的预测任务：

| 模型 | 预测目标 | 特征数量 | 训练数据 |
|------|---------|---------|---------|
| win_model.pkl | 主/客场获胜概率 | 51 | 2017-25赛季常规赛 |
| playoff_model.pkl | 季后赛获胜概率 | 55 | 2018-25赛季季后赛 |
| score_model.pkl | 主/客场得分 | 51 | 2017-25赛季常规赛 |
| playoff_score_model.pkl | 季后赛得分 | 51 | 2018-25赛季季后赛 |
| player_model.pkl | 球员是否得分 | - | 2017-25赛季球员数据 |
| xg_model.pkl | 射门是否进球 | - | 2017-25赛季所有射门事件 |

## 技术实现亮点

### DataContext注入模式

项目采用可注入的DataContext设计，允许在单元测试中使用内存数据，无需连接真实的Supabase数据库。这种设计大大提高了代码的可测试性：

```python
from features.pipeline import DataContext, build_feature_row

ctx = DataContext(
    games=my_games_df,
    standings=my_standings_df,
    goalie_df=my_goalie_df,
    # ... 其他数据框
)
row = build_feature_row(home_id, away_id, game_date, ctx)
```

### 滚动原点回测

项目实现了滚动原点回测框架（walk-forward backtest），每个赛季作为独立的测试折，使用所有之前赛季的数据进行训练。这种方法比单一赛季留出法更能评估模型的真实泛化能力。回测报告包括对数损失、Brier分数、ROC AUC和校准度等指标。

### 防泄漏测试

测试套件包含两类关键测试：

- **一致性测试**：验证训练路径和服务路径对所有确定性特征产生相同结果
- **泄漏测试**：验证在特定日期D的特征不会受到D之后数据的影响

## 实际应用

项目提供交互式预测脚本，用户可以通过命令行输入：

- 主队缩写（如CAR）
- 客队缩写（如VGK）
- 比赛日期（默认为今天）
- 比赛类型（1=常规赛，2=季后赛）

系统会实时组装特征并输出预测结果。预训练的模型文件已包含在仓库中，用户可以直接使用，也可以根据新数据重新训练。

## 技术栈与依赖

- **编程语言**：Python 3
- **机器学习**：scikit-learn
- **数据库**：Supabase（PostgreSQL）
- **数据处理**：pandas, NumPy
- **测试框架**：pytest
- **模型持久化**：pickle (.pkl文件)

## 项目价值与启示

PuckZone展示了如何将机器学习最佳实践应用于体育预测领域。其统一的特征管道设计、严格的测试策略、以及训练-服务一致性保证，为类似的预测项目提供了优秀的参考架构。项目代码结构清晰，文档完善，适合作为学习体育数据科学和机器学习工程化的案例。
