加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

一个Bug损失200亿!如何搭建业务异常检测系统?

发布时间:2020-03-02 08:16:59 所属栏目:编程 来源:站长网
导读:副标题#e# 【51CTO.com原创稿件】DataPipeline Head of AI 王睿在51CTO大咖来了公开课上作了题为《业务异常实时自动化检测 基于人工智能的系统实战》的分享,本文根据分享内容整理而成。 图片来自 Pexels 王睿,之前在 Facebook/Instagram 担任 AI 技术负责

一个Bug损失200亿!如何搭建业务异常检测系统?

③异常的检测和过滤

对于新的数据点,一旦其跨过置信区间系统便认定为异常。接着对于每个识别出的异常进行打分和过滤。

④关联多个异常并自动报警

对检测出的多个异常,算法自动进行相关性学习,将其关联起来。最后生成一个汇总的告警,发送给用户。

下面重点解释对单一数据的正常表现建模,异常检测和关联多个指标异常的具体技术实现。

单一数据的正常表现建模

在过去数十年里,许多不同类型的算法被研究和开发来尝试解决这一问题。

其中有较为传统的基于统计模型的算法,也有许多基于时序数据的分析方法,而近年来大热的深度学习模型也被证明在时序数据预测和异常检测上有较高的准确性。

这些算法一般遵循这样一个步骤:先对历史数据进行建模,学习数据正常表现的规律。

对新来的数据点,根据数据点偏离正常表现模型的程度来判定是否为异常。

一个Bug损失200亿!如何搭建业务异常检测系统?

比如最简单的算法模型是高斯分布,假设该指标数据符合高斯分布,就可以通过历史数据点估计出高斯分布的 mea n和期望(均数)μ 和标准差 σ,进而对新的数据点判定。

如果偏离期望多于三个标准差则该数据点不能被模型解释的概率为 99.7%,我们就可以判定其为异常。

然而实际情况是,大部分数据都无法简单地表现为高斯分布。因此,首先我们需要根据数据本身来自动选择最适合的算法模型。

这也是很多开源的异常检测算法直接被拿来使用往往得不到满意效果的一个原因。

因为他们一般假设数据的底层表现是平稳的(Stationary),并且数据是规则取样的(Regular Sampling),若使用不适合的算法模型对数据建模会得到非常不好的效果,甚至完全无法使用。

因此 DataPipeline 开发了一个算法,可以自动根据数据的表现形式选择最合适的算法进行拟合。最常用的算法可以分为基于统计模型的算法和深度学习的算法。

统计模型算法:除了上面提到的高斯分布,比较常用的模型有基于指数平滑(Exponential Smoothing)的模型,实际是对过去的数据进行平均来预测未来的数据,只是给时间上更靠近当下的数据点更大的权重。

比较经典的有 Holt-Winters,ARIMA 等,这些还可以将周期性的规律考虑进去。

深度学习算法:对于不符合规则取样和不表现为 Staionary 的数据,深度学习算法的效果更好。

LSTM(Long Short-Term Memory)是最常用的算法,而当下许多最新的算法都是基于 LSTM 上的变种。

然而深度学习算法很难做到实时训练,即模型随新的数据点实时更新,而且当监控数据量大的时候非常耗费 CPU。

算法自动选择出最合适的模型后,系统便可根据历史数据拟合模型,估计出模型参数,进而针对每个数据点给出预测。

对于实际数据点和预测数据点的差异(error)我们可以用高斯分布来模拟,利用高斯模型计算出一个置信区间,当新数据的 error 偏离置信区间过大时将其判断为异常。

周期性学习

许多指标数据都表现出明显的周期性,而周期性学习对异常检测的准确性至关重要。

最常见的自动学习周期性方法是自相关学习(Autocorrelation)。简言之,该算法是将数据向过去平移一个时间差(Lag),然后计算平移后的数据和原来数据的统计相关性。

如果某一个 Lag 平移后的数据和原数据相关性很大,则认为该 Lag 就是数据的周期性。此算法的主要问题是计算量较大,因为要对多个 Lag 进行计算。

鉴于上面提到的实时性和可扩展要求,DataPipeline 对该算法用 Subsampling 的方法进行优化,降低了计算复杂度。

相关性学习

之前提到为解决告警洪流问题,我们需要一个算法可以自动化计算指标间的相关性,在多个异常同时出现时,可以将反映同个业务问题的异常关联在一起,给用户一个汇总的告警。

针对这类问题,一般传统的方法是采取多变量分析(Multivariate Analysis),即将所有时序数据当成互相有关联的多变量一起建模,然后在整体层面检测异常。

该方法的主要问题是很难规模化,且当出现异常时检测结果的解释性较差。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读