MOSPAT: AutoML based Model Selection and Parameter Tuning for Time Series Anomaly Detection

MOSPAT:基于 AutoML 的模型选择和参数调整,用于时间序列异常检测

DOI:10.48550/arxiv.2205.11755

摘要

组织利用异常和变更点检测算法来检测用户行为或服务可用性和性能的变化。 许多现成的检测算法虽然有效,但不容易在大型组织中使用,在大型组织中,数千名用户监控数百万个具有不同时间序列特征和异常模式的用例和指标。 算法和参数的选择需要针对每个用例进行精确:手动调整无法扩展,而自动调整需要基本事实,而这是很少有的。 在本文中,我们探索 MOSPAT,一种基于端到端自动化机器学习的模型和参数选择方法,与生成模型相结合来生成标记数据。 我们的可扩展端到端系统允许大型组织中的个人用户根据其特定用例和数据特征定制时间序列监控,而无需异常检测算法的专业知识或繁琐的手动标记。 我们对真实数据和合成数据进行的广泛实验表明,该方法始终优于使用任何单一算法。

1 简介

检测异常和变化点的问题是许多工程组织的核心问题,以便监控系统性能和可靠性或了解用户增长和保留的突然变化。 在互联网公司中,异常和变化点检测算法在监控互联网基础设施方面有特殊的应用,例如大型代码库中的回归[41]、监控网络流量[23]和预测指标[39]。 此类问题也出现在各种其他领域,例如气候建模[30]、人类活动识别[8]、语音识别[35]、金融[25]等。

关于异常[5]和 变化点检测[2],常用于此类场景。 然而,尽管有大量可用算法,但解决现实世界中的异常检测问题通常具有挑战性。 不同来源生成的时间序列差异很大,用户的检测意图也往往各不相同。 没有一种检测方法能够在所有场景下都表现良好,并且算法参数通常不直观,并且在没有专家指导的情况下很难手动调整。 最后,由于获取地面真相的成本很高,评估检测算法仍然是一项具有挑战性的任务[42]。

人们很少关注在缺乏真实数据的情况下进行算法推荐的 AutoML 方法的开发。 综上所述,时间序列异常检测算法的用户面临以下问题:

  1. 大型组织内部的时间序列数据可能存在很大差异。 每个团队或应用程序都会生成具有不同特征的时间序列。 用户通常不清楚应选择哪些算法来实现其目的,以及如何设置阈值。
  2. 由于缺乏真实数据,评估异常检测算法很困难。 手动标记时间序列的过程是劳动密集型的,并且对于个人设置算法来说是不切实际的。 这使得纯粹的监督算法选择方法变得不切实际。
  3. 用户通常不具备异常检测方面的深厚专业知识。 各个算法基于生成模型和统计假设,如果不明确了解这些算法,就很难知道这些模型和统计假设。 同样,设置参数通常需要算法的专业知识。

在大型组织中,大量人员正在为其指标设置监控,我们的目标是让用户在没有专家指导(或没有分析师参与)的情况下设置监控。 这是时间序列领域的常见问题。 例如,众所周知的 Prophet[39] 包试图解决这个问题以进行大规模预测。 出于类似的目标,对于异常检测空间,为了实现自动检测器推荐的目标,我们提出了一个端到端的框架,MOSPAT(模型选择和参数调整)。 我们的主要贡献如下:

  1. 在缺乏基本事实的情况下,我们提出了一种生成模型来模仿未标记数据的特征,并在已知位置注入不同类型的异常。 这为我们的监督学习算法提供了训练数据集。
  2. 我们实施监督学习方法,根据时间序列的特征学习最佳的检测器和参数。
  3. 我们针对我们的 AutoML 方法对大量现有的时间序列检测方法进行了评估和基准测试,并将其纳入我们的开源框架 Kats[32],并显示出显着的改进。 我们使用合成数据和真实数据进行评估。

更正式地说,我们的现实世界用例由来自 K 个不同来源的时间序列组成。 我们假设对于每个源(例如,大型组织中的团队),一组时间序列 𝑇𝑘 是从相同的分布 𝑇𝑘 ∼ 𝐷𝑘∀𝑘 ∈ 𝐾 生成的。 给定来自任何这些来源的新时间序列,我们希望预测算法和参数组合,这可以为异常检测提供最佳性能,而无需手动标记来自每个 K 来源的数据。 在此类问题中,对我们感兴趣的异常类型进行分类通常很有用[7]。在我们的案例中,我们对三种不同类型的异常特别感兴趣,我们在论文中对此进行了详细描述。 这些是尖峰、电平变化和趋势变化,如图 1 所示。

