异常行为检测并不新鲜,近几年来已经提出很多解决方案。但是,在我们开始罗列技术之前,先在一个必要的前提条件上达成一致:所有异常检测技术都必须涉及到没有异常样本的训练集。其中挑战就是识别可疑事件——即便缺乏样本。
我们谈论的是仅由“正常”事件构成的训练集。“正常”的定义无疑非常随意。异常检测领域里,“正常”事件仅指训练集中呈现的事件。有如下四种常见定义方法:
统计学方法
偏离训练集统计分布的任何东西都被认为是异常。
最简单的统计学方法就是控制图。计算出训练集每个特性的平均和标准偏差,然后围绕平均值定义出阈值:k*标准偏差(k为通常在1.5到3.0之间的任意系数,取决于既定的算法保守程度)。在部署中正向或负向超出阈值的点就是异常事件的可疑备选。
这种方法很好理解,也便于实现,而且执行很快,适用于静态及时间序列数据。然而,要检测更微妙的异常的话,这种方法或许太过简单了。
聚类
其他方法往往属于聚类方法。因为训练集中缺失异常类,聚类算法听起来很适合异常检测任务。
算法在训练集上创建一些群集。部署中,当前数据点和群集间的距离被计算出来。如果距离高于给定阈值,该数据点即为异常事件的可疑备选。根据距离衡量方法和聚合规则,人们设计出了不同的聚合算法,创建了各种群集。
但是,该方法不适合时间序列数据,因为固定的群集无法捕获时间进程。
受监督的机器学习
惊不惊讶?意不意外?受监督的机器学习算法竟然也能应用到异常检测上。而且,因为受监督的机器学习技术既能应用于静态分类,也能应用到时间序列预测问题,该方法能覆盖所有数据情况。不过,由于受监督的机器学习技术需要所有牵涉类型的样本集,我们还需做些调整。
在异常检测问题上,受监督的机器学习模型只能在“正常”数据上训练,比如,在描述系统“正常”运行情况的数据上训练。只有在分类/预测完成后,才能评估出输入数据是不是异常。依赖受监督机器学习技术的异常检测方法主要有两种。
其一是神经自联器(或自编码器)。该自联器经过训练,重生成输入模式到输出层。只要输入模式类似训练集中的样本——也就是 “正常”,该模式重生成就会运行良好。而当新的不一样的东西出现在输入层,系统就会卡壳。这种情况下,该网络将无法重生成足够的输入向量到输出层。如果计算网络的输入和输出差距,异常事件的差值必然高于 “正常” 事件的差值。此处,定义该距离度量的阈值就应当可以找出异常点备选。该方法对静态数据点应用良好,但不适用于时间序列数据。
其二是时间序列预测算法。算法模型经过训练,基于“正常”值训练集上的前n个样本历史,预测下一个样本的值。在部署中,如果过往历史来自于在“正常”情况下工作的系统,下一个样本值的预测将会相对准确,近似于真实样本值。如果过往历史样本来自于不再在“正常”情况下运行的系统,该预测值就会偏离实际值。这种情况下,计量出预测样本值与真实样本值之间的差距,就能圈定异常事件备选。
本文由月兔网络转载安全牛
发表评论: