现在的异常检测方法

  • 固定阈值
  • 手工分析
  • 小范围的使用专家系统和最近邻方法
  • 不足:需要专家知识来定义正常

挑战

  • 缺少标注导致需要使用无监督或半监督模型
  • 现实系统高度non-stationary(概率分布经常改变),依赖当时的环境
  • 监控数据各种各样,有噪声,高维
  • 需要一定程度的可解释性

核心方法

  • LSTM学习正常的序列数据,然后灌入流数据,预测,用预测误差来判断是否属于异常
  • 动态阈值

**

LSTM架构

image.png

Dynamic Error Thresholds(动态错误阈值,核心)

  • 对error做滑动平均
  • 计算阈值公示如下
  • image.png
  • z是一组有序的正数,代表µ(e)的标准差的数量,取决于环境(context),但是作者发现在他们的环境,取2到10之间的数,效果很好,取小于2的数会有很多False Positive
  • 计算异常分值如下公示所示
  • image.png

缓解False Positive的特殊处理

  • 构造e
  • 对所有的e计算max(e),降序排列,并把最大的不是异常的平滑后的error,放在末尾
  • 对这个降序数列计算d,公式如下image.png
  • 如果在某一步i,最小减少百分比p超过了d则所有满足image.png的对应序列是异常,否则标为正常
  • 从历史中学习:设定一个最小分值s, 如果s<s则为正常