如何使用GluonTS DeepAR预测时间序列未知未来目标值?
GluonTS DeepAR 3个月未来值预测实现方法
核心问题说明
你之前得到12个预测值是因为模型初始化时prediction_length参数设置为12,该参数代表模型要预测的未来周期数,和输出的预测值数量完全对应。
预测值的时间对应逻辑为:默认从传入预测接口的数据集最后一个时间点的下一个同频率周期开始,按时间正序排列。你的训练数据截止到2021-10-01,频率为月度,因此12个输出依次对应2021-11-01到2022-10-01的预测值。
正确实现步骤
步骤1:调整模型参数
如果仅需要预测3个月的值,直接将prediction_length设置为3即可,无需额外截取结果。
步骤2:构造预测数据集
要预测完全未知的未来值,不需要拆分测试集,直接将全部已知的1995-01-01至2021-10-01的全量数据传入预测接口即可。参考示例中的测试集仅用于模型效果验证,生产预测场景不需要保留。
步骤3:完整代码示例
import pandas as pd import numpy as np import mxnet as mx from gluonts.dataset.common import ListDataset from gluonts.model.deepar import DeepAREstimator from gluonts.mx import Trainer # 固定随机种子保证结果可复现 np.random.seed(7) mx.random.seed(7) # 读取并整理你的数据,确保date列为datetime类型,target列为目标值,时间截止到2021-10-01 # df = pd.read_csv("你的数据路径.csv") # df['date'] = pd.to_datetime(df['date']) # df = df.sort_values('date').reset_index(drop=True) # 构造训练数据集 train_ds = ListDataset( data_iter=[{ "target": df['target'], # 全量已知目标值 "start": pd.Timestamp("1995-01-01", freq="M") # 序列起始时间 }], freq="M" ) # 初始化DeepAR模型,prediction_length设为3对应3个月预测 estimator = DeepAREstimator( prediction_length=3, context_length=120, freq="M", trainer=Trainer( epochs=5, learning_rate=1e-3, num_batches_per_epoch=50 ) ) # 训练模型 predictor = estimator.train(training_data=train_ds) # 执行预测 pred_raw = list(predictor.predict(train_ds))[0] # 取0.5分位数即中位数作为预测结果 pred_values = pred_raw.quantile(0.5) # 匹配预测日期 pred_dates = pd.date_range(start="2021-11-01", periods=3, freq="M") pred_result = pd.DataFrame({ "date": pred_dates, "prediction": pred_values }) print(pred_result)
现有结果快速匹配方案
如果你不需要重新训练模型,你之前得到的12个预测值的前3个就对应你需要的时间段:
- 第一个值163842.34 → 2021-11-01
- 第二个值152805.08 → 2021-12-01
- 第三个值161326.3 → 2022-01-01
内容的提问来源于stack exchange,提问作者Lucas Amaral
相关产品推荐
相关产品推荐

