概率预测
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
)