预测异常模型

ForecastingAnomalyModel 围绕一个 Darts 预测模型和一个或多个异常评分器来计算异常分数,通过比较实际值与模型预测值的偏差。

class darts.ad.anomaly_model.forecasting_am.ForecastingAnomalyModel(model, scorer)[源代码]

基类:AnomalyModel

基于预测的异常检测模型

预测模型必须是一个 GlobalForecastingModel,它可能已经拟合,也可能尚未拟合。基本假设是 model 应该能够在没有异常的情况下准确预测序列。因此,建议提供一个已经拟合并评估为在没有异常的序列上工作良好的模型,或者确保对模型的 fit() 方法的简单调用足以在没有异常的序列上训练到令人满意的性能。预训练的模型将在调用 score() 时用于生成预测。

在异常模型上调用 fit() 将仅在调用 fit()allow_model_training 设置为 True 的情况下拟合底层预测模型。此外,调用 fit() 还将拟合任何可拟合的评分器。

参数
  • model (GlobalForecastingModel) – Darts 预测模型的一个实例。

  • scorer (Union[AnomalyScorer, Sequence[AnomalyScorer]]) – 一个或多个评分器将被用来比较实际和预测的时间序列,以获得异常分数 TimeSeries。如果给定了一个包含 N 个评分器的列表,异常模型将调用每个评分器并输出一个包含 N 个异常分数 TimeSeries 的列表。

属性

scorers_are_trainable

评分器是否可训练。

scorers_are_univariate

评分器是否可训练。

方法

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

计算模型计算的异常分数的准确性。

fit(series[, past_covariates, ...])

拟合底层预测模型(如果适用)以及任何可拟合的评分器。

predict_series(series[, past_covariates, ...])

计算在 series 上底层预测模型将获得的历史预测。

score(series[, past_covariates, ...])

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

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

绘制异常模型的结果。

eval_metric(anomalies, series, past_covariates=None, future_covariates=None, forecast_horizon=1, start=None, start_format='value', num_samples=1, verbose=False, show_warnings=True, enable_optimization=True, metric='AUC_ROC')[源代码]

计算模型计算的异常分数的准确性。

使用预测模型预测 series,并在预测的时间序列和给定的目标时间序列上应用评分器。返回基于评分器给出的异常分数的无阈值度量分数。

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

  • series (Union[TimeSeries, Sequence[TimeSeries]]) – 要预测异常的(序列)系列。

  • past_covariates (Union[TimeSeries, Sequence[TimeSeries], None]) – 可选地,一个(序列的)过去观测到的协变量序列或序列的序列。这仅适用于支持过去协变量的模型。

  • future_covariates (Union[TimeSeries, Sequence[TimeSeries], None]) – 可选地,一个(序列的)未来已知协变量序列或序列的序列。这仅适用于支持未来协变量的模型。

  • forecast_horizon (int) – 预测的预测范围。

  • start (Union[Timestamp, float, int]) – 计算未来时间预测的第一个时间点。此参数支持三种不同的数据类型:floatintpandas.Timestamp。如果是 float,该参数将被视为时间序列中应位于第一个预测点之前的比例。如果是 int,该参数将被视为 series 时间索引的整数索引,将用作第一个预测时间。如果是 pandas.Timestamp,此时间戳将直接用于确定第一个预测时间。

  • start_format (Literal[‘position’, ‘value’]) – 定义 start 格式。仅在 start 为整数且 series 使用 pd.RangeIndex 索引时有效。如果设置为 ‘position’,start 对应于第一个预测点的索引位置,范围可以从 (-len(series), len(series) - 1)。如果设置为 ‘value’,start 对应于第一个预测点的索引值/标签。如果值不在 series 的索引中,将引发错误。默认值:’value’

  • num_samples (int) – 从概率模型中采样预测的次数。对于确定性模型,应保持设置为1。

  • verbose (bool) – 是否打印进度。

  • show_warnings (bool) – 是否显示与历史预测优化相关的警告,或参数 starttrain_length

  • enable_optimization (bool) – 是否在使用历史预测时使用优化版本(当支持并可用时)。

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

返回类型

Union[Dict[str, float], Dict[str, Sequence[float]], Sequence[Dict[str, float]], Sequence[Dict[str, Sequence[float]]]]

返回

  • Dict[str, float] – 一个包含单变量 series 结果指标的字典,键表示异常评分器,值表示指标值。

  • Dict[str, Sequence[float]] – 与 Dict[str, float] 相同,但适用于多元 series,以及那些根据评分器的性质或如果 component_wise=True 而独立处理序列组件/列的异常评分器。

  • Sequence[Dict[str, float]] – 与 Dict[str, float] 相同,但适用于一系列单变量序列。

  • Sequence[Dict[str, Sequence[float]]] – 与 Dict[str, float] 相同,但适用于多元序列的序列。

fit(series, past_covariates=None, future_covariates=None, allow_model_training=False, forecast_horizon=1, start=None, start_format='value', num_samples=1, verbose=False, show_warnings=True, enable_optimization=True, **model_fit_kwargs)[源代码]

