本文目录导读:

在开源项目(尤其是足球数据分析、事件数据挖掘或AI体育模型)中,量化“射门转化率”通常需要结合数据工程与体育统计学,如果只是简单计算“进球数 ÷ 射门数”,往往无法反映真实水平,因为忽略了射门位置、防守压力、比赛状态等关键变量。
以下是开源项目中量化射门转化率高低的常用方法,按复杂度从低到高排列:
基础转化率
这是最直接的指标,适合快速原型或数据看板。
转化率 = 进球数 / 射门总数 × 100%
变体:
- 射正转化率 = 进球数 / 射正数
- 非点球转化率 = (进球数 - 点球) / (射门数 - 点球)
优缺点:
- ✅ 计算简单,易于在 SQL/Pandas 中实现
- ❌ 不区分射门难度,远射和空门被同等对待
开源实现参考:
soccerdata(Python库)可直接拉取 FBref/Understat 数据后做此计算statsbombpy可获取 StatsBomb 开放数据中的射门事件
预期进球加权转化率
这是目前开源项目中最主流的做法,核心思想:每脚射门本身有一个“应该进球”的概率(xG),用实际进球减去 xG,得到超额进球。
xG转化率 = 进球数 / Σ(xG)
超额进球 = 进球数 - Σ(xG)
量化标准(以单赛季球员为例): | 指标 | 含义 | |------|------| | 进球 - xG > +5 | 顶级终结者(如哈兰德、凯恩巅峰赛季) | | +2 ~ +5 | 高于平均 | | -2 ~ +2 | 正常波动范围 | | < -2 | 低于平均,可能运气差或终结能力弱 |
开源工具:
- Understat 提供免费 xG 数据(可通过
understatPython 包抓取) - FBref 提供 xG、npxG(非点球预期进球)
mplsoccer可可视化 xG 射门图
射门质量调整(Shot Quality)
单纯 xG 仍可能被“射门选择”混淆,更精细的做法是分离机会质量和终结能力:
1 每脚射门平均 xG
平均射门质量 = Σ(xG) / 射门数
- 高 → 球员/球队善于创造好机会
- 低 → 远射多或机会差
2 位置标准化转化率
按射门区域(禁区中央、禁区外、小禁区等)分组,计算各组转化率,再与联赛平均对比。
开源实现思路:
# 伪代码
df['zone'] = pd.cut(df['distance'], bins=[0,6,18,30,100])
league_avg = df.groupby('zone')['goal'].mean()
df['expected_goal_zone'] = df['zone'].map(league_avg)
df['overperformance'] = df['goal'] - df['expected_goal_zone']
贝叶斯/统计模型方法
开源项目中越来越常见,用于处理小样本问题(比如一个球员只射了10脚)。
1 贝叶斯收缩
将球员转化率向联赛平均“收缩”,避免样本不足导致的极端值。
调整后转化率 = (进球 + α) / (射门 + α + β)
α、β 来自联赛先验(如 Beta 分布拟合)。
开源库:
PyMC/Stan可做层次贝叶斯模型scikit-learn的BayesianRidge可用于特征加权
2 逻辑回归 / 梯度提升
用射门特征(距离、角度、身体部位、助攻类型、防守人数)预测进球概率,即 xG 模型本身。
开源 xG 模型参考:
socceraction(KDD 论文开源实现)statsbomb官方 xG 模型(部分公开)- GitHub 上
xg-model、football-xg等仓库
情境化调整
高水平开源项目会进一步控制:
| 变量 | 影响 |
|---|---|
| 比赛状态(领先/落后) | 落后时射门更急躁 |
| 对手强度 | 对强队转化率通常下降 |
| 主客场 | 主场转化率略高 |
| 赛季阶段 | 疲劳影响终结 |
| 射门类型 | 头球 vs 脚射、运动战 vs 定位球 |
实现方式: 在 xG 模型中加入这些协变量,或做分层分析。
综合量化框架(推荐)
一个完整的开源量化流程可以是:
数据层:StatsBomb / FBref / Understat 抓取射门事件
2. 特征层:距离、角度、助攻类型、防守压力、身体部位
3. 模型层:训练 xG 模型(逻辑回归/XGBoost)
4. 指标层:
- 基础转化率
- xG转化率(进球/xG)
- 超额进球(G - xG)
- 每90分钟超额进球(G-xG per 90)
5. 调整层:贝叶斯收缩 + 情境控制
6. 可视化:mplsoccer 射门图 + 转化率热力图
评级参考(以五大联赛前锋单赛季为例):
- 精英:G - xG > +5,且射门数 > 50
- 优秀:+2 ~ +5
- 平均:-2 ~ +2
- 低效:< -2
现成开源项目推荐
| 项目 | 用途 |
|---|---|
soccerdata |
抓取 FBref/Understat 数据 |
statsbombpy |
获取 StatsBomb 开放事件数据 |
mplsoccer |
射门图、xG 可视化 |
socceraction |
动作价值评估(VAEP) |
understat |
Understat xG 数据抓取 |
footballdata |
多源数据整合 |
在开源项目中量化射门转化率,不能只看进球/射门,推荐做法是:
- 基础层:计算转化率、射正率
- 核心层:用 xG 做基准,计算 G - xG 和 G / xG
- 调整层:贝叶斯收缩处理小样本,控制情境变量
- 评级层:与同位置、同联赛球员对比,给出百分位排名
这样得出的“转化率高低”才具有跨球员、跨赛季的可比性,也符合现代足球数据分析的开源实践标准。