异常检测/新奇检测

数据挖掘 机器学习 数据科学模型 异常检测
2022-03-16 14:23:16

我有一个数据集,其中包含超过 600 万个正常数据和大约 50 个异常数据。这些异常数据是手动识别的(通过监控用户在摄像头上的活动并识别)。我需要开发一个模型来检测这些异常。

我的问题是异常数据看起来像正常数据,这意味着它们不是异常值或具有某种模式。如果我将正常数据绘制在异常数据上,它们处于相同的分布中。

我尝试了几种异常检测方法:

  1. 识别异常的多元高斯分布方法

    • 我尝试创建异常数据将是异常值的新特征,然后我可以使用多元高斯分布方法,但无法找到任何组合来隔离异常。
  2. 我想没有必要使用分类算法,因为数据集高度不平衡。

    • 我试过 OneClassSVM、DecisionTree、RandomForest,但 AUC 是 0.5(和随机一样好)。

如何为这种场景实现模型?

我能想到的其他方法:

  • 使用自动编码器开发 NN
  • 尝试生成合成样本并重新采样数据集
1个回答

我相信您可以使用一种分类算法,在其中手动过度表示“异常”类。多少,取决于异常引起的成本。

只是为了说明我的意思:

异常涵盖两个极端之间的连续统一体:1) 可以安全忽略的极端,因为它们不会产生任何成本,以及 2) 成本无法承受的极端。作为一个接近极端 (1) 的示例,想象一家花店获得了 Iris virginica 的订单。如果在运送的 600 万朵鲜花中,有 50 朵实际上属于花斑鸢尾,客户几乎不会反对。

另一方面,如果您正在运送飞机零件,并且有故障的零件会造成 300 多人死亡的灾难,那么您更接近极端(2)。您可能希望避免运送一个有缺陷的零件。

在实践中,这必须是一种权衡:如果您根本不运送任何零件,您可以在安全的一边,但随后您就会破产。另一方面,如果您根本不做质量保证,您运送的有缺陷的零件就足以在可预见的将来造成灾难,必须支付赔偿金,然后再次破产。