Wasserstein 评分器

Wasserstein 评分器(定义在概率分布之间的距离函数) [1]。该实现封装了 scipy.stats

参考文献

1

https://en.wikipedia.org/wiki/Wasserstein_metric

class darts.ad.scorers.wasserstein_scorer.WassersteinScorer(window=10, component_wise=False, window_agg=True, diff_fn=<function ae>)[source]

基类: WindowedAnomalyScorer

Wasserstein 评分器

调用 fit(series) 时,会应用一个移动窗口,得到一组大小为 W 的向量,其中 W 是窗口大小。这些向量保存在内存中,代表训练分布。score(series) 函数将应用相同的移动窗口。Wasserstein 距离在训练分布和每个向量之间计算,从而得到异常分数。

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

component_wise 是一个布尔参数,指示模型如何处理多元输入序列。如果设置为 True,模型将独立处理每个序列维度。如果设置为 False,模型将连接每个长度为 W 的窗口中的维度,并计算所有维度的单个分数。

使用 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 沿样本轴连接。

数组将保存在内存中,代表训练数据分布。实际上,序列或序列列表可以表示可以视为独立同分布 (iid) 的残差。

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

使用 score() 计算分数

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

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

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

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

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

在序列上以步长 1 滚动一个大小为 W 的窗口。该窗口大小 W 与训练阶段使用的窗口大小相同。因此,得分序列中的每个值表示前 W 个值的样本的异常程度。

参数
  • window (int) – 滑动窗口的大小,表示在 Wasserstein 函数中用于与训练分布进行比较的测试分布中的样本数量

  • 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)

绘制评分器的结果。

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

绘制结果将包含以下内容
  • 序列和 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,将在多元异常检测情况下单独绘制每个分量。