预测异常模型¶
一个 ForecastingAnomalyModel 封装了 Darts 预测模型和一个或多个异常评分器,通过比较实际值与模型预测值的偏差来计算异常得分。
- 类 darts.ad.anomaly_model.forecasting_am.ForecastingAnomalyModel(model, scorer)[source]¶
基类:
AnomalyModel
基于预测的异常检测模型
预测模型必须是 GlobalForecastingModel 的实例,它可以已经拟合或尚未拟合。基本假设是,在没有异常的情况下,model 应该能够准确预测序列。因此,建议提供一个已经拟合并评估过的模型,使其能够在没有异常的序列上正常工作;或者确保简单调用模型的
fit()
方法足以在没有异常的序列上将其训练到令人满意的性能。调用score()
时,将使用预训练的模型生成预测。只有在调用 fit() 时将 allow_model_training 设置为 True,对异常模型调用
fit()
才会拟合底层的预测模型。此外,调用fit()
也将拟合所有可拟合的评分器(如果有的话)。- 参数
model (
GlobalForecastingModel
) – Darts 预测模型的一个实例。scorer (
Union
[AnomalyScorer
,Sequence
[AnomalyScorer
]]) – 一个或多个评分器,用于比较实际时间序列和预测时间序列以获得异常得分 TimeSeries。如果给定 N 个评分器的列表,异常模型将调用每个评分器并输出 N 个异常得分 TimeSeries 的列表。
属性
任何评分器是否可训练。
任何评分器是否为单变量。
方法
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')[source]¶
计算模型计算出的异常得分的准确性。
使用预测模型预测 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
,None
]) – 计算未来时间点第一个预测值的时间点。此参数支持 3 种不同的数据类型:float、int 和 pandas.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
) – 是否显示与过去预测优化或参数 start 和 train_length 相关的警告。enable_optimization (
bool
) – 是否在支持和可用时使用优化版本的 historical_forecasts。默认值:True
。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)[source]¶
拟合底层的预测模型(如果适用)以及所有可拟合的评分器(如果有的话)。
在给定时间序列上训练预测模型(如果尚未拟合且 allow_model_training 为 True)和可拟合的评分器(如果有的话)。
我们使用训练好的预测模型来计算输入 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
,None
]) – 计算未来时间点第一个预测值的时间点。此参数支持 3 种不同的数据类型:float、int 和 pandas.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
) – 是否显示与过去预测优化或参数 start 和 train_length 相关的警告。enable_optimization (
bool
) – 是否在支持和可用时使用优化版本的 historical_forecasts。默认值:True
。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)[source]¶
计算底层预测模型在 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
,None
]) – 计算未来时间点第一个预测值的时间点。此参数支持 3 种不同的数据类型:float、int 和 pandas.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
) – 是否显示与过去预测优化或参数 start 和 train_length 相关的警告。enable_optimization (
bool
) – 是否在支持和可用时使用优化版本的 historical_forecasts。默认值:True
。
- 返回值
包含每个序列历史预测的 TimeSeries 序列(使用 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)[source]¶
计算给定序列的异常得分。
使用预测模型预测给定的目标时间序列,并将评分器应用于预测值和目标输入时间序列。
- 参数
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
,None
]) – 计算未来时间点第一个预测值的时间点。此参数支持 3 种不同的数据类型:float、int 和 pandas.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
) – 是否显示与过去预测优化或参数 start 和 train_length 相关的警告。enable_optimization (
bool
) – 是否在支持和可用时使用优化版本的 historical_forecasts。默认值:True
。return_model_prediction (
bool
) – 是否在返回异常得分的同时返回预测模型的预测值。
- 返回类型
Union
[TimeSeries
,Sequence
[TimeSeries
],Sequence
[Sequence
[TimeSeries
]]]- 返回值
TimeSeries – 单个 series 使用单个异常评分器时返回的单个 TimeSeries。
Sequence[TimeSeries] – 一个包含 TimeSeries 的序列,用于
单个 series 使用多个异常评分器。
序列集合使用单个异常评分器。
Sequence[Sequence[TimeSeries]] – 针对 series 序列集合和多个异常评分器返回的 TimeSeries 序列的序列。外部序列对应系列,内部序列对应评分器。
- 属性 scorers_are_trainable¶
任何评分器是否可训练。
- 属性 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, component_wise=False, **score_kwargs)[source]¶
绘制异常模型的结果。
计算给定序列输入的得分,并按时间显示不同的异常得分。
图形将包含以下内容
序列本身以及预测模型的输出。
每个评分器的异常得分。具有不同窗口的评分器将分开显示。
实际异常(如果提供)。
可以
使用参数 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
,None
]) – 计算未来时间点第一个预测值的时间点。此参数支持 3 种不同的数据类型:float、int 和 pandas.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
) – 是否显示与过去预测优化或参数 start 和 train_length 相关的警告。enable_optimization (
bool
) – 是否在支持和可用时使用优化版本的 historical_forecasts。默认值:True
。anomalies (
Optional
[TimeSeries
,None
]) – 异常的地面真相(1 表示异常,0 表示非异常)。names_of_scorers (
Union
[str
,Sequence
[str
],None
]) – 得分的名称。必须是一个列表,其长度等于 anomaly_model 中的评分器数量。title (
Optional
[str
,None
]) – 图形的标题。metric (
Optional
[Literal
[‘AUC_ROC’, ‘AUC_PR’],None
]) – 可选,要使用的度量函数的名称。必须是 “AUC_ROC”(接收者操作特征曲线下面积)和 “AUC_PR”(基于得分的平均精度)之一。默认值:“AUC_ROC”。component_wise (
bool
) – 如果为 True,将在多变量异常检测的情况下单独绘制每个分量。score_kwargs – score() 方法的参数。