mcpField
C
causal-inference

causal-inference

github.com/andurilcode数据与数据库845 次安装28 周前更新
代码仓库

关于 causal-inference

causal-inference 是用于判断观测数据能否支持因果主张的推理技能,帮助数据和产品团队检查反事实、混杂因素、研究设计及结论面临的威胁。

主要功能

  1. 01反事实与混杂因素分析
  2. 02含中介变量和碰撞变量的因果图
  3. 03RCT、双重差分和自然实验指引
  4. 04A/B 测试有效性检查清单
  5. 05结构化证据与结论格式

适用场景

  1. 01评估产品改动是否导致指标变化
  2. 02检查 A/B 测试的偏差或设计问题
  3. 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?”
  • “拆分数据后,结论会改变吗?”
  • “如果再次运行这项实验,我们还会看到相同的结果吗?”

评论

支持 Markdown