作者简介
龙川泾渭,携程算法工程师,专注异常检测、根因分析、时间序列预测等领域。
摘要
携程火车票包含1000+的业务指标,人工监测指标的异常情况耗时费力,而由于业务差异,基于规则和简单统计学的检测方案只能覆盖到单个指标或者单类指标,并且不能随着新业务上线或者功能变动灵活动态的调整相应的规则,并不适用于大量不同业务线的指标。我们希望使用AI算法来代替人工,对指标进行全自动的监控,旨在发现指标的异常和导致异常的潜在原因。
具体来说,对于异常检测,使用六种无监督检测算法计算异常得分,根据时间序列特性和指标的业务特点计算异常阈值,集成多种算法的异常结果进行硬投票,得到异常结果。对于根因定位,集成了Adtributor、Hotspot等四个算法做硬投票系统,按投票次数降序输出根因结果。此外根据指标的重要程度,设置不同的投票规则,来权衡精召率。
一、背景
最近几年,火车票业务持续高速成长,业务指标种类繁多,如何快速准确的发现指标的异常以及导致异常的原因,并及时排除问题显得尤为重要。基于AI的异常检出能力,可以根据指标的历史数据分布规律,实现实时监测,帮助开发人员尽早的发现问题和挖掘产生问题的原因。
1.1 业务指标特点
我们从已有的历史监控指标中,发掘时序数据的变化规律,从而根据数据的分布特点选取合适的算法。从图1我们可以看出,火车票业务的核心业务数据,主要呈现两种规律:
1)周期型时间序列,受人们出行规律的影响,大部分核心业务指标都会呈现较强的周期型规律。由于多数用户在工作日买票,周末出行,就形成工作日的支付票量和出票票量比周末多的规律,而出行票量则表现出刚好相反的趋势。在不同业务线下,相同的业务指标之间的周期规律也不尽相同。
2)平稳型时间序列,对于任意时刻,如果它的性质不随观测时间的变化而变化,那就认为是平稳型时间序列。由于指标本身的性质和偶发性的因素影响,有些指标没有很强的规律性,而展现出相对稳定的趋势。
图1 核心业务指标的时间序列类型
不论是平稳型还是周期型指标,根据当前的业务情况上线新的营销策略,发放优惠券等活动,尤其是对出行的影响巨大的疫情及其相关的政策,均会引起指标一定程度的剧烈波动,如陡升,陡降,整体抬升或降低。
1.2 主要痛点
1)基于规则的异常检测识别适用性差。火车票业务指标目前有1000+,人工对所有指标进行检测耗时费力。而基于业务规则的检测方案只能覆盖到单个指标或者单类指标,并且业务规则的配置需要对业务特点熟悉,对于新业务上线或者功能变动则不能灵活动态的调整相应的规则,并不适用于大量不同业务线的指标。
2)大部分核心指标都是和出行相关的,而近三年由于疫情的影响,在特定的时间窗口内,用户的出行规律变化复杂,导致精准捕捉指标的周期变得困难,从而增加了异常点的检出难度。
3)异常故障需要数据分析师排查。当某个业务指标发生异常,需要快速准确的定位到是哪个交叉维度的细粒度指标的异常导致的,以便尽快做进一步的修复止损操作。由于指标维度多,每个维度取值范围大,导致人工介入解决问题的难度和时间成本高。
二、异动归因系统介绍
针对业务需求、指标的特点和当前存在的痛点等问题,我们开发了一套异动归因系统,它分为异常检测和根因定位两个子系统。异常检测系统负责将各业务指标的突然上涨和下跌等异常情况检测出来,根因定位系统是在指标出现异常的情况下,找出引起异常的原因。
2.1 异常检测系统
由于不同业务线指标数量多,规律差异大,无监督算法更符合火车票业务需求。常见的无监督异常检测算法如表1所示【1】,对于局部异常点, LOF(局部异常因子)在统计上优于其他无监督方法,而使用K次(全局)最近邻距离作为异常评分的KNN是统计上最好的全局异常检测算法。
综合考虑局部异常和全局异常点的检出能力,以及训练时长,最终确定了LOF,KNN,