我们的端到端算法由四个重要步骤组成: 

  • 离线合成数据准备:我们生成带有标记的已知异常位置的合成数据集,该数据集模仿实际数据。
  • 离线训练数据准备:我们使用合成数据,找到每个数据集的最佳算法和最佳参数集,并将它们用作我们监督学习任务的标签
  • 离线监督学习:我们学习监督学习算法,其中 可以预测新时间序列的最佳算法和最佳参数。
  • 在线推理:此步骤实时进行,对于新的时间序列,我们预测最佳算法,然后预测算法的最佳参数。

我们的方法发布在开源库 Kats[32] 中,并且可以使用公开数据轻松复制。

2 相关工作

评估是异常和变化点检测中的一个难题。 文献通常关注精心设计的合成数据集[13],以及一些标准数据集,例如水平移动的测井数据[1,22]。 一些作者创建了手工标记的数据集,用于基准算法。 这包括用于异常检测的 Numenta 基准[26] 和图灵 ChangePoint 数据集 (TCPD)[42]。 然而,每个团队生成的时间序列数据都非常适合自己的需求,因此使用黄金标准基准数据集通常会导致希望在现实世界中建立异常检测的团队得到次优结果。

Numenta 基准评估[26]通过为真阳性和假阳性分配不同的分数并惩罚延迟检测来设计自定义评分策略。 TCPD[42]使用基于聚类和分类的度量。 我们的评估指标与此处描述的基于分类的方法最接近。 先前对异常检测算法的调查曾尝试将异常分类到不同的子域中。 例如,乔杜里等人。 等[7] 将异常分类为点异常、变化检测(水平和方差变化)、模式异常和概念漂移。 库克等。 等[10] 对点异常、上下文异常和模式异常做出类似的分类。

业界使用了多种时间序列异常检测算法,例如微软的框架[37]、Salesforce的Merlion[4]、Zillow的Luminaire[6]。 业界的这些工作指出了许多类似的问题,例如缺乏标签和泛化[37]、需要 AutoML[4] 和合成异常[6]。

AutoML 作为提高性能指标的方法已广泛应用于机器学习中[27]。 在时间序列的背景下,AutoML 方法在预测[44]和时间序列数据清理[38]中得到了广泛的接受。 一些现有的端到端异常检测框架,如Merlion[4]、PyODDS[28]、TODS[24]都采用了AutoML方法。 除了使用 AutoML 选择最佳参数之外,时间序列异常检测算法还学习了集成 [19] 并使用人类输入来选择最佳检测算法 [14]。 然而,这些算法假设存在标记数据来学习最佳参数,并且没有构建可以在没有标记数据的情况下工作的端到端系统。

最后,由于对隐私保护方法的重视,合成时间序列生成近年来变得非常重要。 TimeGAN[43] 是一种基于深度学习的方法来生成合成数据集。 然而,这种合成数据生成方法无法生成带有各种标记异常的时间序列。

3 检测算法

我们考虑了多种我们选择的单独检测算法。 这些算法是作者参与的开源包 Kats[32] 的一部分。我们使用众所周知的算法,有时会对其进行修改以捕获应用程序中遇到的时间序列的特殊性。 例如,在公司内部,业务时间序列往往表现出较强的季节性、节假日效应等[39]。

下面,我们对算法进行简要描述。 除了它们的描述之外,我们还提到了每个算法的超参数。 这很重要,因为我们的端到端系统为每种算法建议最佳的超参数。

• Outlier:这是R[17] 中预测包中outlierts() 函数的忠实实现。 首先,我们使用STL分解,将时间序列分解为趋势、季节性和残差。 我们对时间序列进行去趋势化和去季节性化。 残差通过 IQR 和用户指定的乘数进行缩放,并报告为输出分数。该算法的超参数是 IQR 乘数,即四分位数范围的多少倍应被视为异常值。 直观上,我们认为这种方法对于捕获峰值异常很有用。

• CUSUM:这是对CUSUM 算法的轻微修改[34]。 CUSUM 指 Cumulative sum,指的是计算归一化观测值 𝑧 的累积和,其中z_{_{t}}= \frac{x_{_t}-\bar{x}}{\sigma _{x}} (1)

