使用 TimeGPT 提高预测准确性
在本 notebook 中,我们将演示如何使用 TimeGPT 进行预测,并探索三种提高预测准确性的常见策略。我们使用德国的小时电价数据作为示例数据集。在运行 notebook 之前,请在下面的代码片段中,使用您的 api_key 初始化 NixtlaClient 对象。
结果摘要
步骤 | 描述 | MAE | MAE 改进 (%) | RMSE | RMSE 改进 (%) |
---|---|---|---|---|---|
0 | 零样本 TimeGPT | 18.5 | N/A | 20.0 | N/A |
1 | 增加微调步数 | 11.5 | 38% | 12.6 | 37% |
2 | 调整微调损失函数 | 9.6 | 48% | 11.0 | 45% |
3 | 微调更多参数 | 9.0 | 51% | 11.3 | 44% |
4 | 添加外生变量 | 4.6 | 75% | 6.4 | 68% |
5 | 切换到长周期模型 | 6.4 | 65% | 7.7 | 62% |
首先,我们安装并导入所需的包,初始化 Nixtla 客户端,并创建一个用于计算评估指标的函数。
1. 加载数据集
在本 notebook 中,我们使用小时电价作为示例数据集,该数据集包含 5 个时间序列,每个时间序列约有 1700 个数据点。为了演示目的,我们重点关注德国的电价系列。时间序列被分割,最后 48 步(2 天)留作测试集。
2. 使用 TimeGPT 进行基准预测
我们使用 TimeGPT 为时间序列生成零样本预测。如图中所示,TimeGPT 很好地捕捉了总体趋势,但在建模实际数据中存在的短期波动和周期性模式方面有所不足。在测试期间,模型实现了平均绝对误差 (MAE) 18.5 和均方根误差 (RMSE) 20。此预测作为进一步比较和优化的基准。
unique_id | metric | TimeGPT | |
---|---|---|---|
0 | DE | mae | 18.519004 |
1 | DE | rmse | 20.037751 |
3. 提高预测准确性的方法
3a. 增加微调步数
提高预测准确性的第一种方法是增加微调步数。微调过程会调整 TimeGPT 模型中的权重,使其更好地拟合您的自定义数据。这种调整使 TimeGPT 能够更有效地学习时间序列的细微之处,从而获得更准确的预测。通过 30 个微调步数,我们观察到 MAE 降至 11.5,RMSE 降至 12.6。
unique_id | metric | TimeGPT | |
---|---|---|---|
0 | DE | mae | 11.458185 |
1 | DE | rmse | 12.642999 |
3b. 使用不同的损失函数进行微调
进一步降低预测误差的第二种方法是调整微调期间使用的损失函数。您可以使用 finetune_loss
参数指定自定义损失函数。通过修改损失函数,我们观察到 MAE 降至 9.6,RMSE 降至 11.0。
unique_id | metric | TimeGPT | |
---|---|---|---|
0 | DE | mae | 9.640649 |
1 | DE | rmse | 10.956003 |
3c. 调整微调的参数数量
使用 finetune_depth
参数,我们可以控制微调的参数数量。默认情况下,finetune_depth=1
,这意味着很少参数被微调。我们可以将其设置为 1 到 5 之间的任何值,其中 5 表示我们微调模型的所有参数。
unique_id | metric | TimeGPT | |
---|---|---|---|
0 | DE | mae | 9.002193 |
1 | DE | rmse | 11.348207 |
3d. 使用外生变量进行预测
外生变量是外部因素或预测因子,它们不是目标时间序列的一部分,但可以影响其行为。纳入这些变量可以为模型提供额外的上下文,提高其理解数据中复杂关系和模式的能力。
要在 TimeGPT 中使用外生变量,请将输入时间序列中的每个点与相应的外部数据配对。如果在预测期间这些变量的未来值可用,请使用 X_df 参数包含它们。否则,您可以省略此参数,仅使用历史值也能看到改进。在下面的示例中,我们纳入了 8 个历史外生变量及其在测试期间的值,这将 MAE 和 RMSE 分别降低到 4.6 和 6.4。
unique_id | ds | y | Exogenous1 | Exogenous2 | day_0 | day_1 | day_2 | day_3 | day_4 | day_5 | day_6 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1680 | DE | 2017-10-22 00:00:00 | 19.10 | 16972.75 | 15778.92975 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 |
1681 | DE | 2017-10-22 01:00:00 | 19.03 | 16254.50 | 16664.20950 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 |
1682 | DE | 2017-10-22 02:00:00 | 16.90 | 15940.25 | 17728.74950 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 |
1683 | DE | 2017-10-22 03:00:00 | 12.98 | 15959.50 | 18578.13850 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 |
1684 | DE | 2017-10-22 04:00:00 | 9.24 | 16071.50 | 19389.16750 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 |
unique_id | ds | Exogenous1 | Exogenous2 | day_0 | day_1 | day_2 | day_3 | day_4 | day_5 | day_6 | |
---|---|---|---|---|---|---|---|---|---|---|---|
3312 | DE | 2017-12-29 00:00:00 | 17347.00 | 24577.92650 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 |
3313 | DE | 2017-12-29 01:00:00 | 16587.25 | 24554.31950 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 |
3314 | DE | 2017-12-29 02:00:00 | 16396.00 | 24651.45475 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 |
3315 | DE | 2017-12-29 03:00:00 | 16481.25 | 24666.04300 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 |
3316 | DE | 2017-12-29 04:00:00 | 16827.75 | 24403.33350 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 |
unique_id | metric | TimeGPT | |
---|---|---|---|
0 | DE | mae | 4.602594 |
1 | DE | rmse | 6.358831 |
3d. TimeGPT 用于长周期预测
当预测周期过长时,预测结果可能不够准确。TimeGPT 在预测周期短于时间序列完整周期的情况下表现最佳。对于较长的预测周期,切换到 timegpt-1-long-horizon 模型可以产生更好的结果。您可以使用 model 参数指定此模型。
在此处使用的电价时间序列中,一个周期是 24 步(代表一天)。由于我们正在预测未来两天(48 步),使用 timegpt-1-long-horizon 显著提高了预测准确性,将 MAE 降低到 6.4,RMSE 降低到 7.7。
unique_id | metric | TimeGPT | |
---|---|---|---|
0 | DE | mae | 6.365540 |
1 | DE | rmse | 7.738188 |
4. 结论和下一步
在本 notebook 中,我们演示了四种提高 TimeGPT 预测准确性的有效策略
- 增加微调步数。
- 调整微调损失函数。
- 纳入外生变量。
- 对于扩展预测周期,切换到长周期模型。
我们鼓励您尝试调整这些超参数,以确定最适合您特定需求的最佳设置。此外,请参阅我们的文档以了解更多功能,例如模型可解释性等。
在提供的示例中,应用这些方法后,我们观察到预测准确性指标有了显著改进,总结如下。
结果摘要
步骤 | 描述 | MAE | MAE 改进 (%) | RMSE | RMSE 改进 (%) |
---|---|---|---|---|---|
0 | 零样本 TimeGPT | 18.5 | N/A | 20.0 | N/A |
1 | 增加微调步数 | 11.5 | 38% | 12.6 | 37% |
2 | 调整微调损失函数 | 9.6 | 48% | 11.0 | 45% |
3 | 微调更多参数 | 9.0 | 51% | 11.3 | 44% |
4 | 添加外生变量 | 4.6 | 75% | 6.4 | 68% |
5 | 切换到长周期模型 | 6.4 | 65% | 7.7 | 62% |