基于因果推断的根因分析

article/2025/6/8 5:23:26

前言

对复杂信息系统进行运维的相关研究工作中,一个子领域是“根因定位”。这个子领域的一种问题定义是:在复杂系统的大量监控变量(如CPU利用率、响应时间)中,找到“根因”(“根因”指具体的监控变量)。在这一问题定义下,近年来的论文中采用的方法主要是深度优先搜索和随机游走。但这两个方法说不清楚为什么应该有效,甚至问题定义都有问题:“根因定位”指“定位根因”!

我们的工作用因果推断的语言为这个问题给出了一个形式化定义,继而给出了一个针对这一问题定义的、说得清楚为什么应该有效的、简单的方法。该工作已发表于KDD'22[1]。囿于投稿时的认识、时间压力、篇幅限制,一些内容在论文中没有说明白。这篇文章将展开论述忠实性假设、提出结构化构图的动机等论文中没交代清楚的内容,同时也充当一个面向国内读者的中文介绍。

问题定义

Judea Pearl将已有的因果推断任务分为三种,构成因果阶梯[2]。在因果阶梯上,第一级关注变量之间的联合概率分布。第二级则在第一级之上,关注当我们做些什么之后概率分布的变化。这里的“做些什么”在因果推断中称为干预。反事实推理处于因果阶梯的第三级,其特点在于施加的干预与事实相违背。

Judea Pearl的因果阶梯

我们将因果推断中的干预与根因分析中的故障建立联系,将无故障数据和故障数据映射为对干预前后两个分布的采样。基于这样的概念映射,我们将根因分析映射为一个新的因果推断任务——干预识别,即,基于干预前分布 P(V) 识别干预后分布 P(V∣do(m)) 中被干预的变量 m 。这里的 do 算子表示将一组变量赋为给定的值。

将根因分析形式化定义为一个新的因果推断任务——干预识别

分析

忠实性假设

对于一组给定的变量 V ,所有可能的干预 do(M=m),M⊂V 为定义在V上的所有分布给出了一组等价类: [m1]=[m2]⟺P(V∣do(m1))≡P(V∣do(m2)) 。换句话说,do 算子定义了一个从所有可能的干预到定义在V上的所有分布的映射。

  • 当这个映射是双射时,干预识别要解决的是这个do 算子的逆映射;
  • 当这个映射不是双射时,干预识别不总是有解。

下图展示了干预不同、但干预后分布相同的两个世界。当出现这样的情况时,干预识别无法给出确定的结论。

对于这个例子,

在左边这个响应时间被干预的世界中,CPU利用率的分布和干预前是一样的。

而右边这个CPU利用率被干预的世界保留了干预前响应时间的条件概率分布。

结合这两个信息我们可以得到结论,这两个干预后的世界和干预前看起来完全一样。然而,这样的场景对于根因分析而言没有什么实际意义。为此,我们引入忠实性假设排除这样不具有实际意义的情况,假定任何干预都会引起可以被观测到的变化。

干预不同、但干预后分布相同的两个世界

因果层次定理

在前述忠实性假设下,可以证明干预识别处于因果阶梯的第二级[1]。因果层次定理(Causal Hierarchy Theorem)[2]指出,因果阶梯坍缩的测度为零。如果我们想回答因果阶梯上某一级的问题,我们需要那一级、或更高级的知识。由此可以得到以下两个推论。

  1. 求解干预识别问题需要因果阶梯第二级的知识。而因果贝叶斯网络[3]是连接因果阶梯前两级的桥梁[2],这也解释了为什么许多已有的根因分析工作会把构建指标或服务之间的因果图作为步骤之一。
  2. 求解干预识别问题并不需要反事实推理的知识。

干预识别判据

在前述忠实性假设下进一步分析,我们得到干预识别判据作为根因的判定定理[1]:检测故障时刻以因果图中父结点为条件的条件概率分布是否发生了变化,即

Vi∈M⟺P(Vi∣pa(Vi),do(m))≠P(Vi∣pa(Vi))

因果图

因果层次定理要求我们引入因果阶梯第二级的知识来求解干预识别问题,为此,我们首先需要构建因果图。

因果发现