在每个时间步,我们计算一个累积和(𝜔 是似然函数)𝑆𝑡+1 = 𝑚𝑎𝑥 (0,𝑆𝑡 + 𝑧𝑛 − 𝜔) (2)

在我们的设置中,我们经常查看时间序列,这些序列显示出与正常行为的偏差并恢复正常。CUSUM 是专门为捕获此类情况而设计的。 由于季节性在我们的应用中很重要,因此我们还在应用 CUSUM 之前通过使用 STL 分解来消除季节性。 该算法的超参数由历史数据窗口和指示是否应删除季节性的布尔标志组成。

• Statsig:这是一个检测器,它使用t-检验来确定控制窗口和测试窗口之间的变化是否显着。 由于其简单性和可解释性,这是许多用户首选的检测器。 该算法的超参数再次由历史窗口和测试窗口组成。

• BOCPD(贝叶斯在线变化点检测):这是贝叶斯在线变化点检测算法的忠实再现[1]。 BOCPD 采用贝叶斯方法进行变化点检测。 它假设时间 t 处变化点的先验概率为 𝑝 (𝑟𝑡 )。 观察数据 𝑥1:𝑡 后,计算后验概率 𝑃 (𝑟𝑡|𝑥1:𝑡 )。 BOCPD 基本上假设一个底层预测模型(UPM),对应于数据的生成模型𝑃 (𝑥𝑡|𝑥1:𝑡−1),并使用递归方程来计算𝑃 (𝑟𝑡|𝑥1:𝑡 )。 基于 UPM 术语 𝑃 (𝑟𝑡−1|𝑥1:𝑡−1)。 超参数由变化点 𝑝 (𝑟𝑡 ) 的先验概率组成。 在对变点检测器的综合评估中,BOCPD 被证明是性能最好的变点检测算法之一[42]。

• MKDetector:该算法基于非参数Mann-Kendall 检验[20,29] 检测趋势变化。其零假设是时间序列中不存在单调趋势,其备择假设则相反。检验统计量值的突然变化表明存在变化点。曼-肯德尔检验成本高昂,并且是在当前点的数据窗口内执行的。超参数是数据窗口和是否应删除季节性的指标。

• Prophet:Prophet[39]作为一种预测算法在业界得到广泛应用。 Prophet的设计考虑到商业时间序列具有较强的季节性、节假日影响等特点。 虽然 Prophet 是一种预测算法,但它会在预测过程中检测变化点。 这些检测到的变化点已用于许多变化点检测应用程序[40,42]。 我们使用 Prophet 进行趋势变化点检测。

正如我们之前提到的,我们特别感兴趣的是三种不同类型的异常:尖峰、水平变化和趋势变化。 我们已经包含了这些特定的算法来捕获这三种异常。 直观上,基于所使用的统计模型,我们认为以下算法应该最好地捕获每种类型的异常:

  1. • 尖峰:离群值
  2. • 级别转换:CUSUM、BOCPD、StatSig
  3. • 趋势转换:Prophet、MKDetector

每个算法都会返回一个异常分数 ,与时间序列的长度相同。 异常分数可以取不同的值,具体取决于算法。 一般来说,分数的绝对值越大,表明出现异常的可能性越高,或者异常幅度越大。 对于每个算法,除了其特定的超参数外,我们还将分数的高和低(向上和向下)阈值视为超参数,并在这个空间上进行搜索。

4 评估检测算法

我们的评估方法紧密遵循 Burg 等人的评估方法。 al.[42],他们将这种变化点检测算法视为分类问题。 我们的目标是定义精度 P 和召回率 R,最后将它们组合成一个分数,对应于 𝐹𝛽 度量。

我们使用 𝛽 = 1,它对应于 F1 分数。

精度和召回率的定义被修改,以适应真实变化点周围的误差范围[21,42]。 这允许较小的差异和较小的检测延迟。 然而,类似于Killing et。 al.[21],我们确保如果在边缘内检测到多个变化点,我们只将一个视为真阳性。 令 𝜒 为检测算法检测到的所有变化点位置的集合。 和 是一组地面真实变化点位置。 我们将真阳性定义 𝑇 𝑃 (Γ,𝜒) 为那些 𝜏 ∈ Γ ,其中 ∃𝑥 ∈ 𝜒 使得|𝜏 − 𝑥|≤ 𝑀。 只有单个 𝑥 ε 𝜒 可以与单个 𝜏 ε Γ 匹配。

