异常评分器

评分器是异常检测模块的核心。它们生成异常评分时间序列,无论是针对直接的序列(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,模型将考虑在计算分数时联合考虑 window W 中的维度。

  • window_transform: 布尔值,指示当 window 参数超过 1 时,评分器是否需要对其输出进行后处理。如果设置为 True,每个点的分数可以通过聚合该点所在每个窗口的异常分数来分配。它返回一个点对点的异常分数。如果设置为 False,分数将在不进行此后处理步骤的情况下返回,并且是一个窗口对窗口的异常分数。默认值:True

其他有用的功能包括:

  • eval_metric_from_prediction() 接受两个(序列的)系列作为输入,计算所有的异常分数,并基于已知的异常真实情况返回一个不可知阈值度量(AUC-ROC 或 AUC-PR)的值。返回值在 0 到 1 之间,1 表示评分器可以完美地区分异常点和正常点。

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

更多细节可以在每个评分器的API文档中找到。