已有的根因分析工作在应用PC算法等因果发现算法之后并不在意挖掘出来的图是否正确。在这项工作之前,我们曾在一个开源数据集[4]上评估一些算法的效果,结果如下图所示[5]。实验中尝试的算法在处理实际问题时并不理想。

在一个开源数据集上评估一些相关分析、因果发现算法挖掘因果图的能力

随机对照试验?

随机对照试验是确定因果关系的黄金准则。笔者曾经尝试通过调节故障注入的强度来实现控制变量的效果,但在总结故障注入的原则时遇到了问题[6]:对于下面这个例子,在分别针对第4、7、10行的 A、B、C 三个计数器注入故障时,我们是否需要保证 counter_B 和 counter_C 之和总是等于 counter_A 呢?如果只在干预 B 或 C 时不再保证等量成立,其实已经假设了 A 是 B 和 C 的原因。

01 function foo() {
02     defer timer.ObserveDuration()
03     // A
04     counter_A += 1
05     if (condition) {
06         // B
07         counter_B += 1
08     } else {
09         // C
10         counter_C += 1
11     }
12 }

在对随机对照试验的尝试中,总结了如下两个认识:

  1. 故障注入本身依赖假设;
  2. 随机对照试验“发现”的因果关系是假设的体现。

既然如此,不如直接基于假设构建监控变量之间的因果图,也就有了论文中描述的结构化构图。

结构化构图

  1. 我们首先将监控变量分类为四种元变量,称为负载(Traffic)、资源利用率(Saturation)、响应时间(Latency)、错误率(Errors)。四种元变量连接有向边作为因果假设。例如,由于用户输入是一个请求的开始,对应的负载就被当做其它元变量的原因。
  2. 其次,将四个元变量构成的图依系统架构进行拓展。例如,数据库可以被当做服务的一种资源。服务资源利用率中描述数据库的部分可以拓展为数据库的四种元变量,并继承服务的资源利用率与服务的其它元变量之间的关系。
  3. 最后,我们将监控变量填入对应的元变量,完成因果图的构建。

实现

应用前述干预识别判据会遇到数据不足的问题,体现在两方面:

  1. 及时止损的要求限制了能够使用的故障数据时间跨度,我们对故障的了解有限;
  2. 无故障数据也不够,表现为故障前后两个数据分布之间缺少交集。

应用干预识别判据时遇到数据不足的问题

基于回归的假设检验方法

为了减少对故障数据的需求,我们将干预识别判据以假设检验的形式重新表述。空假设 H0 为一个变量 Vi 没有被干预,检验该变量在故障发生后的一个取值 Vi(t)是否依然服从之前的分布 P(Vi(t)∣pa(t)(Vi)) ,以Vi(t)距均值的距离相比方差的倍数当作异常分数。另一方面,利用回归技术尝试将有限的无故障数据拓展到故障时刻的数据范围。

后继调整

当我们知道数据生成过程的具体形式[7]时,回归模型可以有较好的表现。而现实则是,我们既不知道数据生成过程的具体形式,数据不足的问题又限制了数据驱动方法的发挥。为此,我们在这项工作中引入了后继调整。

例如,当系统响应时间居高不下时,增加机器、降低资源利用率可能是一个有效的方法。后继调整通过将响应时间的异常分数加到资源利用率(因果图中响应时间的父结点)上,表达对后者的偏好。

在我们采用的真实数据集上,后继调整帮助基于回归的假设检验方法获得了更好的效果。但后继调整的效果还需要在更多数据集上评估,或是被其它应对数据不足的方法所替代。

其它问题

为什么说Sage在方法设计中假定系统本身没有故障?

对于一个给定数据分布 P′(V) ,反事实推理首先基于已有观测推断出隐变量的取值 z′ ,在此基础上施加干预计算反事实分布 P′(V∣z′,do(x)) 。Sage[8]应用反事实推理诊断系统性能问题,关心施加哪些干预后,系统整体延时 Y 会恢复正常。

