我正在实施一个异常检测系统,该系统将用于不同的时间序列(每15分钟一次观察,总共5个月)。所有这些时间序列都有一个共同的模式:在工作时间内高水平,否则低水平。
许多论文中提出的想法如下:建立一个模型来预测未来的价值,并根据残差计算一个异常分数。
到目前为止我有什么
我使用LSTM来预测前一个96(观察1天)的下一个时间步长,然后我将异常分数计算为残差来自通过验证测试获得的残差拟合的两个正态分布之一的可能性。我使用两种不同的发行版,一种用于工作时间,一种用于非工作时间。
该模型可以很好地检测点异常,例如突然下降和峰值,但例如在假日期间失败。
如果假期是在一周内,我希望我的模型可以检测到更多的异常情况,因为这是正常工作日的一种不寻常的日常模式。但预测只是遵循先前的观察。
我的解决方案
使用第二个更轻量级的模型(基于时间序列分解),该模型使用每日聚合而不是15分钟聚合来检测每日异常。
这个问题
这两种模型的组合允许我同时具有两种异常并且它非常有效,但我的想法是仅使用一种模型,因为我期望LSTM能够“学习”每周模式。相反,它严格遵循前面的时间步骤,而不考虑它是一个工作小时,水平应该更高。我试图在输入中添加外生变量(一天中的小时,一周中的一天),添加图层和单元格数,但情况并没有那么好。
任何考虑都表示赞赏。谢谢
关于您当前方法的说明
使用MSE进行训练相当于在具有固定方差的高斯下优化数据的可能性,并使用模型给出的均值。所以你已经在训练一个自动编码器,尽管你没有这样做。
AtrousConvolution1D
。
如果你想留在RNN,Clockwork RNN可能是适合你需求的模型。