DF上的异常检测用于判断指标的行为模式是否与过去有差异,在这种情况下,用户无法设定具体的阈值。在每一次检测中,监视器会根据指标过去的值计算出一个正常上限和正常下限,即一个正常区间,然后用指标的当前值(一段时期的均值/最小值/最大值/和值)与这个上限和下限比较。如果满足异常条件,监视器便会给出警告。
在此,我们使用局部异常因子算法(Local Outlier Factor-LOF)。这是一种结合了距离因素和密度因素的异常检测算法。在LOF中定义了第k距离,可达距离,局部可达密度等概念,很好的平衡了距离因素和密度因素。在DF中使用此算法,我们需要使用指标的过去值来训练模型,然后计算出一个或是多个区间,而落入此区间的点可以被看做是正常的。
具体的做法是,使用拟合后的模型,在训练集的最大值max和最小值min之间遍历,如采样1000个数据点,或者采样n倍的训练集数据点,然后对相邻的正常数据点进行合并,以此来寻找所有潜在的正常区间。采样点数越多,则可能的区间越多。根据需要,我们可以合并比较小的区间。特殊情况下,如当指标的表现比较平稳,我们可以只算出一个正常区间。

上图中,红线左侧代表我们使用的过去参考值,右侧代表我们需要进行判断的当前值,而绿色阴影部分表示我们根据过去值计算出的一个正常区间,我们可以根据不同的聚合函数和比较方式来到达不同的效果。
