https://mp.weixin.qq.com/s/9h-hOt630W6k077Rupc9CA
流量异常检测主要有以下三个难点:
- 流量的大小会随着用户行为发生变化。对于大部分百度云上的业务,白天的访问流量较高,深夜的访问流量较低。这使得流量水位值存在上下文相关性,白天水位高,夜晚水位低,不断波动变化。这就需要算法能够区分流量的正常波动变化与异常波动变化,准确的检测异常流量。
- 对于所有百度云上用户而言,运维工程师关心系统本身的故障,需要及时检测到流量的突降异常,而安全工程师关心攻击、抓取和爬虫,更多地关心流量是否存在突升异常。这就要求算法有能力区分当前流量的异常类型,精准地给出流量的预测值。
- 流量也会受到业务逻辑调整的影响,流量水位会出现上涨或者下跌后不恢复的现象。需要算法能够及时适应这种变化,否则就会导致持续的误报。
预测
移动平均算法使用当前窗口内w个数据的均值作为窗口内最后一个点的预测值,即。
线性回归的方法预测流量值
对于窗口内n个数据点使用最小二乘法来最小化损失函数
由于线性回归的损失函数是二次函数,所以异常点带来的影响被放大,导致拟合的结果偏离理想结果。
由于线性回归的二次损失函数放大了异常点的影响,因此我们考虑了将二次函数缩小为一次函数,减弱异常点影响。将损失函数改成如下
检测
残差 相对残差
此检测方法没有考虑流量本身大小的因素,例如当残差为-100时,如果此时流量的预期值为200,意味着系统很可能出现了故障;如果流量预期为10000,那么-100的残差可能只是观测白噪声。所以使用基于残差的检测方法,需要我们针对不同的系统流量设置不同的阈值。
大部分系统服务白天流量大,相对波动小,下跌10%可能意味着比较严重的问题,而深夜流量小,相对波动大,下跌30%才有可能意味着系统存在故障。所以基于相对残差的检测方法也不能够设置统一的阈值来检测异常。
由于基于残差与相对残差的检测方法都不能够设置统一的检测阈值,所以我们考虑从概率的角度来设置恒定的检测阈值。
而泊松分布是描述单位时间内随机事件发生次数的概率分布,因此可以用泊松分布对流量进行建模。泊松分布的概率函数
这个概率的计算涉及阶乘求和等操作,会耗费较多的计算资源,需要简化计算过程。我们知道当较大时,可以用正态分布近似表示泊松分布。