本文目录导读:

在足球数据分析(尤其是开源项目如 socceraction、StatsBombPy、FBref 相关工具)中,“进攻三区效率值”并不是一个单一的标准指标,而是一个需要自定义口径的复合指标,下面给出一套可直接落地的量化框架。
先定义清楚三个要素
| 要素 | 常见定义 | 备注 |
|---|---|---|
| 进攻三区 | 对方球门 1/3 区域(x ≥ 2/3 场地长度) | StatsBomb 用 x ≥ 80(120 制);Opta 用 x ≥ 66.7% |
| 效率 | 产出 / 投入 | 产出=进球、xG、射门;投入=触球、传球、推进次数 |
| 值 | 可归一化到 0–100 或每90分钟 | 便于跨球员/球队比较 |
核心公式(推荐起步版)
进攻三区效率值 = (0.6·xG_created + 0.3·xA + 0.1·Goals)
/ (FinalThird_Touches + Progressive_Passes_into_FT)
× 90 (归一化到每90分钟)
更简化的版本:
# 伪代码 ft_efficiency = (xg + xa) / final_third_touches ft_efficiency_p90 = ft_efficiency * 90 / minutes
分维度拆解(更细粒度,适合开源实现)
传球效率
FT_PassEff = 成功进入三区的传球 / 尝试进入三区的传球
FT_ProgPass_p90 = 推进传球进三区次数 / 90
持球/推进效率
FT_CarryEff = 三区内成功带球推进距离 / 三区触球次数
终结效率
FT_ShotEff = 三区内射门数 / 三区触球数
FT_xG_per_shot = 三区总xG / 三区射门数
综合效率(加权)
FTE = w1·(xG+xA)/FT_touches
+ w2·FT_PassEff
+ w3·FT_CarryEff
+ w4·FT_ShotEff
权重可用 PCA 或 熵权法 从数据中学习,避免拍脑袋。
开源实现路径(以 socceraction 为例)
from socceraction.spadl import statsbomb as sb from socceraction.xthreat import ExpectedThreat # 1. 加载数据 games = sb.convert_to_actions(events, home_team_id) # 2. 计算 xT(威胁值) xt = ExpectedThreat() xt.fit(actions) # 训练转移矩阵 # 3. 筛选进攻三区动作 ft_actions = actions[actions['end_x'] >= 80] # StatsBomb 120 制 # 4. 计算效率 ft_touches = len(ft_actions) xg = ft_actions['xG'].sum() efficiency = xg / ft_touches if ft_touches else 0
归一化与可视化
# z-score 标准化 fte_z = (fte - fte.mean()) / fte.std() # 映射到 0-100 fte_score = 100 * (fte - fte.min()) / (fte.max() - fte.min())
可视化建议:
- 散点图:X=三区触球数,Y=效率值,颜色=球员位置
- 雷达图:传球/带球/射门/创造四个维度
关键陷阱与建议
- 样本量:三区触球 < 30 的球员效率值不稳定,需做 贝叶斯收缩(向均值回归)。
- 对手强度:需按对手防守强度调权,否则刷弱队数据虚高。
- 位置偏差:边锋和中锋的三区触球性质不同,建议分位置标准化。
- 公开数据源限制:StatsBomb 免费数据有限,FBref 只有汇总值,需要权衡。
- 可复现性:把权重、阈值写成配置文件(YAML),方便社区 review。
推荐参考项目
| 项目 | 用途 |
|---|---|
| socceraction | xT、VAEP 计算框架 |
| mplsoccer | 场地可视化 |
| StatsBombPy | 免费事件数据 |
| FBref + soccerdata | 抓取汇总统计 |
| kloppy | 多源数据统一接口 |
如果你告诉我你用的是哪套数据(StatsBomb / Opta / Wyscout)和目标(评价球员还是球队),我可以给出具体的字段映射 + 可运行代码。