用神经网络检测异常


12

我有一个每天生成的大型多维数据集。

与前几天相比,什么是检测任何类型的“异常”的好方法?这是神经网络可以解决的合适问题吗?

任何建议表示赞赏。

附加信息:没有示例,因此该方法应自行检测异常

Answers:


12

从问题的表述中,我假设没有任何异常(即标签)的“示例”。在这种假设下,一种可行的方法是使用自动编码器:神经网络接收数据作为输入,并经过训练以输出非常相同的数据。想法是,培训使网络能够以潜在变量的形式学习输入数据分布的表示形式。

有一种类型的自动编码器称为的去噪自动编码器,其与训练损坏版本的原始数据作为输入,并与所述的未被破坏的原始数据作为输出。这提供了可以消除输入噪声(即数据损坏)的网络。

您可以使用每日数据训练降噪自动编码器。然后将其用于新的每日数据;这样,您将拥有原始的每日数据以及这些数据完全相同的完整版本。然后,您可以将两者进行比较以检测出显着差异。

此处的关键是您选择哪种显着差异定义。您可以计算欧几里得距离,并假设如果它超过了某个任意阈值,则说明存在异常。另一个重要因素是您引入的腐败类型。它们应尽可能接近合理的异常。

另一种选择是使用生成对抗网络。培训的副产品是一个区分器网络,该网络将正常的日常数据与异常的数据区分开。


4

我认为这在很大程度上取决于数据的性质(分类/连续)。我先从简单的方法开始。我想到的是:

  • 您可以使用分位数或任何统计检验来比较每个变量的分布,以查看它们是否存在显着差异
  • 您还可以计算每个标签/类别的出现并进行比较
  • 我也会尝试采用任何一种距离测量方法。例如,您可以计算马哈拉诺比斯距离并寻找较大的变化
  • 或非常简单的事情-只是新旧数据之间的绝对差异,设置阈值,超出阈值的所有内容都会报告
  • 您还可以采用一些多维技术(例如相关矩阵,主成分,聚类等)并查找更改

如果这些都不适合,则存在专门用于异常检测的stats / ML模型的整个分支。SVM,t-SNE,隔离林,对等组分析断点分析,时间序列(您可以在其中查找趋势以外的异常值)。

这些方法的优点是它们是白盒,因此您可以说出为什么有人是异常值。如果这不是您想要的东西,其他人建议使用ANN方法,该方法也将起作用。


0

我正在尝试解决类似的问题。您的数据集是否包含文本和数字特征的混合?如果是这样,检测异常的复杂性就会增加(我不知道是什么因素造成的)。如果您的数据集是统一的,例如仅包含数值,则可以使用仍需要标记数据集的RNN,但它可以检测时间序列(如模式)(因为您提到了与前一天的值进行比较)


0

使用自动编码器(无需使用需要通过“损坏的数据”进行训练的“降噪自动编码器”)执行此操作的一种简单方法是,训练一个自动编码器,然后从解码效果不好的输入中检查行的RMSE(即自动编码器很难重建)。根据某种定义,数据将代表异常(对于流量高峰等情况,肯定会是这种情况)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.