异常检测之AVF算法

AVF算法全称Attribute Value Frequency算法,可能这个算法有点生僻,之所以这么说,是我之前也没有怎么听说过,因为工作的原因,最近研究了下这个算法,发现如此简单有效。

我之前写的大多数异常检测算法,都是处理数值类型的数据,那么处理category 类型的数据,有没有什么好的算法?attribute value算法,就是非常有效的一种。

下面这段伪代码是我在stack overflow上面搜到的


Label all data points as non-outliers
calculate frequency of each attribute value
foreach point x
AVFscore = Sum(frequency each attrib. value in x)/num.attribs
end foreach
return top k outliers with minimum AVFscore


把上面的伪代码翻译成汉字如下:

  1. 将所有的数据点都标为非异常点;
  2. 计算所有每一个属性值的频数(可见下面的例子);
  3. 计算每一个点的AVF score,计算公式如下

即AVF分值等于样本点x的每一个属性值对应的频数之和除以属性总数,当然这里的属性指的都是category 的属性。

AVFscore值越小,样本越异常

下面是一个例子

对于属性Country_cde 共有两个属性值,分别是IE,US,其中IE的频数为3,US的频数为2。

对于属性Flag1共有三个属性值,分别是A,B,C,频数分别为3,1,1

对于属性Flag2共有三个属性值,分别是X,Y,Z,频数分别为3,1,1

有了上面几个属性值的频数,AVF score就计算出来了,就是表中的最后一列,大家手算都能算出来;表中的样本中异常度最高的就是AVF score最小的点,即最后一个样本点。


参考文献:

Attribute Value Frequency in R (outliers in categorical variables)

enriquegortiz.com/publi

编辑于 2017-12-18

文章被以下专栏收录