pyod

COPOD:用「统计」+「机器学习」检测异常

有些话、适合烂在心里 提交于 2020-12-21 14:52:34
1. 背景知识 异常检测(outlier detection), 从最简单的角度出发就是看看数值偏离均值有多远 。拿最简单的一维数据来说,可以先算一下均值( )和标准方差( ),那么离均值2个或者3个以外的数值就可以简单的被认为是异常。如果假设数据符合正态分布的话,大概就是图中黄色标注的位置。 如果我们能够得知数据的分布(比如CDF的话),那么我们还可以计算出一个样本可能处于分布最左边和最右边的概率 。 但实际情况中,有两个问题使得这个方法并不奏效。 首先真实数据往往不是一维的,而是有很多个维度 ?最简单的假设当然是每个维度互相独立,那么我们可以分别求每个维度上的异常程度,之后求所有维度上的平均异常,或者看是否有几个维度的异常程度比较大。但这个方法有个核心局限: 并不是所有的维度间都是独立的,他们之间往往有一定的关联性 !所以这种假设会忽视掉这种关系,导致建模过分简单。 其次就是单纯看 一个点是否属于离均值很远可能是盲目的 ,因为分布有很多种,并不是每种分布都像正态分布这么优美。更加合理的方法是去估计一个点的尾端概率(tail probabilty),也就是在分布极端位置的可能性。 结合这两个目的: 如果我们能够很好的估计出多维数据上的累计分布(multivariate CDF),那么我们就可以尝试去估算每个点的尾端概率,也就可以对异常情况进行评估。 2. COPOD: COPOD