我们的工作将故障映射为因果推断中的干预。当系统本身没有被干预时,有 P′≡P ,后者可以从故障发生前的数据中进行学习;而当系统本身存在干预时, P′(V)≡P(V∣do(M)) ,后者需要从故障数据中学习。Sage基于故障发生前的数据训练模型,因而隐含了系统本身没有被干预这一假设,即假定系统本身没有我们工作中定义的故障。

如果将故障当作干预之外、在因果阶梯上处于低一层的事物,根因分析到底是在分析什么还需要进一步的探讨。

参考

  1. ^abcCausal Inference-Based Root Cause Analysis for Online Service Systems with Intervention Recognition. Causal Inference-Based Root Cause Analysis for Online Service Systems with Intervention Recognition | Proceedings of the 28th ACM SIGKDD Conference on Knowledge Discovery and Data Mining
  2. ^abcOn Pearl's Hierarchy and the Foundations of Causal Inference. https://causalai.net/r60.pdf
  3. ^参考系统:关河因果分析系统https://yinguo.grandhoo.com/home

http://chatgpt.dhexx.cn/article/3MxlBaJH.shtml

相关文章

10年经验总结:数据分析师7种工具,因果分析划重点!

在我10年的从业经验中,发现真正拉开数据分析师差距的,不仅是对方法和工具的掌握,更重要的是分析思维。在数据分析工作中,我们经常需要通过数据分析方法来解决问题。随着科技的进步,数据分析师的思维也需要持续更新&…

数据分析36计(25):微软开源 DoWhy 之因果分析快速入门

