基础模型时代的预测

原文:towardsdatascience.com/forecasting-in-the-age-of-foundation-models-8cd4eea0079d

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5e77346960d302c863fe9cb81c943d7f.png

Ribadesella 附近的悬崖。照片由Enric DomasUnsplash提供

在 Hugging Face 上,截至写作时,有 20 个模型被标记为“时间序列”。虽然这当然不算多(“text-generation-inference”标签产生了 125,950 个结果),但使用基础模型进行时间序列预测已经足够有趣,以至于像亚马逊、IBM 和 Salesforce 这样的大型公司都开发了他们自己的模型:Chronos、TinyTimeMixer 和 Moirai。截至写作时,Hugging Face 上按点赞数最受欢迎的是Lag-Llama,这是一个单变量概率模型。由 Kashif Rasul、Arjun Ashok 及其合作者[1]开发,Lag-Llama 于 2024 年 2 月开源。该模型的作者声称它在不同领域的各种数据集上具有“强大的零样本泛化能力”。一旦针对特定任务进行微调,他们也声称它是该类最佳通用模型。大话连篇!

在这篇博客中,我展示了我的微调 Lag-Llama 的经验,并测试了其与更传统的机器学习方法的性能。特别是,我将它与一个旨在处理单变量时间序列数据的 XGBoost 模型进行了基准测试。XGBoost 等梯度提升算法通常被认为是“经典”机器学习(与深度学习相对)的典范,并且已被证明在表格数据上表现出色[2]。因此,使用 XGBoost 来测试 Lag-Llama 是否如其承诺般出色似乎是合适的。基础模型会做得更好吗?剧透一下:事情并没有那么简单。

顺便说一下,我不会深入探讨模型架构的细节,但这篇论文值得一读,同样,Marco Peixeiro 的这篇精彩的教程也值得一读。

数据

我在这个练习中使用的数据是西班牙阿斯图里亚斯地区 Ribadesella 镇海岸 4 年的每小时波浪高度系列。该系列可在西班牙港口管理局data portal找到。测量是在坐标(43.5, -5.083)的一个站点进行的,从 2020 年 6 月 18 日 00:00 到 2024 年 6 月 18 日 23:00 [3]。我决定将系列聚合到每日水平,取每天 24 次观测中的最大值。原因是,我们在这篇文章中讨论的概念从稍微不那么细粒度的角度来看,可以更好地说明。否则,结果会非常快速地变得非常波动。因此,我们的目标变量是每天记录的波浪最大高度,以米为单位。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f74e3907305a70e1cc23eca8fcde22e4.png

目标数据的分布。图由作者提供

我选择这个系列有几个原因:第一个原因是 Lag-Llama 模型是在一些与天气相关的数据上训练的,虽然相对较少。我预计模型会发现这种类型的数据稍微具有挑战性,但仍然可以管理。第二个原因是,虽然气象预报通常使用数值天气模型生成,但统计模型仍然可以补充这些预报,特别是在长期预测方面。至少在气候变化的时代,我认为统计模型可以告诉我们我们通常会期望什么,以及它与实际发生的情况有多大的偏差。

数据集相当标准,除了填充一些缺失值外,不需要进行太多预处理。下面的图表显示了我们将数据集分为训练集、验证集和测试集后的样子。最后两个集合的长度为 5 个月。想了解更多关于我们如何预处理数据的信息,请查看这个笔记本

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ad6a5ef0d392c35062f30f352c47976c.png

Ribadesella 每日最大波浪高度。图由作者提供

测试

我们将基准测试 Lag-Llama 与 XGBoost 在两个单变量预测任务上:点预测和概率预测。这两个任务相互补充:点预测给我们一个具体的单一数字预测,而概率预测则给我们一个围绕它的置信区域。可以说,Lag-Llama 只训练了后者,因此我们应该专注于那个。虽然这是真的,但我相信人类比置信区间更容易理解一个单一数字,所以我认为点预测仍然有用,即使只是为了说明目的。

在制作预测时,我们需要考虑许多因素。其中一些最重要的包括预测范围、我们提供给模型的最后观察值,或者我们更新模型(如果有的话)的频率。不同因素组合会产生各自类型的预测及其解释。在我们的案例中,我们将进行不更新模型的递归多步预测,步长为 7 天。这意味着我们将使用单个模型一次性生成 7 个预测批次。在生成一个批次后,模型将看到 7 个更多的数据点,对应于它刚刚预测的日期,并产生 7 个更多的预测。然而,当有新数据时,模型不会被重新训练。就我们的数据集而言,这意味着我们将为下周每一天的最大波高进行预测。

对于点预测,我们将使用平均绝对误差(MAE)作为性能指标。在概率预测的情况下,我们将追求 80%的经验覆盖或覆盖概率

场景已经设定。让我们动手进行实验吧!

定义 XGBoost 模型

虽然最初并不是为时间序列预测而设计的,但梯度提升算法总体上,尤其是 XGBoost,可以成为优秀的预测器。我们只需要以正确的格式向算法提供数据。例如,如果我们想使用目标序列的三个滞后值,我们可以在 pandas 数据框中简单地创建三个包含滞后值的列(比如说),然后 voilà!一个 XGBoost 预测器就诞生了。然而,这个过程可能会很快变得繁琐,尤其是如果我们打算使用许多滞后值。幸运的是,对于我们的情况,库Skforecast [4] 可以做到这一点。实际上,Skforecast 是开发测试各种预测器的唯一商店。我真心推荐它!

使用 Skforecast 创建预测器相当简单。我们只需要创建一个带有 XGBoost 回归器的ForecasterAutoreg对象,然后我们可以对其进行微调。除了我们通常要优化的 XGBoost 超参数之外,我们还需要寻找模型中包含的最佳滞后数。为此,Skforecast 提供了一个贝叶斯优化方法,在后台运行 Optuna,即bayesian_search_forecaster

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值