作为惯例,我们将 t=0 作为一个简单的变化点,这可以避免在没有变化点的情况下定义未定义。 除了上述内容之外,我们特别感兴趣的是误报的数量。 我们将其定义为不在真阳性边缘的所有阳性的集合 

 5 生成标记数据

创建和评估异常检测模型的一个巨大障碍是缺乏真实数据。 通常,用户输入是一组时间序列,可能包含也可能不包含异常。 这些时间序列没有标记,即异常的位置和存在未知。 我们感兴趣的是从相同分布(即具有相似特征)生成的其他时间序列中检测异常的问题。 我们分两步从未标记的时间序列数据中生成标记的训练数据。 第一步,我们构建一个与真实时间序列具有相似特征但不包含异常的模拟时间序列。 在第二步中,我们在此模拟时间序列上注入适当的异常。 工作流程如图 1 所示。

5.1 模拟时间序列

首先,我们根据未标记的时间序列数据生成模拟时间序列,该数据可能包含也可能不包含异常。 为此,我们使用 STL 分解[9]来分解原始时间序列。 STL分解将时间序列分为三部分:趋势、季节性和残差。 我们假设实时序列中的异常将出现在趋势分量中,或者作为残差分量中的异常值。 我们通过添加随机噪声来构建合成时间序列,其均值和标准差与STL的残差相同。 然后,我们添加季节性成分。 模拟的时间序列应该反映真实时间序列的特征,而不是异常现象。 这很有用,因为:

  • 我们可以生成无限量的合成数据,通常大于原始数据集的大小。
  • 我们可以消除原始数据中的未知异常。 由于我们不知道这些异常的位置,这在计划使用这些数据作为训练数据时出现了问题。

 5.2 注入异常

为了在合成数据上创建异常,首先,我们选择异常的位置。 假设异常的位置是独立的。 因此,异常之间的间隔是从几何分布中随机抽取的,如下所示: 𝜏𝑠 − 𝜏𝑠−1 = 𝐺 ( 1 𝜏𝑑𝑖𝑠𝑡 ) (7) 其中 𝜏𝑑𝑖𝑠𝑡 是平均间隔长度。

5.1 模拟时间序列

首先,我们根据未标记的时间序列数据生成模拟时间序列,该数据可能包含也可能不包含异常。 为此,我们使用 STL 分解[9]来分解原始时间序列。 STL分解将时间序列分为三部分:趋势、季节性和残差。 我们假设实时序列中的异常将出现在趋势分量中,或者作为残差分量中的异常值。 我们通过添加随机噪声来构建合成时间序列,其均值和标准差与STL的残差相同。 然后,我们添加季节性成分。 模拟的时间序列应该反映真实时间序列的特征,而不是异常现象。 这很有用,因为:

  • • 我们可以生成无限量的合成数据,通常大于原始数据集的大小。
  • • 我们可以消除原始数据中的未知异常。 由于我们不知道这些异常的位置,因此在计划使用这些数据作为训练数据时会出现问题。

5.2 注入异常

为了在合成数据上创建异常,首先,我们选择异常的位置。 假设异常的位置是独立的。 因此,异常之间的间隔是从几何分布中随机抽取的,如下所示:

 其中 𝜏𝑑𝑖𝑠𝑡 是平均间隔长度。

在水平和趋势变化的情况下,我们假设时间序列分为段 𝜏1 < 𝜏2 < 𝜏3 < ...𝜏𝑘,其中 𝜏𝑠 如上所示。 一旦我们确定了异常的位置,我们就注入三种不同类型的异常:尖峰、水平变化和趋势变化。 每个时间序列都注入一种异常。

• 尖峰:尖峰的 z 分数首先从正态分布中得出。 然后从伯努利分布中得出尖峰的方向。

𝑆𝑠𝑝𝑖𝑘𝑒 ∼ 𝐵𝑒𝑟 (𝑝𝑠𝑝𝑖𝑘𝑒 ) (8)

𝑠𝑝𝑖𝑘𝑒 ∼ 𝑁 (𝜇𝑠𝑝𝑖) 𝑘𝑒,𝜎2 𝑠𝑝𝑖𝑘𝑒 ) (9)

最后,我们找到时间序列数据 ^ 𝜎 的经验标准差,并在 𝜏𝑠 𝑥𝜏𝑠 = 𝑥𝜏𝑠 + (− 1)𝑆𝑠𝑝𝑖𝑘𝑒 [𝑠 ] 𝑍𝑠𝑝𝑖𝑘𝑒 [𝑠] ^ 𝜎 (10)

