因果推断与 AI-SRE 技术解析(一)
从 Traversal 看因果推断基础与开源工具链
日期: 2026-03-05
关键词: 因果推断、AIOps、SRE、DoWhy、EconML、Traversal
系列说明: 本文是”因果推断与 AI-SRE 技术解析”系列的第一篇,主要介绍因果推断基础概念、核心原理,以及 DoWhy 和 EconML 两大开源工具链。后续文章将继续深入探讨 Traversal 的技术架构、与 LLM Agent 的集成、以及在实际工作中的应用。
本文背景
本文源于对微信公众号文章《当人读不懂 AI 代码,Traversal 如何做企业运维的 AI 医生?》的深度技术讨论。
原文核心内容概述:
Traversal 是一家由 MIT 和 Berkeley 教授及量化交易员组成的 AI-SRE 初创公司,2025 年 6 月完成 4800 万美元融资(Sequoia 和 Kleiner Perkins 领投)。
核心技术定位:
- 以因果推断为基础构建自主决策型 SRE Agent
- 区别于竞品的”相关性猜测”,通过因果推断实现根因定位
- 通过仿真沙盒与 GitHub 深度扫描,将故障精准锁定到具体代码变更
- 已在 American Express 和 Digital Ocean 等财富 100 强客户中实现 90%+ 归因准确率
本文目的:深入解析因果推断技术原理、开源工具链(DoWhy/EconML),以及其与 LLM Agent 的结合方式,为 AI-SRE 实践提供技术参考。
一、背景:为什么需要因果推断?
1.1 AI Coding 带来的新挑战
随着 Claude Code 等 AI 编程工具的普及,AI 贡献的代码已占公开 GitHub 的 4%。但这也带来了新问题:
- “Claude Hole” 现象: AI 写的系统逻辑有人类很难捕捉的问题
- 代码复杂度指数级增长,传统运维方式难以应对
- 企业每年因停机损失约 4000 亿美元
1.2 传统工具的局限
| 工具类型 | 能力 | 局限 |
|---|---|---|
| Datadog 等监控工具 | 展示指标波动 | 无法解释根本原因 |
| 传统 AIOps | 基于相关性检测异常 | 可能误判(混淆因素) |
| 规则引擎 | 硬编码专家经验 | 难以应对新场景 |
核心问题: 相关性不等于因果性。只看到”A 和 B 同时发生”,无法确定”A 导致 B”。
二、因果推断基础
2.1 核心概念:相关性与因果性
经典例子:冰淇淋与溺水
| 分析方式 | 观察 | 结论 | 问题 |
|---|---|---|---|
| 相关性分析 | 冰淇淋销量↑ 时,溺水事故↑ | 冰淇淋导致溺水? | ❌ 荒谬 |
| 因果推断 | 气温↑ → 冰淇淋销量↑ 气温↑ → 游泳人数↑ → 溺水↑ |
气温是共同原因 | ✅ 正确 |
关键区别: 因果推断回答的是——”如果我改变 X,Y 会怎样?”(干预效果)
2.2 因果推断的核心框架
2.2.1 因果图(Causal Graph / DAG)
有向无环图,表示变量间的因果关系:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 代码变更 │────→│ 故障 │←────│ 配置 │
│ (v2.3.1)│ │(DB延迟↑)│ │ 调整 │
└─────────┘ └────┬────┘ └─────────┘
│
┌────┴────┐
│ 告警 │
│ (观测到) │ ← 我们看到的只是症状
└─────────┘
关键洞察: 告警只是症状,真正的因果链需要推断。
2.2.2 反事实推理(Counterfactual)
核心问题:”如果当时没有做 X,结果会怎样?”
| 场景 | 传统监控 | 因果推断 |
|---|---|---|
| 发布后故障 | “CPU升高了,回滚吧” | “如果没有这次发布,故障会发生吗?→ 确定是发布导致的” |
2.2.3 Do-Calculus(干预演算)
由 Judea Pearl(图灵奖得主)提出,用于从观测数据推断干预效果:
P(Y | do(X)) ≠ P(Y | X)
左边:强制做 X 后 Y 的概率(干预)
右边:观察到 X 时 Y 的概率(条件)
例子:
P(治愈 | 吃药) = 30% (观察到吃药的人,治愈率30%)
P(治愈 | do(吃药)) = 60% (强制所有人吃药,治愈率60%)
区别:前者包含自我选择偏差(病情重的人才吃药)
三、开源工具:DoWhy 与 EconML
3.1 DoWhy:完整的因果推断流程
3.1.1 定位与资源
微软研究院开发的因果推断库,核心理念是四步法因果推断流程。
- GitHub: https://github.com/microsoft/dowhy
- 官方文档: https://www.pywhy.org/dowhy/
3.1.2 四步法架构
┌─────────────────────────────────────────────────────────────┐
│ DoWhy 四步法流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Model(建模) │
│ ├── 定义因果模型:treatment(干预)→ outcome(结果) │
│ ├── 指定 confounders(混杂变量) │
│ └── 可以用领域知识或从数据学习 │
│ ↓ │
│ 2. Identify(识别) │
│ ├── 给定因果图,能否从观测数据估计因果效应? │
│ ├── 使用 do-calculus 找到识别策略 │
│ └── 输出:估计方法(如后门调整、工具变量) │
│ ↓ │
│ 3. Estimate(估计) │
│ ├── 使用识别策略估计因果效应大小 │
│ ├── 支持多种方法:回归、匹配、加权、工具变量等 │
│ └── 输出:ATE(平均处理效应)、CATE(条件处理效应) │
│ ↓ │
│ 4. Refute(反驳/验证) │
│ ├── 检验估计结果的稳健性 │
│ ├── 常用检验: │
│ │ • 安慰剂检验(用假干预替换真实干预) │
│ │ • 数据子集检验(用部分数据重新估计) │
│ │ • 添加随机混杂变量 │
│ └── 如果检验通过,结果更可信 │
│ │
└─────────────────────────────────────────────────────────────┘
3.1.3 代码示例
import dowhy
from dowhy import CausalModel
import pandas as pd
import numpy as np
# 1. 准备数据
# 场景:研究"新功能上线"对"用户留存"的因果效应
data = pd.DataFrame({
'user_id': range(10000),
'treatment': np.random.binomial(1, 0.5, 10000), # 是否看到新功能
'age': np.random.normal(30, 10, 10000),
'income': np.random.lognormal(10, 1, 10000),
'tenure': np.random.exponential(2, 10000), # 使用时长
'outcome': np.random.binomial(1, 0.3, 10000) # 7日留存
})
# 2. 定义因果模型
model = CausalModel(
data=data,
treatment='treatment',
outcome='outcome',
common_causes=['age', 'income', 'tenure']
)
# 3. 识别因果效应
identified_estimand = model.identify_effect()
print("识别策略:")
print(identified_estimand)
# 4. 估计因果效应
estimate = model.estimate_effect(
identified_estimand,
method_name="backdoor.propensity_score_matching"
)
print(f"\n因果效应估计: {estimate.value}")
# 5. 验证结果稳健性
refutation = model.refute_estimate(
identified_estimand,
estimate,
method_name="placebo_treatment_refuter"
)
print("\n安慰剂检验结果:")
print(refutation)
3.2 EconML:异质性因果效应估计
3.2.1 定位与资源
微软研究院开发的面向机器学习的因果推断库,专注于异质性因果效应估计(CATE)。
- GitHub: https://github.com/microsoft/EconML
- 官方文档: https://econml.azurewebsites.net/
3.2.2 核心创新:从 ATE 到 CATE
传统因果推断 EconML 的创新
───────────── ─────────────────
ATE (平均效应) → CATE (条件平均效应)
"总体平均效果如何" "对不同人群,效果不同"
线性模型 → 机器学习模型
简单参数拟合 复杂模式自动学习
同质人群 → 异质人群
一刀切的策略 精准个性化策略
示例:
新推荐算法的效果
ATE = +5% 转化率 (总体平均提升5%)
↓ 没太大用
CATE(age=25, city=一线城市) = +15% (年轻城市用户效果很好)
CATE(age=60, city=农村) = -3% (老年农村用户反而下降)
→ 精准运营:只给第一类用户推新算法
3.2.3 核心方法体系
┌─────────────────────────────────────────────────────────────┐
│ EconML 方法体系 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 元学习器 (Meta-Learners) │
│ ───────────────────── │
│ • S-Learner: 单模型学习 Y ~ (T, X) │
│ • T-Learner: 分别对 T=0 和 T=1 建模 │
│ • X-Learner: 利用倾向得分优化 │
│ • R-Learner: 基于残差的学习(推荐) │
│ • DR-Learner: 双重稳健学习 │
│ │
│ 2. 工具变量 (Instrumental Variables) │
│ ─────────────────────────────── │
│ • DeepIV: 深度学习 + 工具变量 │
│ 场景:随机化实验不可行,但有工具变量 │
│ │
│ 3. 正交/双重机器学习 (Orthogonal/Double ML) │
│ ───────────────────────────────── │
│ • DML: 核心方法,Neyman-orthogonal 估计 │
│ • CausalForestDML: 因果森林 │
│ 特点:√n 一致性,可处理高维数据 │
│ │
│ 4. 深层因果模型 (Deep Causal Models) │
│ ─────────────────────────────── │
│ • CEVAE: 因果效应变分自编码器 │
│ • DeepGMM: 深度广义矩估计 │
│ 特点:处理隐变量、非线性效应 │
│ │
└─────────────────────────────────────────────────────────────┘
3.2.4 代码示例:使用 EconML
import numpy as np
import pandas as pd
from econml.dml import CausalForestDML
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
from sklearn.model_selection import train_test_split
# 1. 准备数据
np.random.seed(42)
n = 10000
data = pd.DataFrame({
'user_id': range(n),
'treatment': np.random.binomial(1, 0.5, n), # 是否看到新功能
'age': np.random.normal(30, 10, n),
'income': np.random.lognormal(10, 1, n),
'tenure': np.random.exponential(2, n), # 使用时长
})
# 真实效应:对新用户(tenure低)效果更好
true_effect = 0.1 + 0.3 * np.exp(-data['tenure'])
data['outcome'] = (
true_effect * data['treatment'] +
0.05 * data['age'] +
0.0001 * data['income'] +
np.random.normal(0, 0.1, n)
)
# 2. 划分训练/测试集
train, test = train_test_split(data, test_size=0.2, random_state=42)
# 3. 使用 CausalForestDML 估计 CATE
estimator = CausalForestDML(
model_y=RandomForestRegressor(n_estimators=100, random_state=42),
model_t=RandomForestClassifier(n_estimators=100, random_state=42),
discrete_treatment=True,
n_estimators=1000,
min_samples_leaf=10,
max_depth=5,
random_state=42
)
# 拟合模型
estimator.fit(
Y=train['outcome'],
T=train['treatment'],
X=train[['age', 'income', 'tenure']]
)
# 4. 预测 CATE
cate_pred = estimator.effect(test[['age', 'income', 'tenure']])
# 5. 分析异质性
print("CATE 统计摘要:")
print(f" 均值: {cate_pred.mean():.3f}")
print(f" 标准差: {cate_pred.std():.3f}")
# 按 tenure 分组
test_copy = test.copy()
test_copy['cate_pred'] = cate_pred
test_copy['tenure_group'] = pd.qcut(
test_copy['tenure'],
q=4,
labels=['新用户', '早期', '中期', '老用户']
)
print("\n按用户生命周期分组的平均 CATE:")
print(test_copy.groupby('tenure_group')['cate_pred'].mean())
四、DoWhy 与 EconML 对比
| 维度 | DoWhy | EconML |
|---|---|---|
| 核心定位 | 完整的因果推断流程 | 异质性因果效应估计 |
| 主要功能 | 建模→识别→估计→验证 | CATE 估计、DML、因果森林 |
| 与 ML 的关系 | 可使用 ML,但不依赖 | 深度集成 ML(sklearn) |
| 最佳场景 | 需要完整因果分析流程 | 需要精准定位”对谁有效” |
| 验证机制 | 丰富的反驳检验 | 置信区间、自助法 |
两者如何结合?
# DoWhy + EconML 结合示例
# 1. 用 DoWhy 建模和识别
model = dowhy.CausalModel(
data=data,
treatment='treatment',
outcome='outcome',
common_causes=['age', 'income', 'tenure']
)
identified_estimand = model.identify_effect()
# 2. 用 EconML 进行估计(作为 DoWhy 的估计方法)
estimate = model.estimate_effect(
identified_estimand,
method_name="econml.dml.CausalForestDML",
method_params={
"init_params": {...},
"fit_params": {}
}
)
# 3. 用 DoWhy 进行验证
refutation = model.refute_estimate(
identified_estimand,
estimate,
method_name="placebo_treatment_refuter"
)
五、总结
5.1 核心价值
| 组件 | 贡献 | 局限 |
|---|---|---|
| LLM | 自然语言理解、通用知识、灵活推理 | 幻觉、统计相关性、无真因果 |
| 因果推断 | 确定性决策、根因定位、可解释性 | 需要结构化数据、领域知识 |
结合后的价值:
- 根因分析: 从”可能相关”到”确定因果”
- 决策支持: 从”经验猜测”到”数据驱动的最优决策”
- 可解释性: 从”黑盒”到”白盒因果路径”
- 鲁棒性: 从”训练数据分布”到”干预下的泛化”
5.2 集成架构
┌─────────────────────────────────────────────────────────┐
│ Agent 体系架构 │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 感知层 │───→│ 推理层 │───→│ 执行层 │ │
│ │ (数据收集) │ │ (决策逻辑) │ │ (工具调用) │ │
│ └─────────────┘ └──────┬──────┘ └─────────────┘ │
│ │ │
│ ┌─────────────┼─────────────┐ │
│ ↓ ↓ ↓ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ LLM │ │ 因果 │ │ 规则 │ │
│ │ (通用 │ │ 推断 │ │ 引擎 │ │
│ │ 推理) │ │ (因果 │ │ (硬编码) │ │
│ │ │ │ 推理) │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ ↑ │
│ │ 互补关系: │
│ │ • LLM 提供通用理解 │
│ │ • 因果推断提供确定性决策 │
│ └─────────────────────────────────────┘
└─────────────────────────────────────────────────────────┘
5.3 协作流程示例
场景: 用户反馈”昨天发布 v2.3.1 后,支付服务延迟飙升”
Step 1: LLM 理解与自然语言处理
─────────────────────────────────
LLM 提取关键信息:
• 时间:昨天
• 事件:发布 v2.3.1
• 症状:支付服务延迟飙升
• 隐含假设:发布导致延迟(相关性)
生成初步查询:
"验证:v2.3.1 发布是否导致支付服务延迟飙升?"
Step 2: 因果推断引擎执行因果分析
───────────────────────────────────
(1) 构建因果图:
从变更历史学习结构:
v2.3.1 发布 → 订单服务变更 → 数据库负载↑ → 延迟飙升
↓
同时期其他变更:配置更新、依赖升级(混杂因素)
(2) 反事实推理:
问题:"如果没有 v2.3.1 发布,延迟会飙升吗?"
方法:do-calculus,后门调整
数据:历史同期无发布时的延迟基线
(3) 效应估计:
ATE = E[延迟|do(发布)] - E[延迟|do(不发布)]
结果:ATE = 0.73 (73% 概率延迟飙升)
置信区间:[0.68, 0.78],p < 0.001
(4) 仿真验证:
在沙盒环境复现 v2.3.1 发布 → 确认延迟飙升
回滚 v2.3.1 → 确认延迟恢复
验证因果假设成立
Step 3: LLM 解释与报告生成
──────────────────────────
LLM 接收因果推断引擎的结构化输出:
• 因果效应:ATE = 0.73,置信度 99%
• 因果路径:v2.3.1 → 订单服务 → 数据库负载 → 延迟
• 验证结果:沙盒复现成功
生成自然语言报告:
"基于因果推断分析,v2.3.1 发布是导致支付服务延迟飙升的根因。
分析过程如下:
1. 因果定位:v2.3.1 中的订单查询优化导致数据库连接池耗尽,
进而引发延迟飙升。
2. 因果验证:通过反事实推理,如果没有 v2.3.1 发布,
延迟飙升的概率为 27%(相比实际的 73%),差异显著(p<0.001)。
3. 仿真验证:在隔离沙盒中复现 v2.3.1 发布,确认延迟飙升;
回滚后延迟恢复,验证因果假设成立。
建议:立即回滚 v2.3.1,并优化订单查询的数据库连接池配置。"
Step 4: 决策与执行
──────────────────
• 基于因果推断结果,生成修复建议
• 评估修复方案的风险(副作用的概率)
• 决策:自动执行 / 人工确认 / 仅告警
• 执行修复并监控验证
五、总结
5.1 核心价值
| 能力 | 传统方法 | 因果推断增强 |
|---|---|---|
| 根因分析 | 相关性猜测,误判率高 | 因果定位,确定性高 |
| 决策支持 | 经验驱动,难以量化 | 数据驱动,可量化干预效果 |
| 可解释性 | 黑盒规则 | 白盒因果路径 |
| 泛化能力 | 训练分布内有效 | 可预测干预下的结果 |
6.2 技术选型建议
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 完整的因果分析流程 | DoWhy | 四步法完整,验证机制丰富 |
| 精准定位”对谁有效” | EconML | CATE 估计,异质性分析 |
| 两者结合 | DoWhy + EconML | 流程 + 精准估计 |
| 大规模生产环境 | 自研 + 开源组合 | 性能优化、领域适配 |
6.3 实践建议
- 从小场景开始:选择数据质量好、因果关系相对明确的场景试点
- 重视领域知识:因果图构建需要 SRE 专家的经验输入
- 建立验证闭环:因果推断的结果必须通过 A/B 测试或沙盒验证
- 持续迭代优化:根据反馈不断优化因果模型和推断算法
参考资源
- DoWhy: https://github.com/microsoft/dowhy
- EconML: https://github.com/microsoft/EconML
- Judea Pearl: “The Book of Why”(因果推断经典著作)
- Traversal: https://traversal.ai/(本文分析的创业公司)
本文基于 2026-03-05 的技术讨论整理,主要探讨因果推断在 AI-SRE 领域的应用,以及 DoWhy、EconML 等开源工具的使用。