因果分析是在统计领域内建立因果关系的实验分析。在数据分析中,我们始终对因果关系问题感到困扰,通常从统计角度对可用数据进行分析。虽然知道因果关系的金钥匙是 A/B 测试,但是由于某些原因(例如时间限制,成本或只是没…

4大方法,因果关系分析的总结,都在这了

因果关系推断,可以说是数据分析领域最难的问题之一,争吵很多年也没有定论。经常同学们被问到:“到底这个问题的原因是什么!”都会觉得分析起来很挠头,今天我们系统讲解下。 1 常见方法1:拆解法 最常见的…

TRIZ创新方法——因果链分析

TRIZ创新方法——因果链分析 1. 什么是因果链分析2. 缺点的种类3. 关键缺点的解决4. 分析案例1:消除静电危害5. 分析案例2:油漆溢出问题6. 课后习题 1. 什么是因果链分析 2. 缺点的种类 关键缺点对应的问题即为关键问题 3. 关键缺点的解决 解决缺点5能够…

中介分析(四)- 因果中介分析

引入 首先我们需要明确相关性和因果推断本质上有什么区别? 最大的区别是是否控制了混杂因素。(理论上,当回归控制了所有可观测和不可观测的混杂因素,就可以探究因果关系),Causal analysis可以简单理解为 regression a…

因果分析系列5--因果分析中的偏差

因果分析系列5--因果分析中的偏差 1.混杂偏差2.选择偏差小结在上一节中,介绍了现实中常见的三种因果图结构: 链结构(chain)A->B->C; 叉结构(fork)A<-B->C; 对撞结构(collider)A->B<-C。 不管多复杂的结构都可拆解为其中的一种或某几种。基于三种常见的结…

社会经济学中的因果分析思想初探

社会经济学中的因果分析思想初探 目录1.因果是什么2.因果关系和相关关系3.因果推断的三个层级4.经典因果推断模型5.社会经济学中的因果实证分析5.1随机控制实验5.2自然实验5.3准实验5.3.1准实验--双重差分法5.3.2准实验--工具变量法5.3.3准实验--断点回归法5.3.4准实验--匹配法…

因果分析

Causality Problems(相关不一定是因果)&#xff1a; 伪关系&#xff1a;Y和X只是恰巧同时发生&#xff0c;实际上没有明显的逻辑上的关联&#xff0c;如巧克力销量和诺奖得主数量遗漏变量偏差&#xff1a;存在既影响X也影响Y的混淆变量&#xff0c;如年龄混淆了年收入和罹患癌…

史上最全因果推断合集-14(因果分析在贝壳的探索实践)

因果推断的应用范围十分广泛&#xff0c;例如气候变暖、新药研发、物理研究、经济学等。AI领域&#xff0c;特别是互联网产业&#xff0c;如何科学的进行因果分析&#xff0c;是一个重要的议题。本次分享的主题是因果分析在贝壳的探索和实践。 今天的介绍会围绕下面三点展开&a…

史上最全因果推断知识合集-4(快手因果推断与实验设计)

导读&#xff1a;理解和识别用户行为指标的相互关系是实验分析的目标。在社区氛围下&#xff0c;影响用户行为的因素更为复杂&#xff0c;关系识别更为困难&#xff0c;如何使用各种学科的方法&#xff0c;对社区进行宏观或微观的建模分析&#xff0c;系统性的评估各种策略的长…

因果分析与相关

在现实场景中我们常被要求回答“如果”的问题&#xff0c;经济学家称之为反事实。如果我现在要的不是这个价格&#xff0c;而是另一个价格&#xff0c;会发生什么&#xff1f;如果我不吃低脂饮食&#xff0c;而是吃低糖饮食会怎么样&#xff1f;如果你在银行工作&#xff0c;提…

因果分析.科学实验评估

目录 1. A/B Test原理 2. 实验分组划分 3.实验指标设计 4. 实验效果评估 5.离线指标测算 6.实验结果分析 不是每个想法都是好的&#xff0c;大部分想法都是不好的。 在互联网背景下&#xff0c;快速试错已经成为产品持续迭代的必备能力。借鉴传统行业(医学等)成熟的实验…

因果关系分析方法

因果关系推断&#xff0c;可以说是数据分析领域最难的问题之一&#xff0c;争吵很多年也没有定论。经常同学们被问到&#xff1a;“到底这个问题的原因是什么&#xff01;”都会觉得分析起来很挠头&#xff0c;今天我们系统讲解下。 1 常见方法1&#xff1a;拆解法 最常见的用…

因果分析来了!

我是小z&#xff0c;也可以叫我阿粥~ 本文的分享主题为观测数据因果推断&#xff0c;希望通过本文可以让大家对观测数据因果推断有一个整体的了解&#xff0c;明晰当前观测数据因果推断的困境和主要处理方法&#xff0c;以及在特定问题中的一套通用解法。 具体将围绕以下3部分展…

因果分析:原理、方法论、应用

什么是因果分析&#xff1f; 因果分析(Causal Analysis)是分析彼此之间的因果关系。 因果推断(Causal Inference)是基于原因推结果&#xff0c;是因果分析的一部分。 因果分析是数据分析、数据科学中重要的方法&#xff0c;广泛应用于A/B实验&#xff0c;异常分析&#xff0…

C语言有负号的除法以及求余运算规则

举例说明 abc…d 1753…2 被除数除数商…余数 有负号的运算规则 求: -17除以5的商和余数17除以-5的商和余数-17除以-5的商和余数 答: abc…d 用a代表被除数,用b代表除数,用c代表商,用d代表余数. c的数值是|a|/|b|,c是正号还是负号由a和b的负号数量决定;d的正负号和a相同…

C语言取余问题

如果 % 左边的操作数是正数&#xff0c;则取余的结果为正数或零&#xff1b;如果 % 左边的操作数是负数&#xff0c;则取余的结果为负数或零。 例如代码运行如下&#xff1a; 主代码&#xff1a; #include<iostream> using namespace std; int main() {cout<<(13…

c语言怎么对大数求余,C语言:大数取余

大数取余数(数组) 今天做学校的oj时遇到一题&#xff0c;问题可见一下截图&#xff1a; 查遍各大论坛&#xff0c;都没有遇到合适的方法&#xff0c;普通方法不可用&#xff0c;要采用数组的形式。 被除数超过long long类型&#xff0c;不能采用常规思路&#xff0c;否则会出现…

C语言--求余问题

C在线工具 | 菜鸟工具 在c语言中&#xff0c;如果 a为一个四位数 那么a%1000/100是啥&#xff1f; 假设a的值为1345&#xff0c;那么当计算a%1000时&#xff0c;值为345 #include <stdio.h>int main() {int a 1345;int b a%1000;printf("%d",b); } 而345/…

软件开发流程图

文件下载https://download.csdn.net/download/weixin_43250197/12243113