fern://programming
← 项目

Sofascore 球员评分预测

我的毕业论文。按位置分别训练的随机森林模型,能否比一个通用模型更准确地在赛前预测球员的 Sofascore 评分?答案是否定的。

我在 FATEC Sorocaba 的毕业论文,指导老师是 Maria das Graças J. M. Tomazela 教授。研究问题只有一个:按位置(门将、后卫、中场、前锋)分别训练的随机森林模型,能否比单一的通用模型以更小的误差在赛前预测球员的 Sofascore 评分?

流程

分三个阶段,每个阶段只从磁盘读取上一阶段的输出,因此任何一个阶段都可以单独重跑。

  • 采集。 一个"有礼貌"的 Sofascore 内部 API 爬虫:限速、带退避的重试、断点续爬,并对每一行数据做 Pydantic 校验。共采集 11,977 条球员单场记录,覆盖 2025 年巴西甲级联赛全部 380 场比赛。
  • 清洗。 每个步骤一个函数。有意思的是,一个空单元格可能代表三种不同的含义,每种都有各自的处理规则。
  • 建模。 只使用赛前特征:主客场、对手实力,以及球员截至被预测比赛之前的历史表现。在最后 80 场比赛上做前向滚动验证,以整场比赛为单位做 bootstrap 置信区间,并计算置换重要性。

结果

按位置专门建模并没有降低误差。通用模型比"按位置取平均"的基线好 6%(MAE 0.374 对 0.398),而门将的评分在赛前几乎无法预测。一场比赛的评分,大部分是在比赛过程中才决定的。

笔记

按顺序讲完整个过程:数据里的陷阱,第一个好得不真实的模型,以及当模型只能看到过去时得出的结果。

技术栈:Python、httpx、tenacity、Pydantic v2、pandas、scikit-learn、pytest。

项目笔记

为什么做、怎么做,分篇记录

3 篇