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>)[源代码]

基类: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)/W 个子序列。如果给定长度为 L 的一系列序列,每个序列将被分割成子序列,结果将被连接成一个长度为 L * 每个序列的子序列数的数组。

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

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

使用 score() 计算分数

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

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

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

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

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

一个大小为 W 的窗口以步长为 1 在序列上滚动。它与训练阶段使用的窗口大小 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

Scorer 是否为单变量评分器。

方法

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 序列。为每个序列提供一个分数。

  • Sequence[Sequence[float]] – 一个多元 序列 序列的分数序列。为每个序列(外部序列)和组件(内部序列)提供一个分数。

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 – 单个单变量 序列 的单个度量值。

  • Sequence[float] – 一个包含以下指标值的序列:

    • 一个多变量的 序列

    • 一系列单变量 序列

  • Sequence[Sequence[float]] – 一个序列的序列,表示多变量 序列 的度量值。外层序列遍历序列,内层序列遍历序列的组件/列。

fit(series)

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

如果是一系列序列,评分器将基于序列的连接进行拟合。

假设 series 通常是无异常的。

参数

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

返回

Fitted Scorer.

返回类型

self

fit_from_prediction(series, pred_series)

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

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

评分器将在此(序列)系列上进行拟合。如果给定的是一个系列序列,评分器将在序列的连接上进行拟合。

评分器假设(序列的)序列是无异常的。

如果系列中的任何一个具有随机性(n_samples>1),则在分位数 0.5 上计算 diff_fn

参数
返回

Fitted Scorer.

返回类型

self

property is_probabilistic: bool

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

返回类型

bool

property is_trainable: bool

评分器是否可训练。

返回类型

bool

property is_univariate: bool

Scorer 是否为单变量评分器。

返回类型

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)

绘制评分器的结果。

计算给定序列输入的分数。并绘制结果。

图表将由以下部分组成:
  • 系列本身。

  • 异常分数的分数。

  • 实际的异常,如果有的话。

可以做到:
  • 使用 title 参数为图片添加标题

  • 使用 scorer_name 为评分器指定个性化名称

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

如果提供了实际的异常。

参数
  • series (TimeSeries) – 要从中可视化异常的系列。

  • anomalies (TimeSeries) – 地面真值二进制异常序列(1 表示异常,0 表示正常)。

  • scorer_name (str) – 评分者的名字。

  • title (str) – 图的标题

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

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

绘制评分器的结果。

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

图表将由以下部分组成:
  • 序列和预测序列。

  • 评分器的异常分数。

  • 实际的异常,如果有的话。

可以做到:
  • 使用 title 参数为图片添加标题

  • 使用 scorer_name 为评分器指定个性化名称

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

参数
  • series (TimeSeries) – 要从中可视化异常的实际序列。

  • pred_series (TimeSeries) – 预测的 series 系列。

  • anomalies (TimeSeries) – 异常的地面真实值(如果是异常则为1,否则为0)

  • scorer_name (str) – 评分者的名字。

  • title (str) – 图的标题

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