• 电平转换:如上所述,在这种情况下,𝜏𝑠 表示变化点。 每个段由级别 𝜇𝑠 定义。 因此,时间序列中的点生成为 𝑥𝑡 ∼ 𝑁 (𝜇𝑠,𝜎𝐿)∀𝑡 ∈ (𝜏𝑠−1,𝜏𝑠 )(11)

两个连续变化点之间的电平移动的幅度是从正态分布中得出的。 我们研究两种不同的常见观察到的电平变化。 在许多应用中,时间序列显示交替的电平变化。 例如,基础设施系统 [41] 中的效率回归的特征是,功能或端点的 CPU 利用率或每秒查询 (QPS) 模式比其之前的基线出现意外增加。 回归结束时,函数返回到其基线值。 我们通过注入交替电平转换来模拟这一点。 我们还模拟了更一般的能级移动的能级情况,其中移动的符号是像以前一样从伯努利分布中得出的。

在第一种情况下,我们可以写: 𝜇𝑠 ∼ (−1)𝑠 𝑁 (𝜇𝑠−1,𝜎𝜇 ) (12)

在第二种情况下,𝑆𝑙𝑒𝑣𝑒𝑙 ∼ 𝐵𝑒𝑟 (𝑝𝑙𝑒𝑣) 𝑒𝑙 ) (13) 𝜇𝑠 ∼ (−1)𝑆𝑙𝑒𝑣𝑒𝑙 [𝑠 ] 𝑁 (𝜇𝑠−1,𝜎𝜇)

• 趋势转变:如上所述,𝜏𝑠表示变化点。 每个部分都由趋势 𝛽𝑠 定义。 因此,在一段内部,时间序列中的点生成为: 𝑥𝑡 ∼ 𝑁 (𝛽𝑠𝑡,𝜎𝑇 ) (15)

这相当于将每个段表示为添加高斯噪声的直线。 和以前一样,我们在这种情况下考虑轮班。 这是最常见的场景,其中指标正在增加,然后由于某种异常而突然开始减少,这是需要检测的事件。 在这种情况下,𝛽𝑠 ∼ (−1)𝑠 𝑁 (𝛽𝑠−1,𝜎𝛽)(16)

这些分布的参数是通过根据我们领域中时间序列数据的经验观察做出合理估计来选择的。 图 2 显示了我们实验中使用的四个随机选择的实时序列数据示例(这些数据在第 7.3 节中详细描述)。 图 3 显示了我们的生成模型生成的四个随机选择的标记训练数据示例。 可以看出,生成模型捕捉了时间序列的显着特征,例如峰值、水平/趋势变化和季节性。 为了进一步研究这一点,我们使用 T-SNE 进行降维,我们将在第 7 节中详细描述。

6 自动化机器学习

在我们的端到端系统的下一步中,我们使用我们生成的标记异常数据来学习给定时间序列的最佳算法和参数。 这种 AutoML 方法分两个阶段进行。 我们的第一个模型尝试进行模型选择,然后使用第二个模型来找到最佳的超参数。 工作流程如图 4 所示。我们的 AutoML 方法本质上与时间序列预测[44]所述的方法类似,但在评估程序和使用的算法上存在显着差异。 我们准备训练数据和算法训练的步骤,虽然耗时,但都是离线完成的,对于新团队设置异常检测来说是一次性程序。 推理和端到端异常检测是在线完成的,不需要花费大量的时间,因此可以由用户实时完成。 以下是我们为自动化机器学习采取的步骤:

  • 构建数据集:首先,我们为此模型构建训练数据集。 对于每个注入异常的模拟时间序列,我们尝试所有基本模型; 对于每个模型,我们对其参数空间进行随机搜索,以找到优化所选指标的集合。 对于我们的案例,我们选择 F 分数作为指标,但我们的框架支持许多不同的指标,例如精度、召回率和检测延迟。 训练集的准备是问题中最耗时的部分。 我们存储每个模型的最佳模型和最佳超参数。 最好的模型作为我们监督训练过程的标签。 当多个模型对于给定时间序列给出相同的 F 分数时,我们随机选择一个模型作为最佳模型。
  • 特征提取:我们提取每个时间序列的特征,这些特征用作我们的监督学习算法的特征。 这些特征包括时间序列的趋势性、季节性、自相关性、非线性等特征。 我们在最终的训练算法中使用了 40 个特征。
  •  用于模型选择的监督模型:我们使用监督学习算法(在本例中为随机森林)来预测给定时间序列的标签。 因此,对于给定的时间序列,我们可以预测性能最佳的异常检测模型。 在我们的框架中,分类算法的选择是灵活的。 用户可以决定选择其他算法,例如逻辑回归、GBDT 或最近邻。
  • 超参数调优:我们采用基于机器学习的方法来进行超参数调优。 传统的超参数调整方法(例如网格搜索和随机搜索)对于我们试图向用户提供近实时信息的案例来说过于昂贵。 我们训练一个多任务神经网络,类似于之前的预测工作[44],它将时间序列特征作为输入并预测给定算法的最佳超参数。 多任务神经网络由共享层和任务特定层组成,每个超参数对应一个层。 损失是每个超参数的神经网络损失的平均值。 我们需要多任务神经网络的原因是因为我们经常混合使用分类和数值超参数(例如,在 CUSUM 中,扫描窗口和历史窗口是数值参数,但是否删除季节性的标志是分类参数)并且 要求一些网络最小化分类损失,另一些网络最小化回归损失。 有关网络架构的详细信息可以在Zhang等人中找到。 等人[44]。 对于每种算法,我们训练一个单独的神经网络。 在推理时,一旦选择了一种算法,我们就使用与该算法对应的多任务神经网络来预测最佳的超参数集。

