PyOD 评分器

这个评分器可以封装 PyOD 中的检测算法。 `PyOD https://pyod.readthedocs.io/en/latest/#`_

class darts.ad.scorers.pyod_scorer.PyODScorer(model, window=1, component_wise=False, window_agg=True, diff_fn=<function ae>)[source]

基类: WindowedAnomalyScorer

PyOD 评分器

调用 fit(series) 时,会应用一个滑动窗口,生成大小为 W 的向量集,其中 W 是窗口大小。PyODScorer 模型将在这些向量上进行训练。 score(series) 函数将应用相同的滑动窗口,并返回每个向量预测的原始异常分数。

另外,该评分器提供了 fit_from_prediction()score_from_prediction() 函数。这两个函数都需要两个时序(实际值和预测值),并通过应用 diff_fn 函数(默认:绝对差)计算一个“差异”时序。然后,结果时序将分别传递给 fit()score() 函数。

component_wise 是一个布尔参数,表示模型如何处理多元输入时序。如果设置为 True,模型将独立处理每个时序维度,为每个维度拟合一个不同的 PyODScorer 模型。如果设置为 False,模型将连接长度为 W 的每个窗口中的维度,并仅使用一个底层 PyODScorer 模型计算分数。

使用 fit() 进行训练

输入可以是一个时序(单变量或多变量)或多个时序。时序将被分割成等大小的子序列。每个子序列的大小为 W * D(特征数),其中

  • W 是作为参数 window 给定的窗口大小

  • D 是时序的维度(如果为单变量或 component_wise 设置为 True,则 D = 1)

对于长度为 N 的时序,将生成 (N - W + 1) 个子序列。传递给底层评分器的最终数组 X 的形状为 (N - W + 1, W * D);换句话说,(样本数,特征数)。如果给定一个长度为 L 的时序列表,则每个时序 i 被分割,并且所有 X_i 沿样本轴连接起来。

PyOD 模型将在生成的子序列上进行拟合。

如果 component_wise 设置为 True,算法将独立应用于每个维度。每个维度都将训练一个 PyOD 模型。

使用 score() 计算分数

输入可以是一个时序(单变量或多变量)或一个时序序列。给定的时序必须与用于训练 PyOD 模型的数据具有相同的维度 D

对于每个时序,如果时序是维度为 D 的多变量时序

  • 如果 component_wise 设置为 False:它返回一个单变量时序(维度=1)。它表示在每个时间戳下,考虑窗口中整个时序的异常分数。

  • 如果 component_wise 设置为 True:它返回一个维度为 D 的多变量时序。每个维度表示输入对应组件的异常分数。

如果时序是单变量的,无论参数 component_wise 如何,它都返回一个单变量时序。

大小为 W 的窗口以步长 1 在时序上滑动。它与训练阶段使用的窗口大小 W 相同。得分时序中的每个值因此表示前 W 个值的样本有多异常。

参数
  • model (BaseDetector) – 已拟合的 PyOD BaseDetector 模型。

  • window (int) – 用于创建时序子序列的窗口大小。

  • component_wise (bool) – 布尔值,指示是否需要独立计算每个组件的分数(True),或者通过连接考虑窗口中的组件来计算一个分数(False)。默认值:False

  • window_agg (bool) – 布尔值,指示是否通过平均包含该时间步的所有窗口的异常分数来计算每个时间步的异常分数。如果为 False,则每个时间步的异常分数是其尾随窗口的异常分数。默认值:True

  • diff_fn (Callable[…, Union[float, list[float], ndarray, list[ndarray]]]) – 用于将预测时序和实际时序转换为一个时序的差分函数。然后将评分器应用于这个时序。必须是 Darts 按时间步计算的指标之一(例如,ae() 用于计算绝对差,err() 用于计算差,se() 用于计算平方差,等等)。默认情况下,使用绝对差(ae())。

属性

is_probabilistic

指示评分器是否期望将概率预测作为第一个输入。

is_trainable

指示评分器是否可训练。

is_univariate

指示评分器是否是单变量评分器。

方法

eval_metric(anomalies, series[, metric])

