现在的异常检测方法
- 固定阈值
- 手工分析
- 小范围的使用专家系统和最近邻方法
- 不足:需要专家知识来定义正常
挑战
- 缺少标注导致需要使用无监督或半监督模型
- 现实系统高度non-stationary(概率分布经常改变),依赖当时的环境
- 监控数据各种各样,有噪声,高维
- 需要一定程度的可解释性
核心方法
- LSTM学习正常的序列数据,然后灌入流数据,预测,用预测误差来判断是否属于异常
- 动态阈值
LSTM架构
Dynamic Error Thresholds(动态错误阈值,核心)
- 对error做滑动平均
- 计算阈值公示如下
- z是一组有序的正数,代表µ(e)的标准差的数量,取决于环境(context),但是作者发现在他们的环境,取2到10之间的数,效果很好,取小于2的数会有很多False Positive
- 计算异常分值如下公示所示
缓解False Positive的特殊处理
- 构造e
- 对所有的e计算max(e),降序排列,并把最大的不是异常的平滑后的error,放在末尾
- 对这个降序数列计算d,公式如下
- 如果在某一步i,最小减少百分比p超过了d则所有满足的对应序列是异常,否则标为正常
- 从历史中学习:设定一个最小分值s, 如果s<s则为正常