Skip to content

元数据卡

  • 前置知识:第5章(统计推断)
  • 预计时间:50 分钟
  • 核心难度:进阶
  • 阅读模式:高度专注
  • 完成标志:能设计一个抽样方案,能区分相关关系和因果关系

你的进度

你构建了一组特征,训练了模型,预测精度还行。但一个更尖锐的问题浮出水面:

你发现训练数据里,前线的任务出勤率普遍高于后方。你能说'在前线提升出勤率'吗?不能。可能是因为前线本来就派了更多精英哨兵——数据里的差异不一定是因果关系。

你发现数据里的'相关性'和'因果性'之间,有一条你之前完全没意识到的鸿沟。

你的任务

在第 3 章里你发现"训练时间越长,任务成功率越高",在第 5 章你检验了这个差异有统计意义。但你能说"增加训练时间 导致 提高成功率"吗?不能。可能的原因是:本来就熟练的团队会花更多时间训练——因果关系反了。这一章教你区分相关和因果,并了解如何用数据做因果推断。


抽样:数据收集的第一道关口

你分析的数据不会包含总体的全部个体——只能抽样。抽样方式直接决定了分析结论能推广到多广。

python
import pandas as pd
import numpy as np

# 简单随机抽样
sample = df.sample(n=1000, random_state=42)

# 分层抽样 —— 每类任务按比例抽取
def stratified_sample(df, strata_col, frac=0.1):
    return df.groupby(strata_col, group_keys=False).apply(
        lambda x: x.sample(frac=frac, random_state=42)
    )

stratified = stratified_sample(df, "mission_type", frac=0.1)

# 系统抽样 —— 每第 k 个取一个
k = len(df) // 1000
systematic = df.iloc[::k]

这三种方式各有适用场景:

方法何时用风险
简单随机总体均匀,无分层少数群体可能完全被错过
分层抽样各层占比悬殊,需保证每层都有样本需要知道层的大小比例
系统抽样数据有序排列,你无法随机访问如果数据有周期模式会引入偏差

大多数偏差来自抽样不是随机的。如果你只分析最近一周的数据,而最近一周刚好有特殊事件,你的结论就不能推广到其他时间段。

相关 ≠ 因果

这是统计学的第一戒律。三个场景说明为什么:

  1. 反向因果:关系存在,但方向反了。"训练时间长 → 成功率高"可能是"高成功率的任务本身需要更多训练"。
  2. 混杂因素:隐藏的第三个变量影响了原因和结果。"穿越大片荒野的任务成功率高"——是因为穿越荒野本身有益,还是因为只有最有经验的团队才被派去做这类任务?
  3. 巧合:100 个独立测试中,期望有 5 个出现 p < 0.05。找到相关太容易了。

因果推断工具箱

当你需要从观测数据中推断因果关系时,用这些方法。

随机对照实验

最可靠的方法。把实验单位随机分配到处理组和对照组,随机化处理掉所有混杂因素。

python
# 随机分配模拟
np.random.seed(42)
n_missions = len(df)

# 随机分配到两组
df["treatment"] = np.random.choice([0, 1], size=n_missions, p=[0.5, 0.5])

# 比较两组的平均成功率
treatment_effect = (
    df[df["treatment"] == 1]["success_rate"].mean()
    - df[df["treatment"] == 0]["success_rate"].mean()
)
print(f"处理效应: {treatment_effect:.3f}")

随机化的关键价值:在期望上,两组除了处理变量外,其他所有特征都是可比的。所以观测到的差异可以归因于处理。

但很多场景不能做随机化(无法随机分配"团队规模"或"任务难度")。这时你需要观察性研究的工具。

DAG(有向无环图)

画因果图之前,先问自己:哪些变量可能影响原因 结果?

team_experience ──→ training_time
     ↓                    ↓
success_rate  ←───────────┘

这个 DAG 告诉你:team_experience 是混杂因素。如果只看 training_timesuccess_rate 的相关,你会误判。控制 team_experience 后你再分析,结果可能完全不同。

python
# 控制混杂因素 —— 分层分析
for exp_level in df["team_experience"].unique():
    subset = df[df["team_experience"] == exp_level]
    corr = subset["training_time"].corr(subset["success_rate"])
    print(f"经验={exp_level}: 训练时间与成功率的相关 = {corr:.3f}")

工具变量

当存在不可观测的混杂因素时,找一个"只通过原因影响结果的变量"作为工具。

这在数据科学中是从观测数据做因果推断的核心策略之一。工具变量必须满足两个条件:

  1. 相关性:工具变量与处理变量相关
  2. 排他性:工具变量只通过处理变量影响结果

如果你做 AB 测试的随机分组(分配变量),它天然是一个完美的工具变量——它随机决定了处理与否,且只通过处理影响结果。


常见陷阱

  • 把观测到的相关直接当作因果。不控制混杂因素就下因果结论。
  • 过度依赖统计显著性做决策。小样本下的显著关联可能在更大样本下消失。
  • 忽略选择偏差。你只分析了完成了任务的数据——那些中途失败的任务没有记录,你的样本是有偏的。
  • 在因果推断中混淆"控制变量"的含义。控制变量不当可能引入"对撞偏差"——受原因和结果共同影响的变量不应该被控制。

通关挑战

  • 热身:从你身边找一个"相关但不因果"的例子,画出它的 DAG。
  • 挑战:用一个包含混杂因素的数据集,展示"控制混杂前"和"控制混杂后"的效果差异。
  • 排障:一份报告声称"参与额外培训的团队成功率高出 10%"。列出至少三种可能的替代解释。

验收标准

  • 能解释为什么相关不等于因果
  • 能画一个简单的 DAG 来识别混杂因素
  • 理解随机对照实验为什么是因果推断的黄金标准
  • 知道在什么场景下需要使用工具变量

旅人笔记

相关性描述了过去;因果推断指导未来行动。知道二者的区别,是数据科学家最重要的判断力。


下一站预告

你学会了从小样本推断总体、从相关判断因果。但数据量继续增长——当你的 DataFrame 大到内存放不下时,你需要分布式数据处理。

Built with VitePress | Software Systems Atlas