拟合底层预测模型(如果适用)以及任何可拟合的评分器。

训练预测模型(如果尚未拟合并且 allow_model_trainingTrue)以及可拟合的评分器(们)在给定的时间序列上。

我们使用训练好的预测模型来计算输入 series 的历史预测。然后,评分器(们)在这些预测和输入 series 上进行训练。

参数
  • series (Union[TimeSeries, Sequence[TimeSeries]]) – 要训练的(序列)系列(通常假设是无异常的)。

  • past_covariates (Union[TimeSeries, Sequence[TimeSeries], None]) – 可选地,一个(序列的)过去观测到的协变量序列或序列的序列。这仅适用于支持过去协变量的模型。

  • future_covariates (Union[TimeSeries, Sequence[TimeSeries], None]) – 可选地,一个(序列的)未来已知协变量序列或序列的序列。这仅适用于支持未来协变量的模型。

  • allow_model_training (bool) – 是否应在给定的序列上拟合预测模型。如果为 False,则模型必须已经拟合。

  • forecast_horizon (int) – 预测的预测范围。

  • start (Union[Timestamp, float, int]) – 计算未来时间预测的第一个时间点。此参数支持三种不同的数据类型:floatintpandas.Timestamp。如果是 float,该参数将被视为时间序列中应位于第一个预测点之前的比例。如果是 int,该参数将被视为 series 时间索引的整数索引,将用作第一个预测时间。如果是 pandas.Timestamp,此时间戳将直接用于确定第一个预测时间。

  • start_format (Literal[‘position’, ‘value’]) – 定义 start 格式。仅在 start 为整数且 series 使用 pd.RangeIndex 索引时有效。如果设置为 ‘position’,start 对应于第一个预测点的索引位置,范围可以从 (-len(series), len(series) - 1)。如果设置为 ‘value’,start 对应于第一个预测点的索引值/标签。如果值不在 series 的索引中,将引发错误。默认值:’value’

  • num_samples (int) – 从概率模型中采样预测的次数。对于确定性模型,应保持设置为1。

  • verbose (bool) – 是否打印进度。

  • show_warnings (bool) – 是否显示与历史预测优化相关的警告,或参数 starttrain_length

  • enable_optimization (bool) – 是否在使用历史预测时使用优化版本(当支持并可用时)。

  • model_fit_kwargs – 传递给预测模型 fit() 方法的参数。

返回

拟合模型

返回类型

self

predict_series(series, past_covariates=None, future_covariates=None, forecast_horizon=1, start=None, start_format='value', num_samples=1, verbose=False, show_warnings=True, enable_optimization=True)[源代码]

计算在 series 上底层预测模型将获得的历史预测。

retrain 如果可能的话设置为 False`(这并不被所有模型支持)。如果设置为 `True,它将总是在所有可用历史数据上重新训练模型。

参数
  • series (Sequence[TimeSeries]) – 要评分的系列序列。

  • past_covariates (Optional[Sequence[TimeSeries], None]) – 可选地,一系列过去观测到的协变量序列或序列的序列。这仅适用于支持过去协变量的模型。

  • future_covariates (Optional[Sequence[TimeSeries], None]) – 可选地,一系列未来已知协变量序列或序列的序列。这仅适用于支持未来协变量的模型。

  • forecast_horizon (int) – 预测的预测范围。

  • start (Union[Timestamp, float, int]) – 计算未来时间预测的第一个时间点。此参数支持三种不同的数据类型:floatintpandas.Timestamp。如果是 float,该参数将被视为时间序列中应位于第一个预测点之前的比例。如果是 int,该参数将被视为 series 时间索引的整数索引,将用作第一个预测时间。如果是 pandas.Timestamp,此时间戳将直接用于确定第一个预测时间。

  • start_format (Literal[‘position’, ‘value’]) – 定义 start 格式。仅在 start 为整数且 series 使用 pd.RangeIndex 索引时有效。如果设置为 ‘position’,start 对应于第一个预测点的索引位置,范围可以从 (-len(series), len(series) - 1)。如果设置为 ‘value’,start 对应于第一个预测点的索引值/标签。如果值不在 series 的索引中,将引发错误。默认值:’value’

  • num_samples (int) – 从概率模型中采样预测的次数。对于确定性模型,应保持设置为1。

  • verbose (bool) – 是否打印进度。

  • show_warnings (bool) – 是否显示与历史预测优化相关的警告,或参数 starttrain_length

  • enable_optimization (bool) – 是否在使用历史预测时使用优化版本(当支持并可用时)。

返回

每个序列的历史预测序列(last_points_only=True)。

返回类型

Sequence[TimeSeries]

score(series, past_covariates=None, future_covariates=None, forecast_horizon=1, start=None, start_format='value', num_samples=1, verbose=False, show_warnings=True, enable_optimization=True, return_model_prediction=False)[源代码]

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

使用预测模型预测给定的目标时间序列,并在预测结果和目标输入时间序列上应用评分器。