7 结果和讨论

在本节中,我们将展示我们在合成数据集和真实数据集上的实验结果。 我们的主要挑战是缺乏与我们的用例相对应的标记数据集。 我们的现实世界用例由来自多个源的时间序列组成,每个源的时间序列都是从相同的分布 𝑇𝑘 ∼ 𝐷𝑘 生成的。 给定来自其中一个来源的新时间序列,我们希望预测算法和参数组合,这将提供最佳性能。 因此,在我们的实验中,我们结合了各种数据源,模拟不同类型的异常,并将我们的 AutoML 方法与对所有时间序列一致使用单一基本算法进行比较。 为了测试超参数调整的有效性,我们比较了使用多任务神经网络选择超参数与从我们定义的算法的超参数空间中选择随机超参数的结果。 此设置与用户调用我们系统的方式最相似。 鉴于我们在标记数据方面面临的挑战,我们在三种不同的设置中进行实验,这些设置对应于数据中不断提高的真实性水平:

  • • 合成时间序列数据,覆盖有异常
  • • 实时序列数据,覆盖有异常
  • • 真实的标记时间序列数据

在下面的部分中,我们将区分输入数据集和训练数据,输入数据集是用户输入的未标记数据(它们在实验中出于评估目的而被标记),训练数据是标记数据,由我们的端到端组成 - 终端系统在第 5 节中描述。

7.1 合成数据

我们的基本方法是从一小组没有异常的时间序列开始,这些时间序列是根据给定的生成模型生成的。 然后,我们在这些数据上注入各种异常,以生成更大的数据集,我们知道异常的位置。 然后向系统输入未标记的时间序列数据,已知的标签仅用于评估。 我们从一组 18 个时间序列开始。 其中 10 个是通过添加趋势噪声和每周季节性而产生的,其中 5 个是从 ARIMA 模型产生的,其中 2 个是从 i.i.d 正态分布产生的,1 个是从 i.i.d 正态分布产生的。 t 分布(自由度 5)。 对于 ARIMA 模型,我们使用 𝐴𝑅𝐼𝑀𝐴(𝑝 = 2,𝑑 = 𝛼,𝑞 = 2),其中 𝛼 ∼ 𝐵𝑒𝑟 (0.5)。

每个时间序列的长度是从平均参数为 450 的泊松分布中得出的。

在这组 18 个时间序列中,我们使用模拟器注入异常以生成 432 个时间序列的更大数据集,这是我们的输入数据集。 我们使用 80% 的数据进行训练,剩下的 20% 纯粹用于算法评估。 使用训练集,我们创建标记的合成数据,并使用该合成数据来训练监督学习算法。 与分类问题不同,我们对分类模型本身的分数并不直接感兴趣。 相反,我们有兴趣评估端到端工作流程。 对于评估集中的每个时间序列,我们分两步评估工作流程,

  • • 我们使用经过训练的监督模型预测最佳模型。
  • • 我们使用随机超参数或多任务神经网络来预测超参数。

