Whoscored评分对比:开源项目与官方评分的差异
Whoscored的评分体系是足球数据分析领域最常被引用的指标之一,但官方算法并未公开,开源社区为此做了不少逆向工程和替代实现,下面从几个维度做对比。

Whoscored官方评分体系回顾
Whoscored评分基于超过200项原始统计数据,通过专有算法加权计算,范围通常为 0 – 10.0:
| 事件类型 | 权重倾向 |
|---|---|
| 进球 | 极高正向 |
| 助攻 | 高正向 |
| 关键传球 | 中正向 |
| 抢断/拦截 | 中正向 |
| 失误导致丢球 | 高负向 |
| 犯规/黄牌 | 低负向 |
| 传球成功率 | 低权重(位置相关) |
关键特点:
- 位置相关权重(后卫与前锋的评分标准不同)
- 有"基准分"(通常6.0左右),表现平平者接近该值
- 算法不公开,只能通过回归拟合近似
主要开源项目对比
socceraction(ML-KULeuven / StatsBomb生态)
- 定位:基于StatsBomb事件数据的动作价值评估框架
- 方法:VAEP(Valuing Actions by Estimating Probabilities)
- 输出:每动作的期望得分增量,而非4–10评分
- 与Whoscored差异:
- 不做"单场评分"直接映射
- 更强调动作概率价值,学术性强
- 可聚合成球员评分,但尺度不同
expected-Goals / xG模型类项目(如 understat 爬虫、football-xg)
- 定位:单指标(xG/xA)估算
- 与Whoscored差异:
- Whoscored是综合评分,xG只是其中一个子项
- 无法直接对比,但可作为评分的输入特征
FBref / Opta 衍生开源评分
- 定位:基于Opta数据的替代评分
- 与Whoscored差异:
- 数据源不同(Opta vs Whoscored自有)
- 评分尺度和权重不同,绝对值不可直接比较
- 趋势和排名相关性较高(约0.7–0.85)
个人逆向工程项目(GitHub上多个 whoscored-scraper + 回归模型)
- 定位:尝试复现Whoscored评分
- 方法:
- 爬取Whoscored原始事件数据
- 用线性回归/GBDT拟合官方评分
- 结果:
- 单场评分 R² 约 0.85–0.92
- 主要误差来自:位置权重未知、防守动作归属模糊、官方未公开的微调
kloppy + 自建评分
- 定位:标准化事件数据解析
- 与Whoscored差异:
- kloppy本身不评分,只是数据管道
- 需自行设计评分函数
关键差异总结
| 维度 | Whoscored官方 | 开源项目 |
|---|---|---|
| 算法透明度 | 闭源 | 开源可复现 |
| 数据源 | 自有事件数据 | StatsBomb/Opta/Wyscout等 |
| 评分范围 | 0–10.0 | 各异(VAEP为增量值) |
| 位置权重 | 有,未公开 | 多数项目简化或手动设定 |
| 防守动作处理 | 精细 | 常被低估或简化 |
| 可解释性 | 低 | 高 |
| 与官方相关性 | 排名相关0.7–0.9,绝对值偏差大 |
实践建议
-
若目标是"接近Whoscored评分":
- 用Whoscored自身事件数据 + GBDT回归,是当前最可行路径
- 单纯用StatsBomb/Opta数据无法完全对齐
-
若目标是"更科学的球员评估":
- 推荐 VAEP / xT(Expected Threat) 框架
- 比Whoscored评分更可解释、更少位置偏见
-
若做对比研究:
- 不要直接比较绝对值,应比较排名相关性(Spearman)
- 注意样本:不同联赛、不同位置的评分偏差不同
-
注意事项:
- Whoscored评分对进球/助攻过度敏感,对组织型中场和中后卫常偏低
- 开源替代方案在防守贡献和无球跑动上仍普遍弱于官方
推荐开源项目清单
| 项目 | 用途 | 与Whoscored可比性 |
|---|---|---|
socceraction |
VAEP/xT评分 | 中(需转换尺度) |
kloppy |
事件数据标准化 | 低(仅数据层) |
mplsoccer |
可视化 | 无 |
statsbombpy |
数据获取 | 低 |
football-xg-model |
xG估算 | 子项对比 |
GitHub whoscored-scraper |
数据爬取 | 高(同源数据) |
目前没有开源项目能完全复现Whoscored评分,但通过同源数据 + 回归拟合可达到较高相关性(排名层面),若追求方法论严谨性,VAEP类框架是更好的替代;若追求与Whoscored数值接近,只能用其自身数据做逆向工程。
需要我针对某个具体项目(如socceraction的VAEP实现)给出代码级对比或复现思路吗?