概率预测

PaddleTS提供了专业的概率预测模块:

  • 高性能的概率预测模型

  • 似然函数

  • 特定的损失函数与评估指标

使用例子

我们用`DeepAR`模型来展示概率预测的基本使用。

from paddlets.datasets.tsdataset import TSDataset
from paddlets.models.forecasting import DeepARModel
from paddlets.metrics import MAE
from paddlets.metrics import MSE
from paddlets.metrics import QuantileLoss

1. 数据集加载与处理

使用内置的API: get_dataset 加载天气数据集: WTH。

ts = get_dataset("WTH")

通过特征工程,加入时间类特征。

time_f = TimeFeatureGenerator(["month", "weekday", "hour", "dayofyear", "weekofyear"])
ts = time_f.fit_transform(ts)

最后,对数据集做归一化。

scaler = StandardScaler()
scaler.fit(ts_train)
ts_train_scaled = scaler.transform(ts_train)
ts_val_scaled = scaler.transform(ts_val)
ts_test_scaled = scaler.transform(ts_test)

训练模型

与其它点预测模型不同的是,`DeepAR`模型有一些特定的参数,`regression_mode`参数可以选择`sampling`或`mean`方法来设定回归模式,另外,`output_mode`支持`quantiles`或`predictions`模式,分别代表概率预测标准的分位数结果以及普通的点预测结果。

deepar = DeepARModel(
     in_chunk_len = 7 * 24,
     out_chunk_len = 24,
     sampling_stride = 24,
     max_epochs=100,
     optimizer_params = dict(learning_rate=1e-3),
     batch_size = 32,
     patience=20,
     num_samples = 101,
     regression_mode="sampling",
     output_mode="quantiles"
 )
deepar.fit(ts_train_scaled, ts_val_scaled)

预测与评估

内置的API: `backtest`可用于预测与评估,最终返回的是分位数损失以及预测分位数。

from paddlets.utils import backtest
q_loss, quantiles = backtest(data=ts_test_scaled,
     model=deepar,
     start="2013-11-01 00:00:00",
     metric=QuantileLoss([0.1, 0.5, 0.9]),
     predict_window=24,
     stride=24,
     return_predicts=True
)

可视化

最新的API `plot`很好地适配了概率预测,通过设定`low_quantile`以及`high_quantile`可以得到点预测曲线与置信区间的展示图。

%matplotlib notebook
quantiles.plot(
     add_data= ts_test_scaled,
     low_quantile=0.05,
     high_quantile=0.95
 )
../../../_images/prob_demo.png