【.com原稿】1.为什么需要人工智能业务异常检测系统企业会因为业务异常不能及时解决而遭受更大的损失。售价18元,导致用户短时间内大量抢购,损失惨重。同样,在金融、零售、电子商务等领域,由于IT系统的BUG或人为因素导致的业务异常,也给企业造成了不可估量的经济损失。然而,当业务异常发生时,企业往往要等到几天甚至几周后才发现。以一家公司为例。主营业务为网络借贷。贷款利率突然上升。此时,距离问题发生已经过去了十几个小时。结果是钱被借给了很多不具备借钱资格的人,导致还款率和收入急剧下降。为此,随着企业业务的持续快速增长和信息化的全面普及,业务人员需要对业务变化进行全面、实时的掌控。这时候,IT运维人员就会关心服务器和网络的运行情况;产品负责人会关心用户访问、点击率和用户体验;业务领导者会关心业务的核心KPI,例如销售额。这些指标就像人的心跳、血压、体温,反映??了企业业务的健康状况。如何快速准确地从业务指标中发现异常,发现问题根源并及时解决,对企业来说尤为重要。目前,对于这一块,不同的公司采取了不同的方式。传统的业务监控方式往往是人工生成报表,每天查看。对于比较重要、实时性要求高的指标,会手动设置阈值,当指标超过阈值时会发出告警。对于周期性已知的指标,一般采用类似同比率的方法。随着企业业务量和业务种类的不断增加,人工监控也随之增加。但是,这种基于人工的方式会表现出几个缺点:1.大量的业务指标没有得到实时监控。以电子商务为例,如果只监控总销售额,人工实现起来很容易。但是,一旦某些地区或品类的销售出现异常,仅看销售总量指标是很难发现问题的。比如某零售企业,某地区的酸奶销量较之前有所下降,原因是酸奶的库存存在周转问题。因过期酸奶不断销售,收到大量用户举报。针对这种情况,如果只监控总销售额,很难发现问题所在。这时候就需要监控品类和区域两个维度更细粒度的指标。在监控多个维度的指标的同时,指标监控的数量会成倍增长,这显然是人类的无能。2.警报洪流。当业务出现问题时,告警的接收者往往会收到大量的告警,导致他们被海量的告警淹没,难以定位问题的根源。除了告警准确率低之外,业务指标之间也存在很强的相关性,主要体现在两个方面:一是指标之间的链接关系。例如在电商零售领域,当服务器错误增多时,用户访问量减少,导致下游订单减少。二是指标的多维性。比如订单下降,往往是多个产品线、多个区域的订单同时下降。因此,当业务出现问题时,往往会有多个相关指标一起报警,形成警报洪流。3.误报和漏报。作为企业领导者,您不想在最后一刻才知道您的企业出现问题,也不想在凌晨3:00被误报惊醒。然而,多次误报会导致“狼来了”的效果。当真正的问题发生时,报警往往很容易被接收人员忽略。4、人工维护费用。随着业务的不断变化,需要手动调整大量的告警阈值和规则,显然跟不上业务变化的速度和监控指标增加的节奏。因此,我们需要一套自动化的智能业务监控和异常检测系统。通过学习指标的变化规律,自动掌握指标数据正常和异常的表现模式,从而全面、实时地监控企业业务的各个层面和维度。指数。这就是为什么我们需要构建一个基于人工智能算法的业务异常检测系统。2.构建系统的挑战和设计理念人工智能算法在异常检测领域已经研究了几十年,但是构建这样一个系统并不容易。主要挑战如下:一是异常定义模糊,各项数据指标表现形式千差万别。例如,ITCPU异常不同于销售异常,因此尝试使用通用算法来检测不同类型指标的异常往往准确率较低。因为某类数据的异常形式放在另外一种数据索引中,可能不认为是异常。此外,未来发生的异常在过去往往是看不到的。这直接导致了第二个难点,即标注数据难以获取。不仅难以标记数据的变化是否异常,而且出现异常的频率低,也很难像传统机器学习问题那样获取大量的正负样本。第三,对算法和系统的实时性和可扩展性要求非常高。如果大量的指标不能实时监控,发现异常并报警,系统就失去了意义。为解决上述痛点并考虑各种挑战,DataPipeline在设计系统前确定了几个设计原则:1.以非(半)监督机器学习算法为主要目标。虽然目标是将数据分类为正常或异常,但由于异常的定义模糊,标注数据很难获得。我们主要采用无监督机器学习算法。当然,对于发送给用户的告警,系统需要能够收集用户的反馈,然后用它来提高算法的准确性。一般来说,这是一种半监督学习方法。2、算法与业务解耦人工智能算法的优势在于解放劳动力,实现自动化,因此算法需要尽可能与业务解耦。算法可以通过从指标的历史数据本身学习模式(例如周期性)来建模。不同的业务指标数据有不同的表现形式,时序数据的类型普遍有限。因此,我们需要算法具有根据不同的表达形式选择不同模型的能力。3.异常关联学习及根因分析上面提到的一个很大的痛点就是告警泛滥。当业务出现问题时,业务人员往往淹没在大量告警中,难以快速准确定位问题所在。因此,我们需要了解监控指标之间的关联性,当业务出现问题时,给用户一个汇总告警。这样不仅可以避免告警的泛滥,还可以让用户一目了然地看到反映问题的相关指标,从而更快地找到问题的根源。从产品的角度来看,这也是一个成熟的业务异常检测系统中非常重要的一环,即根因分析。我们不仅希望及时响应业务问题,更希望减少从发现问题到解决问题的时间和成本。4.算法可扩展性和实时性算法和整个系统需要对亿级数据指标实现秒级实时响应。因此,我们主要考虑支持在线学习(OnlineLearning)的轻量级算法模型的应用。近年来,深度学习在异常检测领域的应用逐渐成熟,比传统的统计模型算法具有更强的泛化能力。但是这些算法的训练成本都比较高,因此需要选择对实时性要求较高的指标体系。三、DataPipeline的算法实现思路基于以上设计原则,DataPipeline提出了解决问题的几个步骤:1.访问数据,首先利用DataPipeline自身的数据集成能力,访问来自不同数据源的实时数据流或批量数据set经过预处理,形成多个指标的时间序列数据。2.正常表现建模然后学习各个单指标时序数据的正常表现模式,拟合模型,自动生成置信区间。如下图,深蓝色部分是数据本身,浅蓝色部分是自动生成的置信区间,红色部分是异常。3.异常的检测和过滤对于新的数据点,一旦超过置信区间,系统就会将其识别为异常。然后对每个识别的异常进行评分和过滤。4.多异常关联自动报警对于检测到的多异常,算法自动进行关联学习并进行关联。最后,生成摘要告警并发送给用户。下面着重讲解建模单个数据的正常表现、异常检测和关联多个指标的异常的具体技术实现。1.对单一数据的正常行为建模在过去的几十年里,已经研究和开发了许多不同类型的算法来试图解决这个问题。其中有比较传统的基于统计模型的算法,还有很多基于时间序列数据的分析方法。近年来,流行的深度学习模型也被证明在时序数据预测和异常检测方面具有较高的准确性。这些算法一般遵循这样一个步骤:首先对历史数据进行建模,学习数据正常行为的规律。对于新的数据点,根据数据点偏离正常性能模型的程度判断是否异常。例如,最简单的算法模型是高斯分布。假设指标数据符合高斯分布,则可以从历史数据点中估计出高斯分布的均值和期望(均值)μ和标准差σ,进而判断新的数据点。如果有99.7%的概率数据点不能被模型解释,如果它偏离预期超过三个标准差,我们就可以称之为异常。然而,现实是大多数数据不能简单地用高斯分布来表示。因此,首先我们需要根据数据本身自动选择最适合的算法模型。这也是很多开源的异常检测算法被直接使用而往往得不到满意结果的原因之一,因为它们一般假设数据的底层性能是平稳的(Stationary),而数据是规则采样的(Regular采样)。使用不合适的算法模型对数据进行建模会得到非常糟糕的结果,甚至完全无法使用。因此DataPipeline开发了一种算法,可以根据数据的表示自动选择最合适的算法进行拟合。最常用的算法可以分为基于统计模型的算法和基于深度学习的算法。统计模型算法除了上面提到的高斯分布外,更常用的模型是基于指数平滑(ExponentialSmoothing)模型,它实际上是对过去的数据进行平均来预测未来的数据,只是把更接近当前数据点的时间给一个更大的重量。比较经典的有Holt-Winters、ARIMA等,也可以考虑周期律。·深度学习算法对于不符合正则采样、不表现为Staionary的数据,深度学习算法的效果更好。LSTM(长短期记忆)是最常用的算法,许多最新的算法都是基于LSTM的变体。但是,深度学习算法很难做到实时训练,即用新的数据点实时更新模型,当监控数据量大时,会消耗大量CPU。算法自动选择最适合的模型后,系统可以根据历史数据拟合模型,估计模型参数,然后对每个数据点给出预测。对于实际数据点与预测数据点之间的差异(误差),我们可以使用高斯分布进行模拟,并使用高斯模型计算置信区间。当新数据的误差偏离置信区间过大时,判断为异常。2.周期性学习许多指标数据表现出明显的周期性,周期性学习对于异常检测的准确性至关重要。自动学习周期性的最常用方法是自相关。简而言之,该算法就是将数据平移过去一个时间差(Lag),然后计算平移后的数据与原始数据之间的统计相关性。如果滞后翻译后的数据与原始数据高度相关,则滞后被认为是数据的周期性。该算法的主要问题是计算量大,因为需要计算多个Lags。鉴于上述实时性和可扩展性要求,DataPipeline通过二次采样优化算法,降低计算复杂度。3.相关性学习前面提到,为了解决告警泛滥的问题,我们需要一种能够自动计算指标间相关性的算法。当多个异常同时发生时,我们可以将反映同一个业务问题的异常关联在一起,给用户一个汇总告警。对于这类问题,一般传统的方法是采用多元分析(MultivariateAnalysis),即将所有时间序列数据建模为相互关联的多元变量,然后在整体层面进行异常检测。该方法的主要问题是难以缩放,并且在出现异常时对检测结果的解释很差。因此,在DataPipeline中,我们使用单变量分析对每个指标进行异常检测,然后使用大规模聚类算法对相关性高的指标进行聚类(如上图)。这样每个指标的机器学习和相关学习两部分可以分别进行缩放,使得整个系统的计算效率更高。聚类算法通过几类特征进行计算:·异常表现的相似度简而言之,如果两个指标多次出现,同时出现异常,则认为它们的相关性更高。我们可以生成异常性能的特征向量。如果某个时间点指标正常,则设置为0,如果异常,则设置为异常评分(算法根据异常的严重程度自动评分)。·统计模型的相似性是指指标的取值是否具有相似的模式。计算两个时间序列数据的数值相似度最常用的算法是皮尔逊相关系数。·元数据相似度与人为反馈DataPipeline也是根据元数据的拓扑关系判断相关性。例如,同一指标的多个维度生成的多个子指标将被认为更相关。另外,用户也可以输入一些信息,告诉系统哪些指标比较相关。4、构建企业级业务监控和异常检测系统的DataPipeline系统架构有哪些组成部分?下面是DataPipeline的一些思路。1.产品功能构成从产品功能来看,系统可以对接企业的各个业务系统(左侧),包括核心业务系统和现有的各种系统,如数据分析、监控系统等。挑战在于如何以一致的方式访问来自多个来源的异构数据,以及如何同时处理流式和批式数据。DataPipeline现有的数据融合产品可以很好地做到这一点。如果企业自行建设,需要根据具体情况确定实施方式。另外,对于中间的系统内核,我们将其设计为一个与业务完全解耦的黑盒。右侧是用户交互UI,包括两部分:第一部分是报警系统,可以根据公司的报警需求,接收钉钉、邮件、电话等企业通信APP。二是监控大盘,可以看到监控的指标数据,可以搜索不同的指标,多维度展示。此外,还可以看到指标异常的汇总展示、根因展示等。从看板上,用户可以根据展示的异常进行反馈,指出是正确的异常还是误报,也可以调整指标异常检测的灵敏度。这些反馈和调整被反馈到系统中。2.核心系统架构核心系统主要分为在线处理和离线模型训练两部分。在线部分对实时数据指标的最新数据流进行处理,从模型存储库中读取模型存入内存,并对数据流中的每个数据指标进行实时阈值计算、异常检测和评分。之后,将多个数据指标的异常检测结果聚合到关联处理器进行异常关联,最终将关联的异常指标组聚合生成并触发告警。在处理实时指标数据时,处理器会将最新的指标数据和检测到的异常写入数据库,为离线训练做准备。离线部分会定期从数据指标历史数据库中读取数据,进行离线模型训练,包括上述算法的自动选择、周期性学习等,模型也会定期使用返回的反馈进行评估由用户,并计算误报率和漏报率。得出结论,不能及时解决业务异常会给企业带来巨大的经济损失。相较于传统的人工生成报表、人工设置阈值的监控方式,基于AI的业务异常检测系统能够更加自动化、全面地监控业务指标,提供更加准确、更有帮助的告警和业务洞察。然而,构建这样的系统面临着业务数据形式多样、告警过多、准确率不高等挑战。随着企业级人工智能业务异常检测系统的出现,企业可以更高效、及时、全面地管控业务,从而实现业务和经济效益的提升。DataPipelineAI负责人王锐在大咖公开课上做了一个名为《业务异常实时自动化检测 — 基于人工智能的系统实战》的分享。本文根据分享内容整理。王锐,曾任Facebook/InstagramAI技术负责人,现任DataPipelineAI负责人,负责企业级业务异常检测产品研发,旨在帮助企业解决业务自动化监控和异常检测一站式解决问题。分享主要从以下四个方面来和大家分享打造这款产品的思路和实战。
