【因果推断实战】我用因果推断找良率根因:告别“相关不等于因果“的误判

📅 2026/7/13 7:26:10 👁️ 阅读次数 📝 编程学习
【因果推断实战】我用因果推断找良率根因:告别“相关不等于因果“的误判

一、问题背景:相关性的"陷阱"

做良率根因,XGBoost特征重要度说"温度最重要",于是调低温度,良率没变。后来发现:温度高的是老旧设备,老旧设备本身良率低——温度和良率是"共同原因(设备老化)"导致的相关,非因果。

2022年我们被这个伪相关坑了,白调3周参数。

痛点:ML给相关性,工业决策要因果性;伪相关导致错误干预(调了没用的参数)。

二、技术原理:为什么需要因果推断

因果推断用Do-calculus/结构因果模型(SCM)区分相关与因果,通过"干预"(do-operator)计算因果效应。

方法:构建因果图(设备年龄→温度/良率),用后门调整/工具变量剥离混杂,估计"调温度"的真实因果效应。

技术:DoWhy/EconML库。局限:需领域知识建因果图(错图得错因果)。

三、实战案例:某良率因果分析

2023年用DoWhy做良率因果分析:建因果图(设备年龄→温度+良率),后门调整剥离混杂。

结论:温度的因果效应仅-0.3%(伪相关显示-2%),真正因果是"设备年龄"(效应-5%)。优先换老旧设备,良率+4%。

踩坑:初期因果图漏了"产品类型"混杂变量,效应估计偏差,补全后修正。

图1:因果推断揭示温度是伪相关,设备年龄才是真根因

四、完整代码

因果效应估计代码(DoWhy):

import dowhy
from dowhy import CausalModel

# 1. 构建因果图(领域知识)
model = CausalModel(
data=df,
graph="""digraph {
设备年龄 -> 温度; 设备年龄 -> 良率; 温度 -> 良率
}""",
treatment="温度", outcome="良率"
)

# 2. 识别(后门调整)并估计因果效应
estimands = model.identify_effect()
effect = model.estimate_effect(estimands,
method="backdoor.linear_regression")
print(f"温度的因果效应: {effect.value:.2f}%") # 剥离混杂后的真实效应

【为什么这样写】graph用领域知识显式编码因果结构(设备年龄同时影响温度和良率,是混杂变量);identify_effect自动找后门路径;estimate_effect用后门调整"控制设备年龄"后估计温度的纯净因果效应,避免伪相关误导决策。

五、效果对比:分析方法对比

良率根因分析:

指标

ML相关性

因果推断

价值

根因识别

温度(伪)

设备年龄(真)

纠偏

干预效果

无效

良率+4%

有效

决策风险

高(误调)

低(精准)

可解释

特征重要

因果图

更强

因果推断能剥离混杂找到真根因,避免伪相关导致的错误干预。

图2:因果推断排序:设备年龄效应最大,温度几乎无因果

六、实施建议:落地建议

阶段1:领域专家建因果图(关键);

阶段2:用DoWhy估计因果效应;

阶段3:优先干预强因果因素。

七、进阶方向:从因果到决策

当前局限:因果图需人工。下一步因果发现(自动学图)。

行业趋势:因果+ML融合。

我的判断:因果推断是工业AI决策核心。

------------------------------------------------------------

【评论引导】你们做根因分析被相关性坑过吗?评论区聊聊。

【VIP推广】VIP资源《因果推断根因分析代码包》已上传,私信[因果]获取。

【粉丝关注】关注我,分享半导体质量AI实战。