本文目录导读:

在开源项目中结合xGA(预期失球,Expected Goals Against)评估防守表现,核心思路是:用公开数据 + 开源工具链,把“防守好不好”从主观印象变成可量化、可复现的指标,下面按“数据—模型—评估—落地”四个层面说明具体做法。
先明确xGA在防守评估中的定位
xGA衡量的是对手创造的机会质量总和,即“面对这些射门,平均门将/防守体系预期会丢多少球”,它反映的是防守体系限制对手机会质量的能力,而不是门将扑救能力(后者用xGA−GA或扑救超额值衡量)。
因此用xGA评估防守时,要区分三个层次:
| 层次 | 指标 | 含义 |
|---|---|---|
| 机会限制 | xGA/90 | 每90分钟让对手积累的预期进球 |
| 机会质量结构 | xGA/shot、射门位置分布 | 防守是否把对手逼到低质量区域 |
| 门将/最后一环 | xGA−GA、PSxG−GA | 门将是否超额/欠额 |
数据来源(开源/公开)
- 事件数据:StatsBomb Open Data(含shot freeze-frame、坐标、身体部位)、Wyscout公开样本、Football-Data.co.uk(仅比分,不够)。
- 追踪数据:部分联赛公开的SkillCorner样本、Metrica Sports样本(开源追踪数据)。
- 补充:FBref/Understat提供现成xG/xGA(Understat覆盖五大联赛),可直接做基线对比。
- 自建:用开源爬虫(如socceraction配套数据、
statsbombpy)拉取公开比赛。
关键点:xGA模型需要射门坐标 + 射门前事件(助攻方式、防守压力、是否反击),坐标是底线,压力/门将位置是加分项。
开源模型与工具链
- socceraction(MLOSS):提供xT、VAEP、Atomic-VAEP,可自定义xG模型;其
ExpectedGoalsModel类可直接训练。 - statsbombpy:拉取StatsBomb开放数据。
- mplsoccer:画射门图、热区图、防守动作分布。
- Understat/FBref API封装(如
understatapi、soccerdata):批量取xGA基线。 - PyMC / scikit-learn / XGBoost:自建xG模型(逻辑回归可解释性好,GBM精度高)。
- nflfastR式思路迁移:R端可用
worldfootballR。
典型流程:
soccerdata/statsbombpy取射门事件;- 特征工程:距离、角度、身体部位、助攻类型、是否反击、防守球员距离(有追踪数据时);
- 训练xG模型(按联赛/赛季分层校准);
- 按“防守方”聚合对手射门xG → xGA;
- 按对手强度、比分状态、主客场做调整(可用ELO或对手xG调整)。
评估防守表现的具体方法
1 基础聚合
- 球队赛季xGA、xGA/90、xGA/射门;
- 分区间:运动战xGA、定位球xGA、反击xGA(区分防守场景);
- 滚动窗口(如5场、10场)看趋势,避免小样本噪声。
2 对手与情境调整
- 对手强度调整:用对手进攻xG或ELO做回归调整,得到“调整后xGA”;
- 比分状态:领先时防守收缩会推高xGA,需分状态统计;
- 主客场分开。
3 与结果对比(防守超额)
- xGA − GA:正值为防守(含门将)超额表现;
- PSxG − GA(若用门将模型):分离门将贡献;
- xGA vs 实际失球的时间序列:识别“运气/门将”与“体系”的偏离。
4 结构诊断(比总数更有用)
- 对手射门位置热图:是否被压到禁区中央;
- xGA/射门:高说明允许高质量单次机会;
- 防守动作分布(抢断、拦截、解围位置):结合xT/VAEP看防守动作是否“有效”;
- 被反击xGA占比:暴露攻防转换问题。
5 统计显著性
- 用bootstrap给xGA/90置信区间;
- 小样本(<10场)不要下结论,或用贝叶斯收缩向联赛均值收缩;
- 多赛季合并提升稳定性。
开源项目落地建议
- 仓库结构:
data/(原始事件)、features/(射门特征)、models/(xG模型+校准)、reports/(球队xGA报告)、notebooks/。 - 可复现:固定随机种子、记录数据版本(DVC)、模型卡(model card)说明训练集与校准。
- 可视化:mplsoccer出射门图 + xGA趋势线 + 分场景柱状图,直接放进README或静态站点。
- 对比基线:至少和Understat/FBref的xGA对比,证明自建模型合理。
- 伦理与版权:只用公开/授权数据,注明来源与许可(StatsBomb开放数据需遵守其条款)。
常见坑
- 只报xGA总数:不区分运动战/定位球/反击,无法指导防守改进;
- 忽略对手强度:强队xGA低可能只是赛程友好;
- 小样本过拟合:单赛季半程xGA波动大,需收缩;
- 把xGA当门将指标:xGA是体系指标,门将要看xGA−GA/PSxG−GA;
- 模型未校准:xG概率需按联赛校准,否则跨联赛不可比。
一句话总结:开源项目里,用soccerdata/statsbombpy取射门事件,用socceraction或自建模型算xG并按防守方聚合得xGA,再做对手/情境调整和分场景拆解,配合bootstrap与可视化,就能把防守表现做成可复现、可比较、可指导改进的量化评估。