本文目录导读:

在足球数据分析(尤其是开源项目如 socceraction、StatsBombPy、FBref 爬虫项目等)中,“进攻三区效率值”并不是一个单一的标准指标,而是一类用来衡量球队或球员在进攻三区(Attacking Third / Final Third)内将控球转化为实质性威胁能力的复合指标。
下面从定义、数据来源、计算框架、开源实现四个层面来说明如何量化。
先明确“进攻三区”的边界
开源项目中通常有两种划分:
| 划分方式 | 说明 | 常见项目 |
|---|---|---|
| 按场地长度三等分 | 距对方底线 1/3 区域 | 大多数 |
| 按 x 坐标阈值 | x > 80(Opta 120 坐标系)或 x > 66.7% | StatsBomb、Opta |
| 按“前场 + 禁区前沿” | 加入 zone 14 概念 | 战术类项目 |
在开源代码里一般写成:
attacking_third = df[df['x'] > 80] # Opta 坐标
核心量化维度
一个合理的“进攻三区效率值”应包含以下四个子维度:
进入效率(Entry Efficiency)
衡量把球推进到进攻三区的成功率。
Entry_Efficiency = 成功进入三区次数 / 尝试进入三区次数
- 分母:在中场区域的传球/带球尝试
- 分子:接球点落在三区内的次数
- 开源实现:
socceraction的 VAEP 中pass事件带end_x
控球效率(Possession Efficiency)
进入三区后,控球是否稳定。
Possession_Eff = 三区内传球成功数 / 三区内传球总数
可加权:向前传球权重 > 回传权重。
威胁创造效率(Chance Creation Efficiency)
这是最核心的部分。
Threat_Eff = 三区内产生的 xG + 0.5 * xT / 三区内触球次数
- xG(Expected Goals):射门质量
- xT(Expected Threat):Karun Singh 提出,开源实现广泛
- VAEP:socceraction 的核心,评估每次动作对得分概率的提升
转化效率(Conversion Efficiency)
Conversion_Eff = 三区内射门进球数 / 三区内射门数
复合“进攻三区效率值”公式(推荐)
开源项目常用加权和形式:
AT_Efficiency = w1 * Entry_Eff
+ w2 * Possession_Eff
+ w3 * Threat_Eff_norm
+ w4 * Conversion_Eff
- 权重可通过 逻辑回归 / XGBoost 用历史进球数据拟合
Threat_Eff_norm用 min-max 或 z-score 归一化- 常见权重示例(社区经验值):
w1=0.2, w2=0.2, w3=0.4, w4=0.2
开源项目中的具体实现路径
方案 A:基于 StatsBomb 开放数据 + socceraction
import socceraction.spadl as spadl
import socceraction.vaep as vaep
# 1. 加载数据
actions = spadl.statsbomb.convert_to_actions(events, pitch_length=105)
# 2. 筛选进攻三区
at_actions = actions[actions['start_x'] > 70]
# 3. 计算 VAEP 值
values = vaep.value(actions, model)
# 4. 聚合
at_efficiency = at_actions.groupby('team')['vaep_value'].sum() / len(at_actions)
方案 B:基于 xT 的开源实现
- 项目:
karunsingh/Expected-Threat(GitHub) - 流程:把球场划成 16×12 网格 → 用马尔可夫链计算每格 xT → 每次三区内动作累加 xT 增量
at_xt = actions[actions['x'] > 80].groupby('player')['xt_delta'].sum()
at_xt_per_touch = at_xt / touches_in_at
方案 C:FBref + 自定义指标
FBref 提供 Att 3rd、Passes into Final Third、SCA、GCA 等字段,可直接组合:
AT_Eff = (SCA + 2*GCA + PassesIntoFinalThird) / 90
常见陷阱与规范化建议
| 问题 | 建议 |
|---|---|
| 样本量小(单场) | 用滚动窗口或贝叶斯收缩 |
| 对手强度未调整 | 引入 opponent strength 权重 |
| 比分状态偏差 | 分领先/落后场景分别计算 |
| 位置偏差 | 按球员位置分组归一化 |
| 坐标系统一 | 统一到 105×68 或 120×80 |
可直接参考的开源项目
| 项目 | 用途 |
|---|---|
| socceraction | VAEP、xT、SPADL 数据模型 |
| statsbombpy | 拉取 StatsBomb 开放数据 |
| mplsoccer | 可视化三区热图 |
| football-data(Karun Singh) | xT 原始实现 |
| FBref-scraper | 抓取三区相关统计 |
| understat-scraper | xG 数据补充 |
总结一句话
进攻三区效率值 = 进入三区的成功率 × 三区内控球稳定性 × 每次触球创造的威胁(xT/VAEP)× 射门转化率,再用历史数据拟合权重,在
socceraction或 xT 开源框架上即可实现。
如果你告诉我你用的是哪个开源项目(StatsBomb / Opta / Wyscout / FBref),我可以给出更具体的代码模板和字段映射。