然后,我们计算模型的 F 分数和所选的超参数集。

评估数据的平均 F 分数如表 1 所示。我们展示了优化的 F 分数(使用 AutoML 选择算法参数时获得的)以及随机 F 分数(其中参数是随机选择的) 从参数空间。 我们观察到,对于所有数据,就 F 分数而言,AutoML 的表现比一致使用任何特定算法更好。 通过超参数调整,AutoML 结果也得到了显着改善。 超参数调整似乎对某些算法(例如 BOCPD)有很大的改进(超过 50%),而 MKDetector 或 Prophet 似乎并没有受到超参数调整的帮助。 在接下来的部分中使用真实和注入时间序列数据进行的实验中也观察到了这一点。 鉴于 AutoML 始终受到超参数调整的帮助,我们假设超参数调整不起作用的情况是不适合此检测器类型的情况,例如 mkDetector 情况下的尖峰(部署用于捕获趋势变化) 。 因此,我们的超参数调整虽然不适用于这些情况,但它对于 AutoML 效果很好,这是我们的主要目标。

7.2 注入异常的真实数据

我们的真实数据集由 18 个公开可用的时间序列数据集组成,其中 13 个来自 Google Mobility 数据集[15],5 个来自 Bee-Dance 数据集[33]。 Google 移动数据总结了 2020 年 2 月 6 日之后用户每天在各种类型的地方(例如住宅、工作场所和杂货店)花费的时间。 时间序列中的值代表与 2020 年 2 月 16 日测量的基线相比流动性的百分比变化。 这些数据包含很强的每周季节性,这是我们关心的许多应用程序所共有的特征。 蜜蜂舞蹈数据集[33]记录了蜜蜂运动在x和y维度上的像素位置和角度差。 动物行为学家对三阶段蜜蜂摇摆舞很感兴趣,旨在确定从一个阶段到另一个阶段的转变点。 与谷歌移动数据相比,它不包含任何季节性影响。

使用真实数据集而不是合成数据集使我们能够模拟更真实的设置,同时仍然保持足够大的数据集。 我们专注于没有巨大峰值的时间序列片段。 如果时间序列中出现异常,我们会对异常进行标记。 基于 18 个时间序列数据,我们根据第 3 节中描述的过程通过注入异常创建 432 个时间序列。我们将原始时间序列中的异常以及注入的异常的串联视为真实标签。 然后,我们继续以与纯合成数据相同的方式进行评估。

首先,我们将生成的训练数据的分布与评估数据进行比较。 我们使用 T-SNE 对时间序列进行降维,并将其投影到图 5(a) 中的二维。 我们观察到两个分布之间存在高度重叠,这表明生成的时间序列数据能够模仿输入数据的特征。 这证实了我们的生成模型在这个简单案例中的有效性。

表 2 显示了随机超参数选择和最佳超参数的平均 F 分数结果。 使用 AutoML,我们能够获得 0.720 的平均 F 分数,这比性能最佳的单一算法 BOCPD 提高了 12%。 在这种情况下,超参数调整可以提高 AutoML 的性能。

此外,我们想要分析这些选定的模型是否符合我们直观的预期。 如前所述,开发算法是为了解决特定类型的异常。 Outlier 应该擅长捕捉尖峰异常,Statsig/BOCPD/CUSUM 擅长捕捉水平变化,而 MKDetector/Prophet 则旨在捕捉趋势变化异常。 由于在纯合成和真实注入的数据中,我们手动注入了各种异常,因此我们可以检查最佳预测算法(针对评估数据集)是否符合我们的直觉。 表 4 和表 5 分别显示了合成数据和注入数据的结果。 我们展示了 AutoML 程序选择最佳算法的每种注入类型的示例数量。 很大程度上,我们的直觉是正确的,我们可以看到 Outlier 擅长识别尖峰,BOCPD 擅长识别电平变化,而 Prophet 和 MKDetector 擅长趋势变化。 然而,这些假设并不总是正确的。 例如,在表 4 中,我们观察到异常值也非常擅长捕捉趋势变化。 因此,AutoML 虽然直观上方向正确,但不依赖于这种启发式方法,并且能够选择算法并改进直觉。

7.3 真实数据

虽然我们之前对合成数据的实验允许我们获得大样本量,但它们可能并不完全现实。 我们的端到端方法还具有以下优点:用于构建输入数据集的异常注入过程也类似于用于构建标记训练数据的过程。 因此,我们在纯标记的真实数据上测试我们的算法。 获得此测试的成本很高,但却是我们 AutoML 过程的最黄金测试。

