python案例认为换人调整会影响结果吗?

wen python案例 1

Python案例:换人调整会影响结果吗?

这是一个很有意思的问题,涉及到因果推断(Causal Inference),下面我用一个具体的Python案例来探讨。

python案例认为换人调整会影响结果吗?

问题设定

假设我们想研究:足球比赛中教练换人,是否会影响比赛结果?

直觉上答案似乎是"会",但真正的问题是——如何用数据验证因果关系

案例:用Python模拟

模拟数据(带混杂因素)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
import statsmodels.api as sm
np.random.seed(42)
n = 5000
# 混杂因素:球队实力(0-1,越强越接近1)
team_strength = np.random.beta(2, 2, n)
# 落后比分(落后越多,越可能换人)
goal_diff = np.random.normal(0, 1, n)
goal_diff = goal_diff - 0.5 * team_strength  # 强队更可能领先
# 换人决策:受实力和比分影响
prob_sub = 1 / (1 + np.exp(-(2 - 3*team_strength + 1.5*goal_diff*(-1))))
substitution = np.random.binomial(1, prob_sub)
# 结果:胜/平/负(用二分类简化:是否赢球)
prob_win = 1 / (1 + np.exp(
    -(0.8 * team_strength + 1.0 * goal_diff + 0.3 * substitution)
))
win = np.random.binomial(1, prob_win)
df = pd.DataFrame({
    'strength': team_strength,
    'goal_diff': goal_diff,
    'substitution': substitution,
    'win': win
})

天真分析(只看相关性)

# 直接比较换人 vs 不换人的胜率
naive = df.groupby('substitution')['win'].mean()
print("天真分析 - 换人组胜率:", naive[1].round(3))
print("天真分析 - 不换人组胜率:", naive[0].round(3))

结果可能是:换人组胜率反而更低!

这会得出荒谬结论:"换人导致输球",原因就是混杂:落后时教练才换人。

控制混杂变量(回归)

X = sm.add_constant(df[['strength', 'goal_diff', 'substitution']])
model = sm.Logit(df['win'], X).fit(disp=0)
print(model.summary())
# 提取换人的系数(对数几率)
coef_sub = model.params['substitution']
odds_ratio = np.exp(coef_sub)
print(f"\n换人对胜率的因果效应(OR): {odds_ratio:.3f}")

控制实力和比分后,换人的系数变为正,这才是更接近真实的因果效应。

倾向得分匹配(PSM)

from sklearn.neighbors import NearestNeighbors
# 用混杂变量估计倾向得分
X_ps = df[['strength', 'goal_diff']]
ps_model = LogisticRegression().fit(X_ps, df['substitution'])
df['ps'] = ps_model.predict_proba(X_ps)[:, 1]
# 对每个换人样本,找PS相近的不换人样本
treated = df[df['substitution'] == 1]
control = df[df['substitution'] == 0]
nn = NearestNeighbors(n_neighbors=1).fit(control[['ps']])
_, idx = nn.kneighbors(treated[['ps']])
matched = control.iloc[idx.flatten()]
ate = treated['win'].mean() - matched['win'].mean()
print(f"PSM估计的换人因果效应: {ate:.3f}")
方法 是否可信
天真比较 换人降低胜率 ❌ 有混杂偏差
回归控制 换人略微提升胜率 ✅ 较可信
PSM匹配 接近回归结果 ✅ 较可信

答案:换人调整确实会影响结果,但要用对方法才能测出真实效应。

关键启示

  1. 相关 ≠ 因果:换人常常发生在落后时,直接比较会产生"辛普森悖论"
  2. 必须控制混杂变量:球队实力、当前比分、比赛时间、对手强度等
  3. 因果推断工具:回归、PSM、DID、工具变量、RCT
  4. 现实建议:想真正回答这个问题,最好用随机对照实验(比如球场上随机决定是否换人——当然现实中做不到)

如果你有具体场景(比如某个体育数据集、A/B测试数据),我可以把代码改得更贴近你的真实问题。

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