章节 01
导读 / 主楼:PuckZone:基于机器学习的NHL冰球比赛预测系统
一个使用Python、scikit-learn和Supabase构建的NHL冰球比赛结果预测模型,涵盖常规赛和季后赛,包含51-55个特征的综合特征工程管道。
正文
一个使用Python、scikit-learn和Supabase构建的NHL冰球比赛结果预测模型,涵盖常规赛和季后赛,包含51-55个特征的综合特征工程管道。
章节 01
一个使用Python、scikit-learn和Supabase构建的NHL冰球比赛结果预测模型,涵盖常规赛和季后赛,包含51-55个特征的综合特征工程管道。
章节 02
章节 03
PuckZone是一个专为NHL(北美职业冰球联赛)设计的机器学习预测系统,能够预测常规赛和季后赛的比赛结果。该项目基于2017-18至2025-26赛季的历史比赛数据,通过综合特征工程管道构建预测模型。
章节 04
项目采用现代化的数据架构设计。比赛数据通过NHL官方API获取,并存储在Supabase数据库中。数据摄取由配套的my-puckzone-ingest项目负责,确保数据的实时性和完整性。这种架构设计使得模型能够处理跨越八个赛季的庞大数据集,同时保持数据的一致性和可追溯性。
章节 05
项目的核心创新在于其统一的特征工程管道(pipeline.py),这是整个系统的单一入口点。该管道消除了训练-服务偏差(train/serve skew),确保训练环境和生产环境使用完全相同的特征计算逻辑。
特征管道包含以下关键模块:
章节 06
项目包含六个独立的预测模型,每个针对特定的预测任务:
| 模型 | 预测目标 | 特征数量 | 训练数据 |
|---|---|---|---|
| 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赛季所有射门事件 |
章节 07
项目采用可注入的DataContext设计,允许在单元测试中使用内存数据,无需连接真实的Supabase数据库。这种设计大大提高了代码的可测试性:
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)
章节 08
项目实现了滚动原点回测框架(walk-forward backtest),每个赛季作为独立的测试折,使用所有之前赛季的数据进行训练。这种方法比单一赛季留出法更能评估模型的真实泛化能力。回测报告包括对数损失、Brier分数、ROC AUC和校准度等指标。