我们的真实数据集由来自 4 个不同来源的 106 个时间序列组成,它们最好地复制了我们的用户环境。 这些数据源也是公开的,因此可以轻松复制我们的结果。 尽管数字看起来很小,但与监督学习中使用的示例相比,异常检测数据的收集和标记成本要高得多。 为了进行比较,之前最全面的变点检测算法研究[42]使用了37个标记时间序列。 我们收集了时间序列数据,并手工标记了异常位置。 数据源是

  • • 扫描线:这是像素值的单变量时间序列,是图像编号的水平扫描线。 42049 来自伯克利分割数据集[31]。 它以前曾用于变化点评估[42],并显示图像片段之间的特征水平偏移。 我们在多个位置水平扫描以获得 20 个时间序列。
  • • 空气质量:这由UCI 机器学习存储库[12] 中空气质量数据集[11] 的时间序列组成。 这些数据每小时收集一次,并且具有每日季节性,这是互联网公司建模的许多时间序列的特征。 该数据集之前已用于预测[18]。
  • • 网络流量:这包括由Google 发布的各个维基百科页面[16] 的网络流量。 该数据集已广泛用于时间序列预测基准测试[36]。
  • • HAR:UCI 机器学习存储库 [12] 中的 HAR 数据集 [3] 提供了便携式加速度计收集的人类活动信息,当参与者进行不同的活动(例如站立、行走等)时。与上述三种情况不同,这里我们使用活动变化信息 获取变化点位置。

从这个输入数据集中,我们留下 68 个时间序列进行评估,并使用其余数据构建训练数据集,其中包含 563 个标记示例。 图5(b)显示了评估数据和生成的训练数据的分布。 这是比上一节更强有力的结果,其中输入和生成的数据都是通过异常注入创建的。 在这种情况下,即使对于具有更复杂分布的实时序列,生成的数据的分布也包含真实数据。 生成的数据还包含不存在真实数据的空间区域中的点。 这可能意味着我们正在考虑比实际数据表现出的更大范围的异常。

表3显示了评估数据的F分数。 具有超参数调整的 AutoML 仍然表现最佳。 与合成数据相比,F 分数较低,这表明对真实数据的异常检测是一个相当困难的问题。 StatSig 被评为性能最差的算法,这是意料之中的,因为它的假设过于简单。 BOCPD 在所有三种情况下都表现良好,这并不奇怪,因为它在之前对变点算法的综合研究中被评为顶级算法 [42]。 事实上,AutoML 在我们所有的实验中都能持续击败 BOCPD,这意味着 AutoML 方法的使用将成为解决变化点检测问题的重要工具包。 另一个需要强调的重点是,在这三个实验中,仅在基本算法之间进行比较,三个单独的基本算法表现最好。 在基础算法中,Outlier对于纯合成数据表现最好,BOCPD对于异常注入的真实数据表现最好,MKDetector对于真实数据表现最好。 因此,性能最佳的算法在很大程度上取决于输入数据的特征。 然而,AutoML 在所有情况下仍然设法优于每种算法。 用户无法先验地确定哪种算法最适合他们的数据集,而 AutoML 非常适合这种场景。

8 结论

在本文中,我们描述了我们设计和实现的一个端到端系统,用于为时间序列异常检测做出智能算法和参数选择。 这将帮助大型组织中的各个团队在没有专家指导的情况下可扩展地设置时间序列监控并实现卓越的性能。 我们的端到端系统由多个阶段组成:

  • • 构建标记训练数据集,该数据集来自与未标记输入数据类似的分布。
  • • 使用监督学习根据时间序列特征预测时间序列的最佳算法和参数

使用这种 AutoML 方法,我们能够在合成数据集和真实数据集上获得高 F 分数,始终优于我们的基本算法(这是最标准的) 用于异常和变化点检测的众所周知的解决方案。 该系统的代码是开源的并且公开可用。

未来,我们希望探索更现实的基于生成模型(例如 GAN)的合成数据生成方法。 结合更智能的搜索(例如贝叶斯优化方法)也将导致训练数据集的时间减少。 我们工作的另一个自然延伸是基于意图的检测,我们根据用户表达的自然语言意图构建训练数据。 例如,用户可能只对变化的趋势感兴趣而完全忽略峰值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值