计算给定时间序列的异常分数,并返回一个与阈值无关的指标分数。

eval_metric_from_prediction(anomalies, ...)

计算 seriespred_series 之间的异常分数,并返回一个与阈值无关的指标分数。

fit(series)

在给定时间序列上拟合评分器。

fit_from_prediction(series, pred_series)

在两个(时序序列)上拟合评分器。

score(series)

计算给定序列的异常分数。

score_from_prediction(series, pred_series)

计算两个(时序序列)的异常分数。

show_anomalies(series[, anomalies, ...])

绘制评分器的结果。

show_anomalies_from_prediction(series, ...)

绘制评分器的结果。

eval_metric(anomalies, series, metric='AUC_ROC')

计算给定时间序列的异常分数,并返回一个与阈值无关的指标分数。

参数
  • anomalies (Union[TimeSeries, Sequence[TimeSeries]]]) – (时序序列的) 真值二元异常时序(如果是异常则为 1,否则为 0)。

  • series (Union[TimeSeries, Sequence[TimeSeries]]]) – 用于检测异常的(时序序列)。

  • metric (Literal[‘AUC_ROC’, ‘AUC_PR’]) – 要使用的指标函数名称。必须是“AUC_ROC”(接收者操作特征曲线下面积)和“AUC_PR”(来自分数的平均精度)之一。默认值:“AUC_ROC”。

返回类型

Union[float, Sequence[float], Sequence[Sequence[float]]]

返回值

  • float – 单变量 series 时序(只有一个组件/列)的单个分数/指标。

  • Sequence[float] – 以下情况的分数序列(列表):

    • 多变量 series 时序(多个组件)。为每个组件提供一个分数。

    • 单变量 series 时序序列(列表)。为每个时序提供一个分数。

  • Sequence[Sequence[float]] – 多变量 series 时序序列的分数序列的序列。外层序列对应于时序,内层序列对应于时序的组件/列。

eval_metric_from_prediction(anomalies, series, pred_series, metric='AUC_ROC')

计算 seriespred_series 之间的异常分数,并返回一个与阈值无关的指标分数。

参数
  • anomalies (Union[TimeSeries, Sequence[TimeSeries]]]) – (时序序列的) 真值二元异常时序(如果是异常则为 1,否则为 0)。

  • series (Union[TimeSeries, Sequence[TimeSeries]]]) – (时序序列的) 实际时序。

  • pred_series (Union[TimeSeries, Sequence[TimeSeries]]]) – (时序序列的) 预测时序。

  • metric (Literal[‘AUC_ROC’, ‘AUC_PR’]) – 要使用的指标函数名称。必须是“AUC_ROC”(接收者操作特征曲线下面积)和“AUC_PR”(来自分数的平均精度)之一。默认值:“AUC_ROC”。

返回类型

Union[float, Sequence[float], Sequence[Sequence[float]]]

返回值

  • float – 单个单变量 series 的单个指标值。

  • Sequence[float] – 以下情况的指标值序列:

    • 单个多变量 series

    • 单变量 series 的序列。

  • Sequence[Sequence[float]] – 多变量 series 序列的指标值序列的序列。外层序列对应于时序,内层序列对应于时序的组件/列。

fit(series)

在给定时间序列上拟合评分器。

如果是时序序列,评分器将在序列的连接上进行拟合。

假定 series 通常没有异常。

参数

series (Union[TimeSeries, Sequence[TimeSeries]]]) – 没有异常的(时序序列)。

返回值

已拟合的评分器。

返回类型

self

fit_from_prediction(series, pred_series)

在两个(时序序列)上拟合评分器。

作为参数传递给评分器的函数 diff_fn 将把 pred_seriesseries 转换为一个时序。默认情况下,diff_fn 将计算绝对差(默认:ae())。如果 pred_seriesseries 是序列,diff_fn 将应用于序列的所有成对元素。

然后,评分器将在这个(时序序列)上进行拟合。如果给定了时序序列,评分器将在序列的连接上进行拟合。

评分器假定(时序序列)没有异常。

