本文目录导读:

在开源项目中结合xGA(Expected Goals Against,预期失球)评估防守表现,通常出现在足球数据分析类开源项目的语境下,下面从数据获取、模型构建、指标计算到可视化,给出一个可落地的完整思路。
先明确xGA的定位
xGA衡量的是球队让对手获得的射门质量总和,即对手每次射门的xG值累加,它反映防守端的结构性表现,比单纯看失球数更能剔除门将发挥和运气因素。
- xGA低 → 防守限制了对手的高质量机会
- 实际失球 − xGA → 门将超额扑救(负值)或表现不佳(正值)
开源项目中的典型架构
数据层 → xG模型层 → xGA聚合层 → 评估/可视化层
数据层
开源项目常用数据源:
- StatsBomb Open Data(免费事件数据,含射门坐标、身体部位、压迫信息)
- FBref / Understat(可爬取的射门级数据)
- Wyscout 公开样本
- 自建标注数据
关键字段:射门位置(x,y)、射门类型、助攻方式、防守压力、是否定位球、进攻人数vs防守人数。
xG模型层
开源项目通常用以下方式构建单次射门xG:
- 逻辑回归(可解释性强,特征:距离、角度、身体部位、是否头球)
- 梯度提升树(XGBoost/LightGBM,特征更丰富)
- 深度学习(CNN处理射门热图,如一些开源 soccer-analytics 仓库)
开源参考:socceraction、statsbombpy、football-xg-model 类仓库。
xGA聚合层
# 伪代码:按球队/比赛/赛季聚合对手xG
def compute_xga(shots_df, team, match_id=None):
opp_shots = shots_df[
(shots_df['defending_team'] == team) &
(shots_df['is_shot'] == True)
]
if match_id:
opp_shots = opp_shots[opp_shots['match_id'] == match_id]
return opp_shots['xg'].sum()
聚合维度建议:
- 每场xGA(标准化为 per 90)
- 每场被射门数 + 平均xG/射门(拆分“数量”与“质量”)
- 定位球xGA vs 运动战xGA
- 比分状态下的xGA(领先/落后时的防守策略差异)
评估层
结合xGA做防守评估的常用指标:
| 指标 | 含义 |
|---|---|
| xGA/90 | 防守结构质量 |
| 失球 − xGA | 门将/运气修正 |
| xGA per shot | 限制单次射门质量的能力 |
| Deep completions against | 对手进入危险区域次数 |
| PPDA | 压迫强度(与xGA联动看压迫是否有效) |
结合开源工具的具体做法
- 用
statsbombpy拉取公开比赛事件数据 - 用
socceraction的 xT/xG 管线生成射门级xG - 按防守球队聚合得到xGA时间序列
- 用
mplsoccer可视化:对手射门热图 + xGA累积曲线 - 在 Jupyter/Streamlit 中做交互式 dashboard,对比多队xGA
注意事项
- 样本量:xGA在单场比赛噪声大,建议滚动5-10场或赛季聚合
- 模型校准:xG模型需在目标联赛校准,跨联赛直接套用会偏差
- 定义一致性:明确是否含点球(通常分开报告)
- 开源许可:StatsBomb数据有使用条款,商用需注意
可参考的开源项目方向
socceraction(xT/xG框架)statsbombpy(数据获取)mplsoccer(可视化)- 各类 GitHub 上的
football-analytics/xg-model仓库
如果你能说明具体场景(比如是俱乐部内部工具、教学项目还是公开dashboard),我可以进一步给出目录结构、特征清单或代码骨架。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播