2

我正在实施一个异常检测系统,该系统将用于不同的时间序列(每 15 分钟一次观察,总共 5 个月)。所有这些时间序列都有一个共同的模式:在工作时间高水平,否则低水平。

许多论文中提出的想法如下:建立一个模型来预测未来值并根据残差计算异常分数。

到目前为止我所拥有的

我使用 LSTM 在给定前 96 天(1 天的观察)的情况下预测下一个时间步,然后我计算异常分数作为残差来自两个正态分布之一的可能性,这些正态分布拟合通过验证测试获得的残差. 我正在使用两种不同的分布,一种用于工作时间,一种用于非工作时间。

该模型可以很好地检测点异常,例如突然下降和峰值,但例如在节假日时会失败。

如果假期是在一周内,我希望我的模型能够检测到更多异常情况,因为这是正常工作日的不寻常日常模式。但预测只是遵循先前的观察。

我的解决方案

使用第二个更轻量级的模型(基于时间序列分解),使用每日聚合而不是 15 分钟聚合来检测每日异常。

问题

两种模型的这种组合让我可以同时拥有两种异常情况,而且效果很好,但我的想法是只使用一个模型,因为我希望 LSTM 也能够“学习”每周模式。相反,它严格遵循之前的时间步骤,而不考虑它是一个工作时间,并且水平应该更高。我尝试在输入中添加外生变量(一天中的小时,一周中的一天),以添加层和单元格数量,但情况并没有那么好。

任何考虑都值得赞赏。谢谢

4

1 回答 1

2

关于您当前方法的说明

使用 MSE 进行训练等同于在模型给出的具有固定方差和均值的高斯分布下优化数据的可能性。所以你已经在训练一个自动编码器,尽管你没有这样制定它。

关于你所做的事情

  1. 你不给 LSTM 机会

    由于您仅提供过去 24 小时的数据,因此 LSTM 不可能学习每周模式。它最多可以知道该值应该与 24 小时前的值相似(尽管这不太可能,请参阅下一点)——然后你用周五-周六和周日-周一的数据打破它。从 LSTM 的角度来看,您的假期“异常”看起来与您在训练期间提供的周末数据几乎相同。

    因此,您首先需要在学习期间提供更长的上下文(我假设您在测试期间保持隐藏状态)。

  2. 就算给了机会,它也不在乎

    假设您的数据确实遵循一个简单的模式——在工作时间内且仅在工作时间内具有高价值,加上一些较小规模的变化——LSTM 不需要任何长期知识来处理大多数数据点。考虑到我所有的人类想象力,我只能设想 LSTM 在工作时间开始时受益于长期依赖关系,所以只有 96 个样本中的一两个样本。

    因此,即使这些点的损失值想要通过 > 7 * 96 个时间步进行反向传播以了解您的每周模式,还有 7*95 个其他损失项可能会阻止 LSTM 偏离当前的局部最优值。

    因此,它可能有助于在工作时间开始时对样本进行更多加权,以便各自的损失实际上可以影响远历史的表示。

  3. 你的解决方案是件好事

    在单个模型中很难对多个尺度的序列进行建模。即使是你,作为一个人类,也需要“缩小”来判断长期趋势——这就是为什么所有华尔街的人都有月/周/日/小时/...图表来观察他们的股票价格。这种多尺度建模对于 RNN 来说尤其困难,因为它需要始终以相同的权重处理所有信息。

    如果您真的想在模型上学习所有内容,那么使用某种时间卷积的深度前馈架构可能会取得更大的成功,例如。TDNNsResidual Memory Networks(免责声明:我是作者之一。),或最近的一种架构来统治他们,WaveNet。由于它们在更长的时间上下文中跳过连接并在不同级别应用不同的转换,因此它们有更好的机会发现和利用这种意想不到的长期依赖关系。

    GitHub 上有 Keras 中 WaveNet 的实现,例如12。我没有和他们一起玩(实际上我前段时间已经离开了 Keras),但尤其是。第二个似乎很容易,使用AtrousConvolution1D.

    如果您想继续使用 RNN,Clockwork RNN可能是满足您需求的模型。

关于您可能要针对您的问题考虑的事项

  • 那么有两种数据分布吗?

    这个有点哲学。您当前的方法表明您非常坚信有两种不同的设置:工作时间和休息时间。您甚至可以根据它更改模型的一部分(高斯)。

    因此,也许您的数据实际上来自两个分布,因此您应该训练两个模型并在它们之间适当切换?

    鉴于你告诉我们的,我实际上会选择这个(拥有一个理论上健全的系统)。你不能指望你的 LSTM 知道 12 月 25 日会有低值。或者有一个截止日期,这个周末完全由工作时间组成。

  • 还是有两种异常定义?

    多了一个哲学点。也许您个人考虑了两种不同类型的异常:

    一个奇怪的时间轨迹,意想不到的峰值,振荡,任何你领域中不寻常的东西。你的 LSTM 应该已经处理了这些。

    然后,有不同的异常概念:在特定时间间隔内特定界限的值。也许一个简单的线性回归/从时间到价值的小 MLP 会在这里做吗?

  • 让NN做所有的工作

    目前,您分两步有效地对数量的分布进行建模:首先,LSTM 提供平均值。其次,您提供差异。

    您可以改为让您的 NN(连同额外的 2 个仿射变换)通过产生其均值和方差来直接为您提供完整的高斯分布;很像变分自动编码器(https://arxiv.org/pdf/1312.6114.pdf,附录 C.2)。然后,您需要直接优化以下样本在 NN 分布下的可能性,而不仅仅是样本和 NN 输出之间的 MSE。

    这将允许您的模型告诉您何时对以下值非常严格,以及何时“任何”样本都可以。

    请注意,您可以进一步采用这种方法并让您的 NN 生成“任何”合适的分布。例如,如果您的数据存在于/可以明智地转换为有限域,您可以尝试通过在输出上使用 Softmax 来生成空间上的分类分布,就像 WaveNet 所做的那样(https://arxiv.org/ pdf/1609.03499.pdf,第 2.2 节)。

于 2018-05-06T12:50:14.730 回答