异常评分器

评分器是异常检测模块的核心。它们生成异常分数时间序列,可以直接用于时间序列 (score()),或者用于伴随预测的时间序列 (score_from_prediction())。

异常分数越高,对应的时间段就越“异常”。评分器可以在时间窗口上工作,窗口长度与预期发生异常的时间尺度相关。异常分数的可解释性取决于评分器本身。

函数 score_from_prediction() 通过计算预测值与实际时间序列之间的某种“差异”(或“残差”)(由 “diff_fn” 参数捕获)来工作。一些评分器是可训练的(例如,KMeansScorer,它学习历史数据上的聚类),在这种情况下,score() 函数可用于对新时间序列进行评分。其他评分器不可训练(例如,NormScorer,它简单地计算窗口内预测值和实际值之间的 Lp 范数)。在后一种情况下,不能使用 score(),只能使用 score_from_prediction() 进行评分。

一些评分器可以处理模型产生的概率预测(目前所有“NLL”评分器),而另一些则处理确定性预测(例如,KMeansScorer)。

例如,可训练的 KMeansScorer 可以使用以下函数应用

  • fit()score():直接作用于一个时间序列,以揭示不同维度之间的关系(通过窗口内的时间步长和/或多元时间序列的维度)。

  • fit_from_predictionscore_from_prediction:这将计算预测值(例如,来自预测模型)与时间序列本身之间的差异(残差)。在评分时,评分器将为与训练阶段找到的聚类相距较远的残差赋予更高的分数。

请注意,可以使用 异常模型 方便地将任何 Darts 预测模型和滤波模型与一个或多个评分器结合使用。

大多数评分器具有以下主要参数

  • window:整数值,表示评分器用于将时间序列转换为异常分数的窗口大小 W。评分器将给定的时间序列切片为大小为 W 的子序列,并返回一个值指示这些 W 个值子集有多异常。后处理步骤将把这个异常分数转换为点态异常分数(参见 window_transform 的定义)。窗口大小应与寻找的异常的预期持续时间相称。

  • component_wise:布尔参数,指示评分器如何处理多元时间序列。如果设置为 True,模型将独立处理每个时间序列维度。如果设置为 False,模型将在考虑的窗口 W 中联合考虑各个维度来计算分数。

  • window_transform:布尔值,指示当 window 参数大于 1 时,评分器是否需要对其输出进行后处理。如果设置为 True,每个点的分数可以通过聚合该点所属的每个窗口的异常分数来分配。它返回一个点态异常分数。如果设置为 False,则直接返回分数,而不进行此后处理,这是一个窗口级异常分数。默认值:True

其他有用的函数有

  • eval_metric_from_prediction():接收两个(或序列)时间序列作为输入,计算所有异常分数,并根据已知的异常真实值返回一个与阈值无关的指标值(AUC-ROC 或 AUC-PR)。返回值介于 0 和 1 之间,1 表示评分器可以完美地区分异常点和正常点。

  • fit_from_prediction():接收两个(或序列)时间序列作为输入并拟合评分器。此任务取决于评分器,但通常情况下,评分器会根据被认为是无异常的训练序列来校准其评分函数。这个训练阶段将允许评分器在评分阶段通过将被评分的序列与训练期间看到的无异常序列进行比较来检测异常。

更多详细信息可在每个评分器的 API 文档中找到。