参数
  • series (Union[TimeSeries, Sequence[TimeSeries]]) – 要评分的(序列)系列。

  • past_covariates (Union[TimeSeries, Sequence[TimeSeries], None]) – 可选地,一个(序列的)过去观测到的协变量序列或序列的序列。这仅适用于支持过去协变量的模型。

  • future_covariates (Union[TimeSeries, Sequence[TimeSeries], None]) – 可选地,一个(序列的)未来已知协变量序列或序列的序列。这仅适用于支持未来协变量的模型。

  • forecast_horizon (int) – 预测的预测范围。

  • start (Union[Timestamp, float, int]) – 计算未来时间预测的第一个时间点。此参数支持三种不同的数据类型:floatintpandas.Timestamp。如果是 float,该参数将被视为时间序列中应位于第一个预测点之前的比例。如果是 int,该参数将被视为 series 时间索引的整数索引,将用作第一个预测时间。如果是 pandas.Timestamp,此时间戳将直接用于确定第一个预测时间。

  • start_format (Literal[‘position’, ‘value’]) – 定义 start 格式。仅在 start 为整数且 series 使用 pd.RangeIndex 索引时有效。如果设置为 ‘position’,start 对应于第一个预测点的索引位置,范围可以从 (-len(series), len(series) - 1)。如果设置为 ‘value’,start 对应于第一个预测点的索引值/标签。如果值不在 series 的索引中,将引发错误。默认值:’value’

  • num_samples (int) – 从概率模型中采样预测的次数。对于确定性模型,应保持设置为1。

  • verbose (bool) – 是否打印进度。

  • show_warnings (bool) – 是否显示与历史预测优化相关的警告,或参数 starttrain_length

  • enable_optimization (bool) – 是否在使用历史预测时使用优化版本(当支持并可用时)。

  • return_model_prediction (bool) – 是否返回预测模型预测结果以及异常分数。

返回类型

Union[TimeSeries, Sequence[TimeSeries], Sequence[Sequence[TimeSeries]]]

返回

  • 时间序列 – 单个 时间序列 对应单个 序列 并带有单个异常评分器。

  • Sequence[TimeSeries] – 一个 TimeSeries 序列,用于:

    • 一个包含多个异常评分器的单一 series

    • 一个包含单个异常评分器的 series 序列。

  • Sequence[Sequence[TimeSeries]] – 一个 TimeSeries 序列的序列,用于一个 series 序列和多个异常评分器。外层序列是针对 series,内层序列是针对评分器。

property scorers_are_trainable

评分器是否可训练。

property scorers_are_univariate

评分器是否可训练。

show_anomalies(series, past_covariates=None, future_covariates=None, forecast_horizon=1, start=None, start_format='value', num_samples=1, verbose=False, show_warnings=True, enable_optimization=True, anomalies=None, names_of_scorers=None, title=None, metric=None, **score_kwargs)[源代码]

绘制异常模型的结果。

计算给定序列输入的分数,并显示相对于时间的不同异常分数。

图表将由以下部分组成:

  • 将系列本身与预测模型的输出进行比较。

  • 每个评分者的异常分数。具有不同窗口的评分者将被分开。

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

可以做到:

  • 使用 title 参数为图片添加标题

  • 使用 names_of_scorers 为评分者提供个性化名称

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

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

  • past_covariates (Optional[TimeSeries, None]) – 可选地,一个过去观测的协变量序列或一系列序列。这仅适用于支持过去协变量的模型。

  • future_covariates (Optional[TimeSeries, None]) – 可选地,一个已知的未来协变量序列或一系列序列。这仅适用于支持未来协变量的模型。

  • forecast_horizon (int) – 预测的预测范围。

  • start (Union[Timestamp, float, int]) – 计算未来时间预测的第一个时间点。此参数支持三种不同的数据类型:floatintpandas.Timestamp。如果是 float,该参数将被视为时间序列中应位于第一个预测点之前的比例。如果是 int,该参数将被视为 series 时间索引的整数索引,将用作第一个预测时间。如果是 pandas.Timestamp,此时间戳将直接用于确定第一个预测时间。

  • start_format (Literal[‘position’, ‘value’]) – 定义 start 格式。仅在 start 为整数且 series 使用 pd.RangeIndex 索引时有效。如果设置为 ‘position’,start 对应于第一个预测点的索引位置,范围可以从 (-len(series), len(series) - 1)。如果设置为 ‘value’,start 对应于第一个预测点的索引值/标签。如果值不在 series 的索引中,将引发错误。默认值:’value’

  • num_samples (int) – 从概率模型中采样预测的次数。对于确定性模型,应保持设置为1。

  • verbose (bool) – 是否打印进度。

  • show_warnings (bool) – 是否显示与历史预测优化相关的警告,或参数 starttrain_length

  • enable_optimization (bool) – 是否在使用历史预测时使用优化版本(当支持并可用时)。

  • anomalies (TimeSeries) – 异常的真实情况(如果是异常则为1,否则为0)。

  • names_of_scorers (Union[str, Sequence[str]]) – 分数的名称。必须是一个与异常模型中评分器数量相等长度的列表。

  • title (str) – 图的标题。

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

  • score_kwargsscore() 方法的参数。