Answers:
从问题的表述中,我假设没有任何异常(即标签)的“示例”。在这种假设下,一种可行的方法是使用自动编码器:神经网络接收数据作为输入,并经过训练以输出非常相同的数据。想法是,培训使网络能够以潜在变量的形式学习输入数据分布的表示形式。
有一种类型的自动编码器称为的去噪自动编码器,其与训练损坏版本的原始数据作为输入,并与所述的未被破坏的原始数据作为输出。这提供了可以消除输入噪声(即数据损坏)的网络。
您可以使用每日数据训练降噪自动编码器。然后将其用于新的每日数据;这样,您将拥有原始的每日数据以及这些数据完全相同的完整版本。然后,您可以将两者进行比较以检测出显着差异。
此处的关键是您选择哪种显着差异定义。您可以计算欧几里得距离,并假设如果它超过了某个任意阈值,则说明存在异常。另一个重要因素是您引入的腐败类型。它们应尽可能接近合理的异常。
另一种选择是使用生成对抗网络。培训的副产品是一个区分器网络,该网络将正常的日常数据与异常的数据区分开。
我认为这在很大程度上取决于数据的性质(分类/连续)。我先从简单的方法开始。我想到的是:
如果这些都不适合,则存在专门用于异常检测的stats / ML模型的整个分支。SVM,t-SNE,隔离林,对等组分析,断点分析,时间序列(您可以在其中查找趋势以外的异常值)。
这些方法的优点是它们是白盒,因此您可以说出为什么有人是异常值。如果这不是您想要的东西,其他人建议使用ANN方法,该方法也将起作用。
我正在尝试解决类似的问题。您的数据集是否包含文本和数字特征的混合?如果是这样,检测异常的复杂性就会增加(我不知道是什么因素造成的)。如果您的数据集是统一的,例如仅包含数值,则可以使用仍需要标记数据集的RNN,但它可以检测时间序列(如模式)(因为您提到了与前一天的值进行比较)