关于 causal-inference
causal-inference 是用于判断观测数据能否支持因果主张的推理技能,帮助数据和产品团队检查反事实、混杂因素、研究设计及结论面临的威胁。
主要功能
- 01反事实与混杂因素分析
- 02含中介变量和碰撞变量的因果图
- 03RCT、双重差分和自然实验指引
- 04A/B 测试有效性检查清单
- 05结构化证据与结论格式
适用场景
- 01评估产品改动是否导致指标变化
- 02检查 A/B 测试的偏差或设计问题
- 03无法随机分组时比较实验组与对照组趋势
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ andurilcode/ craftwork --skill causal-inference安装后在 Claude Code 中输入/causal-inference确认已加载。
详细介绍
因果推断
核心原则:相关不等于因果——但有时确实存在因果关系,知道何时如此至关重要。在依据数据采取行动之前,使用反事实、混杂因素和因果结构,严谨地追问“X 是否真的导致了 Y?”
核心区别
相关:X 和 Y 同步变化。 因果:改变 X 会改变 Y——而且我们知道 为什么。
重要性:
- 对没有因果路径的相关因素采取干预,会白费力气
- 遗漏混杂因素会导致把影响归因于错误的原因
- 基于虚假相关采取行动可能让情况更糟
关键概念
反事实推理
根本问题是:
“在其他条件相同的情况下,如果 X 不同,Y 会发生什么?”
你无法同时观察同一对象处于处理和未处理状态下的情况——这就是因果推断的根本问题。每个因果主张都隐含着反事实;应明确说出它。
混杂因素
第三个变量 Z,它在因果上同时影响 X 和 Y,使二者产生相关性,但彼此之间没有直接的因果路径。
Z → X
Z → Y
X 和 Y 相关,但 X 不会导致 Y。对 X 进行干预毫无作用。
示例:冰淇淋销量和溺水率相关。混杂因素:炎热天气 → 冰淇淋销量上升且游泳人数增加 → 溺水人数上升。禁止售卖冰淇淋并不会减少溺水。
产品/工程工作中的常见混杂因素:
- 季节性(功能采用率和参与度同步变化)
- 选择偏差(采用功能的用户本来就更加活跃)
- 外部事件(你发布功能的同一周,竞争对手倒闭了)
- 时间趋势(干预前两项指标就已经在变化)
中介变量与混杂因素
中介变量位于因果路径上——X → M → Y。阻断它就会阻断影响。 混杂因素位于二者的上游——应对其进行控制。
混淆二者会导致过度校正(控制中介变量会消除你要寻找的影响)。
辛普森悖论
数据汇总后,观察到的趋势可能反转。由于组别规模不均,某项处理在总体上可能看似有害,但在每个子组中都有益(反之亦然)。
务必询问:拆分数据后,结论会改变吗?
建立因果关系的工具
随机对照实验(黄金标准)
随机分配能让处理与所有其他变量相互独立,从而消除混杂。
在产品工作中:A/B 测试就是随机对照试验。其有效性取决于:
- 随机分配(而非自我选择)
- 足够的样本量(统计功效)
- 单一处理变更(不同时进行多项变更)
- 对象之间不存在相互干扰(SUTVA)
- 正确选择指标
A/B 测试的失效模式:
- 新奇效应:随着用户逐渐习惯,早期提升会减弱
- 样本比例失配:组别规模不均,表明随机化失败
- 多重比较:测试 20 项指标时,在 p=0.05 的显著性水平下,偶然出现 1 个假阳性的概率为 1/20
- 偷看结果:结果看起来不错时提前停止,会抬高假阳性率
双重差分(DiD)
比较处理组与对照组随时间的变化。
Effect = (Treated_after - Treated_before) - (Control_after - Control_before)
假设:如果没有处理,两组原本会遵循平行趋势。 适用场景:你有处理前后的数据和自然形成的对照组,但无法进行随机分配。
自然实验
外部因素会造成近似随机的处理差异,例如政策变化、地理边界、系统中断或按队列分批发布。
示例:按注册日期逐步推出功能——早期用户是处理组,后期用户是对照组(前提是用户无法自行选择注册时间)。
因果图(DAG)
绘制所有变量及其因果关系。明确标出混杂因素和中介变量,并确定应控制哪些变量。
[Confounder Z] → [Treatment X] → [Mediator M] → [Outcome Y]
↓___________________________________↑
解读 DAG:控制 Z(混杂因素),不要控制 M(中介变量)。
输出格式
🔍 正在检验的因果主张
- 所述主张:[断言了什么导致什么]
- 改写为反事实问题:“如果 X 没有发生,在其他条件相同的情况下,Y 会有所不同吗?”
🕸️ 因果结构
绘制因果图:
- 提议的因果路径有哪些?
- 可能的混杂因素有哪些?
- 中介变量有哪些(位于因果路径上)?
- 碰撞变量有哪些(由 X 和 Y 共同导致——对其进行控制会打开虚假路径)?
⚠️ 对因果解释的威胁
对每项标注:存在 / 可能存在 / 不太可能
| 威胁 | 是否存在? | 证据 | 对结论的影响 |
|---|---|---|---|
| 混杂 | |||
| 选择偏差 | |||
| 反向因果(Y → X) | |||
| 共同原因(Z → X,Z → Y) | |||
| 季节性 / 时间趋势 | |||
| 时间上的巧合 | |||
| 辛普森悖论 |
📊 证据质量
- 所用设计:[RCT / DiD / 自然实验 / 观察性研究]
- 证据强度:[强 / 中等 / 弱]
- 关键假设:[设计有效必须满足的条件]
- 假设违反情况:[是否有迹象表明假设不成立]
🎯 结论
- 因果主张是否成立?:[是 / 可能成立 / 不确定 / 否]
- 如果成立:估计效应大小和置信度
- 如果不确定:什么证据可以消除疑问?
- 如果不成立:哪种替代解释更符合数据?
🔬 后续步骤
- 哪种实验能以最高效率确立因果关系?
- 可以利用数据中的哪些自然变异?
- 应测量并控制哪些混杂因素?
A/B 测试的因果推断检查清单
在相信结果之前:
- 分配是否真正随机?检查样本比例失衡。
- 是否只改变了一项内容?
- 样本量是否足以检测预期效应?
- 测试是否运行了完整的一周周期?
- 是否预先指定了主要指标?
- 按理应发生变化的次要指标是否确实发生了变化?
- 是否存在合理的机制,可以解释 X 为何会导致 Y?
- 不同细分群体中的效应是否一致?(检查辛普森悖论)
思考提示
- “反事实是什么?如果没有这项变化,会发生什么?”
- “同一时间还有什么变化可能解释这一结果?”
- “我们正在比较的单位是否真的具有可比性?”
- “是否存在能解释这种相关性的第三个变量?”
- “这一机制是否合理——X 为什么会导致 Y?”
- “拆分数据后,结论会改变吗?”
- “如果再次运行这项实验,我们还会看到相同的结果吗?”