异常值是系统偏离其通常行为的罕见观测结果,出现在许多实际应用(如医学、金融)中,并且比普通事件更需要解释。一旦检测到异常值,我们如何识别其“根本原因”?
异常值问题是统计学中最古老的问题之一,已成为学术研究超过一个世纪的主题。尽管在检测异常值方面已有很多工作,但缺乏一种形式化的方式来定义异常值的“根本原因”。
本周,在国际机器学习大会(ICML)上,展示了一项关于识别异常值根本原因的工作。首要任务是引入“根本原因”的形式化定义,因为在学术文献中未能找到一个现成的定义。
该定义包括对每个观察到的异常值的根本原因的定量因果贡献的形式化。换句话说,贡献描述了一个变量对该异常事件负有责任的程度。这也涉及到哲学问题;即使是一个事件是否是其他事件的“实际原因”这种纯定性问题,在哲学家中也存在持续争论。
该方法基于图因果模型,这是由图灵奖得主Judea Pearl开发的一个形式化框架,用于建模系统中变量之间的因果关系。它有两个关键组成部分。第一个是因果图,它以视觉方式表示观测变量之间的因果关系,箭头从表示原因的节点指向表示结果的节点。第二个是一组因果机制,描述每个节点的值是如何从其父节点(即因果图中的直接原因)的值生成的。
例如,想象一个由分布式网络服务驱动的零售网站。客户经历了异常缓慢的加载时间。为什么?是后端的数据库慢吗?还是购买服务出现了故障?
存在许多异常检测算法。为了识别由这些算法之一检测到的异常值的根本原因,首先引入一种信息论(IT)异常值分数,该分数对现有异常值分数进行概率校准。
异常值分数依赖于尾概率的概念——随机变量超过某个阈值的概率。一个事件的IT异常值分数是在某种变换下该事件尾概率的负对数。它受到克劳德·香农在信息论中对随机事件信息内容定义的启发。
观察到比所讨论事件更极端事件的可能性越低,该事件携带的信息越多,其IT异常值分数就越大。概率校准还使得IT异常值分数在不同维度、范围和尺度的变量之间具有可比性。
反事实 为了将异常事件归因于一个变量,提出反事实问题:“如果该变量的因果机制正常,该事件是否就不会成为异常值?” 反事实是Pearl因果关系阶梯的第三级,因此需要功能性因果模型作为变量的因果机制。
在FCM中,每个变量Xj是其观测到的父节点PAj(在因果图中有直接指向Xj的箭头)和未观测到的噪声变量Nj的函数。由于根节点——那些没有观测到父节点的节点——只有噪声变量,噪声变量的联合分布产生了观测变量的随机属性。
未观测到的噪声变量扮演着特殊角色:可以将Nj视为一个随机开关,从一组函数Fj(定义从直接原因PAj到其效应Xj的映射)中选择一个确定性函数(或机制)。如果不固定噪声项Nj的值,而是将其设置为根据某种分布绘制的随机值,那么集合Fj中的函数也会被随机选择,并且可以使用此过程为Xj分配正常的确定性机制。
尽管如果认为噪声变量不受我们控制——甚至更糟,根本无法观测到——这种随机化操作似乎不可行,但可以将其解释为对观测变量的一种干预。
为了将目标变量Xn的异常事件xn归因于变量Xj,首先用正常机制替换与其观测值xj对应的确定性机制。这种替换对对数尾概率的影响定义了Xj对异常事件的贡献。特别是,贡献衡量了用正常机制(通过抽取噪声Nj的随机样本)替换Xj的因果机制后,异常事件发生的可能性降低的倍数。
但是,以这种方式计算的贡献取决于替换因果机制的变量顺序。这种对顺序的依赖性给归因过程带来了随意性。
为了消除对变量排序的依赖,取所有排序下的平均贡献,这也是博弈论中Shapley值方法背后的思想。Shapley贡献之和等于异常事件的IT异常值分数。
为了对该方法的工作原理有一个高层次的理解,再次考虑前面提到的零售网站示例。网络服务之间的依赖关系通常以依赖图的形式提供。通过反转依赖图中的箭头,获得服务的延迟因果图。从观测延迟的训练样本中,学习因果机制。因果机制也可以直接使用主题专业知识来建立。该方法利用这些信息,将特定客户缓慢的加载时间归因于网络服务中最可能的根本原因。
如果您想将我们的方法应用到您的用例中,该实现可在Python DoWhy库的“gcm”包中找到。为了快速入门,可以查看我们的示例笔记。