如果任何时序是随机的(n_samples>1),则 diff_fn 将在分位数 0.5 上计算。

参数
返回值

已拟合的评分器。

返回类型

self

property is_probabilistic: bool

指示评分器是否期望将概率预测作为第一个输入。

返回类型

bool

property is_trainable: bool

指示评分器是否可训练。

返回类型

bool

property is_univariate: bool

指示评分器是否是单变量评分器。

返回类型

bool

score(series)

计算给定序列的异常分数。

如果给定时序序列,评分器将独立计算每个时序的分数,并返回序列中每个时序的异常分数。

参数

series (Union[TimeSeries, Sequence[TimeSeries]]]) – 用于检测异常的(时序序列)。

返回值

异常分数时序(序列)

返回类型

Union[TimeSeries, Sequence[TimeSeries]]

score_from_prediction(series, pred_series)

计算两个(时序序列)的异常分数。

作为参数传递给评分器的函数 diff_fn 将把 pred_seriesseries 转换为一个“差异”时序。默认情况下,diff_fn 将计算绝对差(默认:ae())。如果 series 和 pred_series 是序列,diff_fn 将应用于序列的所有成对元素。

然后,评分器将把这个时序转换为异常分数。如果给定时序序列,评分器将独立计算每个时序的分数,并返回序列中每个时序的异常分数。

参数
返回值

异常分数时序(序列)

返回类型

Union[TimeSeries, Sequence[TimeSeries]]

show_anomalies(series, anomalies=None, scorer_name=None, title=None, metric=None, component_wise=False)

绘制评分器的结果。

计算给定时序输入的得分。并绘制结果。

图表将包含以下内容
  • 时序本身。

  • 该得分器的异常分数。

  • 实际异常(如果提供)。

可以进行以下操作
  • 使用参数 title 为图表添加标题

  • 使用 scorer_name 为评分器提供个性化名称

  • 显示异常分数的指标结果(AUC_ROC 或 AUC_PR),

如果提供了实际异常。

参数
  • series (TimeSeries) – 要可视化异常的时序。

  • anomalies (Optional[TimeSeries, None]]]) – (时序序列的) 真值二元异常时序(如果是异常则为 1,否则为 0)。

  • scorer_name (Optional[str, None]]]) – 评分器的名称。

  • title (Optional[str, None]]]) – 图表标题

  • metric (Optional[Literal[‘AUC_ROC’, ‘AUC_PR’], None]]]) – (可选)要使用的指标函数名称。必须是“AUC_ROC”(接收者操作特征曲线下面积)和“AUC_PR”(来自分数的平均精度)之一。默认值:“AUC_ROC”。

  • component_wise (bool) – 如果为 True,将在多变量异常检测情况下单独绘制每个组件。

show_anomalies_from_prediction(series, pred_series, scorer_name=None, anomalies=None, title=None, metric=None, component_wise=False)

绘制评分器的结果。

计算两个时序的异常分数。并绘制结果。

图表将包含以下内容
  • series 和 pred_series。

  • 该评分器的异常分数。

  • 实际异常(如果提供)。

可以进行以下操作
  • 使用参数 title 为图表添加标题

  • 使用 scorer_name 为评分器提供个性化名称

  • 显示异常分数的指标结果(AUC_ROC 或 AUC_PR),如果提供了实际异常。

参数
  • series (TimeSeries) – 用于可视化异常的实际时序。

  • pred_series (TimeSeries) – series 的预测时序。

  • anomalies (Optional[TimeSeries, None]]]) – 异常的真值(如果是异常则为 1,否则为 0)

  • scorer_name (Optional[str, None]]]) – 评分器的名称。

  • title (Optional[str, None]]]) – 图表标题

  • metric (Optional[Literal[‘AUC_ROC’, ‘AUC_PR’], None]]]) – (可选)要使用的指标函数名称。必须是“AUC_ROC”(接收者操作特征曲线下面积)和“AUC_PR”(来自分数的平均精度)之一。默认值:“AUC_ROC”。

  • component_wise (bool) – 如果为 True,将在多变量异常检测情况下单独绘制每个组件。