微软的时间序列异常检测服务
提供各种服务的大公司通常都需要实时监控各种应用程序和服务的各项指标,例如网页浏览量、收入等,来获知其业务、产品和服务的健康状况。准确的异常检测可以触发及时的故障排除,有助于避免收入损失,维护公司的声誉和品牌。例如雅虎发布了EGADS,来对百万级的不同的时间序列进行自动监控和报警。
微软作为一个各类产品和服务被全球范围广泛应用的公司,也开发了一个时间序列异常检测方法。该方法监控来自Bing、Office和Azure的数百万个指标,帮助工程师们更快地解决问题。该方法在微软内部应用的同时,也向外部开放服务,帮助客户持续监控时间序列并及时警报潜在的异常。该方法在准确性、效率和通用性上都有优越的表现。
服务使用
该服务提供在微软的Azure平台,具体可参考(https://docs.microsoft.com/zh-cn/azure/cognitive-services/Anomaly-Detector/)。该异常检测器 API 可以自动标识最佳适配模型并将其应用到数据,不限行业、场景或数据量,通过这种方式进行适应。使用时序数据,此 API 可以确定异常检测的边界、预期的值,以及哪些数据点异常。
该检测器具有以下功能:
Feature | 说明 |
检测实时出现的异常 | 检测流式传输数据中的异常,方法是:使用以前见过的数据点来确定最近的数据点是否异常。 此操作使用发送的数据点生成一个模型,然后确定目标点是否异常。 每生成一个新数据点就调用该 API,这样就可以在创建数据时监视数据。 |
以批的形式检测整个数据集中的异常 | 使用时序来检测数据中可能存在的任何异常。 此操作使用整个时序数据生成一个模型,每个点使用同一模型进行分析。 |
获取数据的其他信息 | 获取数据的有用详细信息以及任何观察到的异常,包括预期的值、异常边界和位置。 |
调整异常检测边界 | 异常检测器 API 自动创建异常检测的边界。 调整这些边界,以便提高或降低 API 对数据异常的敏感度,并更好地拟合数据。 |
下面是演示界面:提供图形化的参数配置,可以通过鼠标点击选择开始计算的时间、异常敏感度、最大历史窗口和最大异常率等。也可以选择自己本地文件进行演示,但是实际操作需要API key。
模型流程
该服务模型主要由数据摄取、实验平台和在线计算三大模块组成。
用户可以通过向系统输入时间序列来注册监控任务,同时需要指定报警途径与数据分析粒度(例如,每分钟、小时或天)。服务支持从不同数据源(包括Azure存储、数据库和在线流数据)获取时间序列。数据摄取模块负责根据指定的粒度更新每个时间序列。更新的时间序列点通过Kafka进入流管道,并存储到timeseries数据库中。异常检测处理器在线计算模块输入时序点的异常状态。在常见场景中,用户通常同时摄取一组时间序列。例如,Bing团队摄取了代表不同市场和平台使用情况的时间序列。当事件发生时,报警服务将相关时间序列的异常组合起来,通过电子邮件等方式发送给用户。组合的异常显示事件的总体状态,并帮助用户缩短诊断问题的时间。通常的处理流程如下图所示。其中实验平台是用来评估异常检测模型的性能的。在部署新模型之前,该服务会在平台上进行线下实验和线上测试。
方法介绍
该服务再具体方法上,采用的是基于谱残差(SR)和卷积神经网络(CNN)的新算法。这也是首次尝试将SR模型从视觉显著性检测领域借用到时间序列异常检测中的实践。
时间序列异常检测应用到产业级服务上有很多挑战包括如下几点:
1) 缺少标签,只能用无监督方法,导致准确性较低;
2) 通用性差,难以适应所有的时间序列异常类型(类型如下图);
3) 效率较低,不适合在线使用;
而该服务所采用的方法在准确性、通用性和效率上都有不错的表现,得益于SR与CNN的融合。
SR是个有效的无监督算法,在视觉显著性检测领域表现出优秀的性能和鲁棒性。CNN则是在显著性检测领域广泛应用的有监督算法。二者融合,将SR算法的输出作为CNN算法的输入,为其提供经过处理后得到的标签,提高了时间序列异常检测的准确性。从实际应用的角度看,该方法也具有良好的通用性和有效性。它可以很容易地与在线监控系统集成,为重要的在线指标提供快速警报。这种技术使产品团队能够更快地检测问题,节省人工工作,并加速诊断过程。