Anomaly-Detection


第一部分:无监督异常检测

1. 算法

1.1 孤立森林(Isolation Forest)

1.2 基于PCA的异常检测

1.3 马氏距离(Mahalabonas Distance)

1.4 局部异常因子(Local Outlier Factor)


2. 性能对比

2.1 对比方案

  • 步骤一: 生成一系列随机数据集,每个数据集的行数(row)、列数(col)、污染率(contamination)均从某区间内随机抽取
  • 步骤二: 各个无监督异常检测算法根据指定的contamination返回异常样本的索引(anomalies_indices)
  • 步骤三: 确定baseline
    • 如果数据集中异常样本的索引已知(记为observed_anomaly_indices),则以此作为baseline
    • 如果数据集中异常样本的索引未知,则以Isolation Forest返回的异常样本索引作为baseline
  • 步骤四: 比较各算法返回的异常样本索引与baseline的共同索引个数,个数越多,则认为此算法的检测效果相对越好
  • 步骤五: 不同的数据集对异常检测算法的性能可能会有不同的评估,因此可取众数(mode)来判定各算法的性能排序

2.2 对比代码

2.3 对比结果

  • 根据算法在特定数据集上的异常检测性能降序排列,10个随机数据集的对比结果如下图所示:

unsupervised_contrast

2.4 对比分析

1)RobustPCC

  • RobustPCC重点考察了样本在major/minor Principal Component上的偏差,论文作者认为异常样本在主成分空间内的投影主要集中在上述两类主成分上
  • RobustPCC在构建过程中,需要通过马氏距离(变体)检测并剔除数据集中一定比例(gamma)的潜在异常样本,以保证RobustPCC的有效性
  • RobustPCC需要根据指定的分位点参数(quantile)来设定样本异常与否的阈值,个人在实验中适度增大了gamma、quantile的取值,进一步降低FPR,提升鲁棒性
  • 实验结果表明,RobustPCC具有优良的异常检测性能

2)Recon_Error_KPCA的检测性能显著优于Recon_Error_PCA

  • 引入核函数(对比实验取RBF核),无需显式定义映射函数,通过Kernel Trick计算样本在高维特征空间(希尔伯特空间)内的重构误差
  • 高维(或无穷维)主成分空间对样本具有更强的表出能力,在低维空间内线性不可分的异常样本在高维空间内的投影将显著区别于正常样本
  • 相应地,异常样本在高维(或无穷维)主成分空间内的重构误差将明显区分于正常样本,从而使得Recon_Error_KPCA的异常检测能力显著高于Recon_Error_PCA

3)Isolation Forest

  • Isolation Forest(孤立森林)表现稳定,在验证数据的异常索引未知情况下,个人将其预测值作为baseline,用于衡量其它算法的性能

4)Mahalabonas Distance

  • Mahalabonas Distance(马氏距离)实际上考虑了样本在所有主成分上的偏离度,检测性能紧跟Recon_Error_KPCA之后

5)Local Outlier Factor

  • LOF考虑了局部相邻密度,它存在一定的局限性:对于相关性结构较特殊的异常样本(anomalies in terms of different correlation structures)的检测能力不足

备注

  • 上述实验结论受到实验数据集的样本构成、样本数量等多方面因素的影响,不一定具备普适性
  • 在实际运用中,需要根据数据集本身的特点予以灵活选择相应的异常检测算法

第二部分:半监督异常检测

1. 算法

1.1 算法一:ADOA

1.2 算法二:PU Learning


2. 性能对比

2.1 对比算法

  • 算法一:ADOA
  • 算法二:Biased SVM
  • 算法三:Weighted LR
  • 算法四:PU Learning + Cost-Sensitive Learning

2.2 模型评估指标

2.3 对比方案与代码

  • 对比代码: semi_detection_contrast.py

  • 对比思路:

    • 步骤一: 生成一系列随机数据集,其中包含已观察到的异常样本集(记为正样本集P)无标签样本集(记为U)

    • 步骤二: 各个半监督异常检测算法对U集进行预测并返回预测值y_pred

    • 步骤三: 生成U集时,其真实标签y_true是已知的,根据y_true、y_pred计算半监督异常检测算法的性能

    • 步骤四: 不同的模型评估指标、不同的数据集对算法的性能有不同的评估,因此根据多个随机数据返回多个模型评估指标对应的值,再进行比较

2.4 验证结果

  • 对比结果:

    • 备注:每一列表示以对应列名为模型评估指标时,在相应数据集上表现最优的算法
    • 示例:第1列以AUC作为评估指标,根据10个随机数据集的结果取众数,Biased_SVM的表现是最佳的

    semi_final

  • 解析

    • 对比实验证明:各半监督异常检测算法均有各自的优势,但PUL CostSensitive的Recall最高,表明FN的高代价起到了一定效果
  • 备注

    • 上述实验结论受到实验数据集的样本构成、样本数量等多方面因素的影响,不一定具备普适性
    • 在实际运用中,需要根据数据集本身的特点予以灵活选择相应的异常检测算法

3. 个人思路:KADOA

3.1 思路简介

  • ADOA采用孤立森林与聚类相结合,KADOA运用KernelPCA重构误差替代孤立森林进行异常检测,其它思路与ADOA一致

3.2 KADOA代码

3.3 KADOA与ADOA的性能对比

  • 对比代码: adoa_kadoa_contrast.py

  • 对比结果: 在数据集、参数设置完全一致的情况下,KADOA的性能显著优于ADOA,但此结论有待更多数据集予以验证

    adoa_kadoa_contrast