3. 因果推断入门:相关性不等于因果性,潜在结果框架与DAG
在供应链预测,尤其是间歇需求预测中,我们经常发现:“高相关性”并不等于“因果性”。例如,促销活动期间销量上升,但销量上升也可能是因为季节性需求高峰恰好与促销时间重合。如果不区分相关与因果,模型会学到虚假关联,导致预测在环境变化时崩溃。
本章从三个核心概念入手,建立因果推断的工程直觉:相关 vs 因果、潜在结果框架、有向无环图(DAG)。
3.1 相关性 ≠ 因果性:三个经典陷阱
在间歇需求预测中,以下三类虚假相关最为常见:
| 陷阱类型 | 预测场景举例 | 为什么不是因果 |
|---|---|---|
| 混杂偏倚 | 冰淇淋销量与溺水人数高度相关 | 共同原因“夏季高温”同时驱动两者 |
| 选择偏倚 | 只分析有促销的SKU,发现促销与销量负相关 | 促销通常针对滞销品,样本选择导致反向关联 |
| 反向因果 | 高库存水平与高缺货率同时出现 | 缺货导致紧急补货,库存上升是结果而非原因 |
工程启示: 在特征筛选时,仅靠相关系数或树模型重要性排序会引入虚假特征。必须用因果图显式标注变量关系,再决定哪些特征进入预测模型。
3.2 潜在结果框架:因果效应的数学定义
潜在结果框架(Rubin Causal Model)为每个个体定义了两种潜在状态:
- Y(1):接受处理(如促销)时的潜在结果(销量)。
- Y(0):未接受处理时的潜在结果(销量)。
个体因果效应定义为:τᵢ = Yᵢ(1) - Yᵢ(0)。但现实中,每个个体只能观测到一种状态,这就是因果推断的基本问题。
在间歇需求预测中,我们关心的是平均处理效应(ATE):
ATE = E[Y(1) - Y(0)]
对于间歇需求,ATE 需要分层计算:
- 需求发生概率 P(Y > 0 | Treatment)
- 需求发生时的平均量 E[Y | Y > 0, Treatment]
潜在结果框架要求满足三个关键假设:
- SUTVA:个体之间无交互(一个SKU的促销不影响另一个SKU的潜在结果)。
- 条件可忽略性:给定协变量后,处理分配与潜在结果独立。
- 正值性:每个个体都有非零概率接受处理。
间歇需求特化: 对于零膨胀数据,ATE 应分解为“是否发生”和“发生多少”两个因果通道。建议分别估计两个通道的因果效应,再合成总效应。
3.3 有向无环图(DAG):因果结构的可视化语言
DAG 用节点表示变量,用有向边表示因果关系。在间歇需求预测中,DAG 帮助我们识别:
- 混杂因子:同时影响处理和结果,需要控制。
- 对撞因子:同时受处理和结果影响,不能控制。
- 中介变量:处理通过它影响结果,控制它会阻断因果路径。
下面是一个典型的间歇需求预测 DAG 示例,展示促销、季节性、库存与需求之间的因果结构:
3.4 DAG 在特征工程中的三条操作规则
基于 DAG 结构,我们可以制定特征筛选的因果规则:
| DAG 结构 | 操作 | 间歇需求预测示例 |
|---|---|---|
| 混杂因子(X → T, X → Y) | 必须控制(加入模型) | 季节性同时影响促销决策和需求,必须作为特征 |
| 对撞因子(T → C, Y → C) | 禁止控制(剔除特征) | 历史销量是需求和缺货率的对撞,不应作为特征 |
| 中介变量(T → M → Y) | 根据目标决定是否控制 | 库存水平是促销影响需求的中介,预测总效应时不控制 |
工程踩坑记录: 某项目将“历史销量”作为强特征预测未来需求,模型在促销期间表现极好,但促销结束后预测崩溃。事后分析发现:历史销量是促销和缺货率的对撞因子,模型学到了虚假的“促销→高销量→高库存→再促销”循环,而非真实的因果机制。
3.5 从 DAG 到特征提取:三步工程流程
在间歇需求预测项目中,我们按以下步骤将因果结构落地为特征:
- 绘制 DAG:与业务方一起,画出所有可能影响需求的变量及其因果方向。
- 识别节点类型:标记每个节点为混杂、对撞、中介或纯结果。
- 生成特征集:
- 保留所有混杂因子作为特征。
- 剔除所有对撞因子。
- 对中介变量,根据预测目标(总效应 vs 直接效应)决定是否保留。
下面是一个完整的特征提取流程 DAG:
3.6 本章小结
- 相关性不等于因果性:混杂、对撞、选择偏倚是间歇需求预测中虚假关联的主要来源。
- 潜在结果框架:为因果效应提供了严格的数学定义,在零膨胀数据中需分解为“发生概率”和“发生量”两个通道。
- DAG 是特征工程的因果罗盘:通过识别混杂(必须控制)、对撞(必须剔除)、中介(按需控制),可以系统性地生成因果有效的特征集。