多元时间序列,检测异常,Keras

时间:2018-10-25 13:32:15

标签: python keras time-series anomaly-detection

我目前正面临一项任务,我需要认识到实例中异常的存在,每个异常由多个时间序列描述。 每个异常可能持续10秒或更长时间(通常少于几分钟)。

具体来说就是这种情况:

  • 每个实例的特征在于10个时间序列
  • 给出一个实例,每个时间序列描述相同的时间间隔(通常为8-10小时)
  • 所有实例都具有相同的10个时间序列
  • 每个时间序列都有一个采样率(每秒观察次数)
  • 班级标签非常不平衡:如果可能的话,异常可能覆盖该系列描述的整个时间间隔的5%左右
  • 最后,对于每个实例,我都有一个手工制作的标签,告诉我哪些时间间隔是“异常”

我想在一组带标签的实例上训练模型,该模型能够识别在以前从未观察到的新实例中是否存在异常间隔。

我尝试的第一种方法是基于窗口化:给定一个训练实例,我只是在每个时间序列(例如10秒长)上应用一个“移动窗口”,然后对属于窗口(例如,平均值,最小值,最大值,方差,熵,能量,...我将TsFresh库用于此类任务)。然后,根据手工制作的标签,我将每个窗口标记为“异常”(特别是,如果存在一个重叠于窗口95%的异常,则将其标记为异常)。

因此,训练集是由以下形式的实例构成的: [average_ts_1,min_ts_1,max_ts_1,...,average_ts_10,min_ts_10,max_ts_10,标签]

尽管这种方法给我带来了令人鼓舞的结果,但我想直接处理时间序列数据,以免丢失任何潜在的信息。 在这种情况下,我认为任务将变成:给定10个时间序列作为输入,预测仅由1和0组成的另一个时间序列。这样的预测时间序列将覆盖与输入的时间序列相同的时间段,并且会告诉我异常出现的间隔时间(例如,间隔为1秒)。

现在,最后一个问题是:我可以使用任何(深度)学习架构来完成这项任务吗?

当前,我正在使用Python,并依赖于XGBoost和窗口技术。 我在Keras上也有一些经验,但是我愿意接受任何建议。

0 个答案:

没有答案