根据python案例,传球成功率与胜率相关性?

wen python案例 9

传球成功率与胜率相关性分析(Python案例)

问题背景

在足球数据分析中,常有人问:传球成功率高的球队是否更容易赢球? 下面用 Python 做一个完整的相关性分析案例。

根据python案例,传球成功率与胜率相关性?


数据准备

假设我们有一份联赛球队数据(可替换为真实数据,如 FBref、StatsBomb、中超/英超数据):

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 模拟 20 支球队一个赛季的数据
np.random.seed(42)
n = 20
df = pd.DataFrame({
    'team': [f'Team_{i}' for i in range(1, n+1)],
    # 传球成功率 (%)
    'pass_accuracy': np.random.normal(80, 5, n).clip(65, 92),
    # 胜率 (%) —— 与传球成功率有一定正相关 + 噪声
    'win_rate': 0.6 * np.random.normal(80, 5, n).clip(65, 92) 
                + 0.4 * np.random.normal(50, 15, n) + np.random.normal(0, 5, n)
})
df['win_rate'] = df['win_rate'].clip(10, 90)
print(df.head())
print(df[['pass_accuracy', 'win_rate']].describe())

⚠️ 注意:如果使用真实数据,请确保样本量足够(一般 ≥ 20 才有统计意义)。


可视化:散点图 + 回归线

plt.figure(figsize=(8, 6))
sns.regplot(x='pass_accuracy', y='win_rate', data=df,
            scatter_kws={'s': 80, 'alpha': 0.7},
            line_kws={'color': 'red'})
plt.xlabel('传球成功率 (%)')
plt.ylabel('胜率 (%)')'传球成功率 vs 胜率')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

观察散点是否呈现从左下到右上的趋势,即可初步判断相关性方向。


计算相关系数

# 1. Pearson 相关系数(线性相关,要求近似正态)
r, p_pearson = stats.pearsonr(df['pass_accuracy'], df['win_rate'])
print(f"Pearson r = {r:.3f}, p = {p_pearson:.4f}")
# 2. Spearman 秩相关(非线性单调关系更稳健)
rho, p_spearman = stats.spearmanr(df['pass_accuracy'], df['win_rate'])
print(f"Spearman ρ = {rho:.3f}, p = {p_spearman:.4f}")
# 3. Kendall τ(小样本更稳健)
tau, p_kendall = stats.kendalltau(df['pass_accuracy'], df['win_rate'])
print(f"Kendall τ = {tau:.3f}, p = {p_kendall:.4f}")
# 4. 相关系数矩阵 + 热力图
corr = df[['pass_accuracy', 'win_rate']].corr(method='pearson')
print(corr)
sns.heatmap(corr, annot=True, cmap='RdBu_r', vmin=-1, vmax=1)'相关系数矩阵')
plt.show()

结果解读参考

相关系数 r 相关强度
0 – 0.2 极弱/无
2 – 0.4 弱
4 – 0.6 中等
6 – 0.8 强
8 – 1.0 极强
  • p < 0.05:相关性统计显著;
  • p ≥ 0.05:不能拒绝"无相关"的原假设(可能是样本太小)。

进一步:线性回归量化影响

import statsmodels.api as sm
X = sm.add_constant(df['pass_accuracy'])
y = df['win_rate']
model = sm.OLS(y, X).fit()
print(model.summary())
print(f"\n回归方程: 胜率 = {model.params['const']:.2f} + {model.params['pass_accuracy']:.2f} × 传球成功率")
print(f"R² = {model.rsquared:.3f}  →  传球成功率可解释胜率 {model.rsquared*100:.1f}% 的方差")

解读示例:若系数为 0.8,表示"传球成功率每提高 1 个百分点,胜率平均提高约 0.8 个百分点"。


典型结论(基于真实足球数据的经验)

对英超/五大联赛的真实数据分析通常得到:

指标 典型结果
Pearson r 4 ~ 0.6(中等偏强正相关)
Spearman ρ 4 ~ 0.6
p 值 < 0.01(显著)
R² 15 ~ 0.35
  1. 传球成功率与胜率呈显著正相关,传控能力强的球队整体战绩更好;
  2. 但 R² 通常只有 0.2~0.35,说明传球成功率只能解释部分胜率差异,远不是唯一决定因素;
  3. 存在混同变量:强队往往传球成功率高,但原因是整体实力强,而非"传球好所以赢";
  4. 位置/风格差异:防守反击型球队(如马竞)传球成功率中等但胜率高,说明该指标对战术风格敏感。

注意事项与改进建议

问题 建议
样本量小 使用多赛季、多联赛数据(≥ 100 场/队)
混淆变量 加入控球率、射门数、xG 等做多元回归
因果推断 相关性 ≠ 因果;可用"传球成功率 vs 联赛积分"、"控制球队实力分层"
分布不正态 优先用 Spearman / Kendall
区间数据 用"每场传球成功率"而非赛季均值,避免聚合偏差
极端值 检查异常球队(如降级队)是否主导相关

多元回归示例

X_multi = sm.add_constant(df[['pass_accuracy', 'possession', 'shots', 'xG']])
model_multi = sm.OLS(y, X_multi).fit()
print(model_multi.summary())  # 观察传球成功率在其他变量下的偏相关系数

一句话总结

传球成功率与胜率通常呈中等偏强的正相关(r ≈ 0.4–0.6,p < 0.05),但 R² 仅 0.2–0.35,说明它是重要但不是决定性的因素;分析时必须控制球队实力、战术风格等混杂变量,并区分"相关"与"因果"。

如需,我可以提供接入真实数据的爬虫/API 代码(FBref、StatsBomb、Understat)继续深入。

抱歉,评论功能暂时关闭!

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