时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较

最近时间序列预测预测领域的最新进展受到了各个领域(包括文本、图像和语音)成功开发基础模型的影响,例如文本(如ChatGPT)、文本到图像(如Midjourney)和文本到语音(如Eleven Labs)。这些模型的广泛采用导致了像TimeGPT[1]这样的模型的出现,这些模型利用了类似于它们在文本、图像和语音方面获得成功的方法和架构。

在本文中,我们将讨论一个通用的预训练模型能否解决预测任务的范式转变。我们通过使用TimeGPT进行零样本学习并对模型的性能进行了彻底分析。然后将TimeGPT的性能与TiDE[2]进行比较(TiDE是一种在预测用例中击败了Transformer的简单的多层感知机)。

TimeGPT

TimeGPT [1] 是时间序列预测的第一个基础模型,其特点是能够在不同领域之间进行泛化。它可以在训练阶段之外的数据集上产生精确的预测。

最近围绕用于时间序列预测的研究领域的基础模型正在经历显著增长。最近发布的新方法包括:卡内基梅隆大学(CMU)研究人员开发的“MOMENT” [3]、谷歌的“TimesFM” [4]、摩根士丹利和ServiceNow合作开发的“Lag-Llama” [5],以及Salesforce的“Moirai” [6]。我们以前也介绍过一些,随后的文章会将其他的模型进行逐个说明。

现在我们回到TimeGPT ,它号称利用迁移学习在零样本推理设置中表现出色。它使用了来自经济学、人口统计学、医疗保健、天气、物联网传感器数据、能源、网络流量、销售、交通和银行等各种领域的大量公开可用数据集,总共达到了1000亿个数据点。

这种广泛多样的领域使模型能够捕捉复杂的模式,例如多个季节性、不同长度的周期和不断演变的趋势。数据集展示了各种噪声水平、异常值、漂移和其他特征。一些数据集由干净的数据组成,具有规律的模式,而另一些则具有意外事件和行为,其中趋势和模式可能随时间波动。这些挑战为模型提供了许多学习的场景,提高了其鲁棒性和泛化能力。

TimeGPT是一个基于transformer的模型,可以生成潜在结果的概率分布,即预测区间的估计。依靠基于历史误差的符合性预测 [8] 来估计预测区间。与传统方法不同,符合性预测不需要分布假设,可以通过以下步骤实现:

  1. 创建 M 个训练和校准集;
  2. 使用模型对每个校准集进行预测;
  3. 对于每个预测的时刻 h,计算模型预测值与校准集内实际结果之间的绝对残差值。这些计算出的残差称为非符合性分数;
  4. 我们从每个预测时刻 h 的非符合性分数分布中选择特定的分位数。所选择的分位数决定了预测区间的覆盖水平,较高的分位数会导致更宽的区间。

预测区间由预测值 ± 最终的非符合性分数给出。

TiDE

TiDE 是23年4月谷歌发布的的多变量时间序列模型,可以在预测时段使用静态协变量(例如产品的品牌)和已知或未知的动态协变量(例如产品的价格)来生成准确的预测。与Transformers的复杂架构不同,TiDE 基于一个简单的编码器-解码器架构,并使用了残差连接:

  • 编码器负责将时间序列的过去目标值和协变量映射为特征的密集表示。特征投影降低了动态协变量的维度。密集编码器接收特征投影的输出与静态协变量以及过去的值的拼接,并将它们映射成单一的嵌入表示。
  • 解码器接收嵌入表示,并将其转换为未来的预测。密集解码器将嵌入表示映射到预测时段每个时间步的向量。然后,时间解码器将密集解码器的输出与该时间步的特征投影相结合,产生预测。
  • 残差连接线性地将回溯映射为与预测时段大小相同的向量,将其添加到时间解码器的输出中以产生最终的预测。

通过这种简单而有效的架构,TiDE能够利用静态和动态协变量生成准确的销售预测。就像之前更早的Dlinear类似,针对特定的任务简单的线性层可以获得更好的结果。

下面我们就要使用TimeGPT和TiDE应用于客户的销售数据(这是一个真实世界的数据集),并对其性能进行比较和分析。

TimeGPT VS TiDE

数据集包含195个唯一的时间序列,每个序列详细说明了美国市场的每周销售数据。除了历史销售数据外,数据集还包含两种类型的营销事件信息。并且合并了公共假日和二元季节性特征来增强数据集。预测范围是16周,也就是说想要预测未来16周的情况。

我们先导入包

 import matplotlib.pyplot as pltimport osimport pandas as pdimport utilsfrom nixtlats import TimeGPTfrom nixtlats.date_features import CountryHolidaysfrom dotenv import load_dotenvfrom sklearn.preprocessing import MinMaxScaler, OrdinalEncoderload_dotenv()

然后,通过提供TimeGPT令牌来初始化TimeGPT类。

 timegpt = TimeGPT(token = os.environ.get("TIMEGPT_KEY"))timegpt.validate_token()

加载数据集时需要保证格式如下:

目标变量应该是数字的,并且没有缺失值;确保从开始日期到结束日期的日期序列中不存在间隙;日期列必须采用Pandas可识别的格式;TimeGPT可以进行数据缩放(归一化等)所以可以跳过这一步;对于预测多个时间序列,需要一个列来唯一地标识每个序列,这将用作预测函数中的参数;外生特征需要一个单独的数据集用于预测时段。

通过上面的介绍,我们可以看到,TimeGPT把最复杂的部分留给了我们,填充缺失值(包括保证时间序列的连续性)是最麻烦的事情。

我们读取自己处理好的数据集

 df = pd.read_csv('data/data.csv', parse_dates=['delivery_week'])

然后添加周和月的二元季节性特征:

 # add week and month to dfdf['week'] = df['delivery_week'].dt.isocalendar().weekdf['month'] = df['delivery_week'].dt.month# one hot encode week and monthdf = pd.get_dummies(df, columns=['week', 'month'], dtype=int)

截断数据集以供TimeGPT用于预测,剩下作为验证集进行验证。

 # Truncate data frame forecast_df = df[df['delivery_week'] < "2023-10-16"]# Let's use the last x weeks of actuals for the holdout set holdout_df = df[(df['delivery_week'] >= "2023-10-16") & (df['delivery_week'] <= "2024-02-05")]

对于TimeGPT的用法我们这里就不详细介绍了,可以看看我们23年10月的TimeGPT介绍。

 # create list with seasonal exogenous featuresEXOGENOUS_FAETURES = [x for x in df.columns if ('week_' in x) | ('month_' in x)]timegpt_fcst_ex_vars_df = timegpt.forecast(df=forecast_df[['unique_id', 'delivery_week', 'target', 'marketing_events_1', 'marketing_events_2']+EXOGENOUS_FAETURES],time_col='delivery_week',target_col='target',X_df=holdout_df[['unique_id', 'delivery_week', 'marketing_events_1', 'marketing_events_2']+EXOGENOUS_FAETURES],date_features=[CountryHolidays(['US'])],h=17,level=[80],freq='W-MON',id_col='unique_id',model='timegpt-1',add_history=True,)

API的预测只需要几分钟。它返回数据包含历史数据的拟合值和预测范围的预测值,并且还返回了外生协变量在预测中的重要性。

 timegpt.weights_x.head(10).sort_values(by='weights').plot.barh(x='features', y='weights')plt.title('Feature Importance - top 10')plt.show()

提取了十个最重要的协变量,这表明营销事件具有最高的重要性。

我们设置了add_history=True,所以可以绘制拟合值和预测值。

可以看到虽然拟合值与实际值很好地吻合,但预测结果并不一致。它们在大多数序列中显示出一致的模式。

下面我们看看TiDE生成的预测,然后就可以对预测性能指标以进行比较。这里使用平均绝对百分比误差(MAPE)作为比较指标,这样可以防止实际销售量的泄露,又能看到实际的对比结果。

 # load the forecast from TiDE and TimeGPTtide_model_df = pd.read_csv('data/tide.csv', parse_dates=['delivery_week'])timegpt_fcst_ex_vars_df = pd.read_csv('data/timegpt.csv', parse_dates=['delivery_week'])# merge data frames with TiDE forecast and actualsmodel_eval_df = pd.merge(holdout_df[['unique_id', 'delivery_week', 'target']], tide_model_df[['unique_id', 'delivery_week', 'forecast']], on=['unique_id', 'delivery_week'], how='inner')# merge data frames with TimeGPT forecast and actualsmodel_eval_df = pd.merge(model_eval_df, timegpt_fcst_ex_vars_df[['unique_id', 'delivery_week', 'TimeGPT']], on=['unique_id', 'delivery_week'], how='inner')utils.plot_model_comparison(model_eval_df)

在16周的195个时间序列中,有15周TiDE的平均MAPE低于TimeGPT。TimeGPT的零样本学习能力并没有打败我们的微调模型,并且这个模型是23年4月发布的,到现在已经有将近1年的时间了。

总结

在本文中,我们探讨了时间序列预测的最新创新之一——基础模型的发展。这些模型的目标是为缺乏内部开发SOTA模型所需的专业知识的组织提供对算法的使用。这种方式很有希望,但我们验证结果表明,它仍然无法提供准确的预测,也就是说目前来TimeGPT作为基础模型还是不够好。

另外还需要说明的是这里为了简单对比所以我们没有进行人工的特征工程和使用XGB等提升树的模型进行计算。因为目前来看无论是lightgbm还是xgboost,都是目前时间序列预测的sota:这点可以从时间序列发布的论文中看到,所有论文的结果展示没有和它们进行对比的,而对比对象的都是一些前辈(transformer类的深度学习模型)。

虽然目前来看时间序列的基础模型还不够完善,TimeGPT可以说是一个失败的模型,但是我们也可以看到目前的研究方向也在向时间序列的基础模型而努力。虽然其他领域,如计算机视觉和NLP,基础模型已经获得越来越多的关注并且可以说是成功了,但时间序列预测这个领域还有是有很大的研究前景的。

以下是本文的引用:

[1] Garza, A., & Mergenthaler-Canseco, M. (2023). TimeGPT-1. Retrieved from arXiv:2310.03589.

[2] Abhimanyu Das, Weihao Kong, Andrew Leach, Shaan Mathur, Rajat Sen, Rose Yu. (2023) Long-term Forecasting with TiDE: Time-series Dense Encoder. arXiv:2304.08424.

[3] Goswami, M., Szafer, K., Choudhry, A., Cai, Y., Li, S., & Dubrawski, A. (2024). MOMENT: A Family of Open Time-series Foundation Models. Retrieved from arXiv:2402.03885 (cs.LG).

[4] Das, A., Kong, W., Sen, R., & Zhou, Y. (2024). A decoder-only foundation model for time-series forecasting. Retrieved from arXiv:2310.10688 (cs.CL).

[5] Rasul, K., Ashok, A., Williams, A. R., Ghonia, H., Bhagwatkar, R., Khorasani, A., Darvishi Bayazi, M. J., Adamopoulos, G., Riachi, R., Hassen, N., Biloš, M., Garg, S., Schneider, A., Chapados, N., Drouin, A., Zantedeschi, V., Nevmyvaka, Y., & Rish, I. (2024). Lag-Llama: Towards Foundation Models for Probabilistic Time Series Forecasting. Retrieved from arXiv:2310.08278 (cs.LG).

[6] Woo, G., Liu, C., Kumar, A., Xiong, C., Savarese, S., & Sahoo, D. (2024). Unified Training of Universal Time Series Forecasting Transformers. Retrieved from arXiv:2402.02592 (cs.LG).

[7] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. Retrieved from arXiv:1706.03762.

[8] Stankeviciute, K., Alaa, A. M., & van der Schaar, M. (2021). Conformal time-series forecasting. In Advances in Neural Information Processing Systems (Vol. 34, pp. 6216–6228).

https://avoid.overfit.cn/post/b74a5eaf984849b186b26ea6d8f93db5

作者:Luís Roque

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JS】html字符转义

需求 将html转为字符串将html字符串转义&#xff0c;比如<div>转为<div> 码 /*** html标签字符转义* param {Stirng} str 要转换的html字符* returns String 返回转义的html字符串*/ const elToStr str > str.replaceAll(<, <).replaceAll(>, >)…

ChatGPT有身体了,能走向千家万户吗?

3月13日&#xff0c;OpenAI投资的人形机器人——Figure 01迎来重磅更新&#xff0c;接入最新版ChatGPT后&#xff0c;它能和人交流描述眼前看到的事物。在视频中&#xff0c;Figure 的人形机器人&#xff0c;可以完全与人类流畅对话&#xff0c;还能理解人的自然语言指令进行抓…

搞懂分布式技术:缓存更新的套路

目录 缓存更新的套路 Cache Aside Pattern Read/Write Through Pattern Read Through Write Through Write Behind Caching Pattern 再多唠叨一些 缓存更新的套路 看到好些人在写更新缓存数据代码时&#xff0c;先删除缓存&#xff0c;然后再更新数据库&#xff0c;而后续的操作…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

shallowReactive浅层式响应对象

一、 reactive 和ref 都是深层响应式对象: 就是不管对象有多少层&#xff0c;修改此对象任一属性都会响应式处理 shallowReactive 和shallowRef 浅层响应式对象: 只会修改第一层对象&#xff0c;修改此对象第一层属性&#xff0c;视图会有同步变化&#xff0c;非第一层&#xf…

WorkPlus Meet局域网视频会议软件的领先解决方案

局域网视频会议软件在现代企业中发挥着重要的作用&#xff0c;而在众多选项中&#xff0c;为何选择WorkPlus Meet作为局域网视频会议软件&#xff1f; 选择局域网视频会议软件时需要考虑到企业的需求。WorkPlus Meet提供了稳定、高效的局域网视频会议功能&#xff0c;能够满足…

关于d3dx9_43.dll文件丢失的解决办法,六种详细方法

当d3dx9_43.dll文件缺失时&#xff0c;系统会显示错误信息来提示用户。这些错误信息可能会包含类似于"d3dx9_43.dll未找到"或"找不到d3dx9_43.dll"等字样。通常出现这样的字样那就是导致应用程序通常无法正常启动或执行相关功能。那么出现这样的功能有什么…

哔哩哔哩后端Java一面

前言 作者&#xff1a;晓宜 个人简介&#xff1a;互联网大厂Java准入职&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 最近各大公司的春招和实习招聘都开始了&#xff0c;这里分享下去年面试B站的的一些问题&#xff0c;希望对大家有所帮助…

Centos7安装ffmpeg

Centos7安装ffmpeg 用到的包压缩并安装 用到的包 压缩并安装 tar xvJf ffmpeg-5.0.1.tar.xz yum install -y gcctar -zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make && make install yasm --versionyum install -y bzip2tar jxvf nasm-2.14.02.tar.bz2 cd n…

Spring MVC文件上传配置

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 文件上传 Spring MVC文件上传基于Servlet 3.0实现&#xff1b;示例代码如下&#xff1a; Overrideprotected void customizeRegistration(ServletRegistration.Dynamic reg…

Guitar Pro 8.1功能介绍及如何安装安装破解教程

音乐创作是许多音乐人的核心工作&#xff0c;而吉他作为其中最为常用的乐器之一&#xff0c;其创作和演奏的重要性也不言而喻。在创作过程中&#xff0c;如何更好地记录和编辑音乐成为了许多音乐人所面临的挑战。而Guitar Pro 8.1则是一款专业的吉他音乐编辑软件&#xff0c;它…

T1.数据库MySQL

二.SQL分类 2.1 DDL 2.1.1数据库操作 1). 查询所有数据库 show databases ; 2). 查询当前数据库 select database(); 3)创建数据库 create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则] ; 4&#xff09;删除数据库 drop database …

【机器学习系列】M3DM工业缺陷检测部署与训练

一.基础资料 1.Git 地址 地址 2.issues issues 3.参考 参考 csdn 二.服务器信息 1.GPU 服务器 GPU 服务器自带 CUDA 安装(前提是需要勾选上)CUDA 需要选择大于 11.3 的版本登录服务器后会自动安装 GPU 驱动 2.CUDA 安装 GPU 服务器自带 CUDA CUDA 版本查看 3.登录信…

小红书图片怎么提取?小红书图片提取原图方法!

说到小红书&#xff0c;不少女性群体都知道这个&#xff0c;他的价值很高而且变现对于大多数做自媒体的小伙伴来说&#xff0c;也是不错的选择&#xff01; 小红书对于普通大众还是互联网创作者来说&#xff0c;都太实用了&#xff0c;唯一的缺点可能就是当我们需要存储他的图…

2.VDMA视频流显示通路搭建

1.简介 本节主要讲解如何基于ZYNQ7020搭建一个视频流接收以及显示的数据通路。为后续的算法图像验证提供基础。 2.项目框架 整个项目简略框架如图&#xff0c;img_gen负责产生图像像素点&#xff0c;给到video in to AXI_Stream模块后转化为AXI_Stream数据流给到VDMA&#xff…

STM32---SG90舵机控制(HAL库,含源码)

写在前面&#xff1a;在嵌入式的项目中&#xff0c;舵机是一个十分常见的元器件模块&#xff0c;其主要的功能是实现机械转动&#xff0c;实质上舵机是一个伺服的驱动器&#xff0c;适用于那些需要角度不断变化并可以保持的控制系统。例如在机器人的电控制器系统中&#xff0c;…

用户数据的FLASH存储与应用(FPGA架构)

该系列为神经网络硬件加速器应用中涉及的模块接口部分&#xff0c;随手记录&#xff0c;以免时间久了遗忘。 一 背景 我们知道&#xff0c;在FPGA做神经网络应用加速时&#xff0c;涉及到权重参数的存储和加载。通常在推理过程中&#xff0c;会将权重参数存储在外部DDR或片上S…

c++简单实现avl树

文章目录 AVL树节点类节点类的构造函数 AVLinsert()插入RotateL(左单旋)RotateR(右单旋)RotateLR(右双旋)RotateRL(左双旋) Find(查找)IsBalance(检查是否是avl树) AVL树 AVL树:又名高度平衡树&#xff0c;在二叉搜索树的基础上加上了一个条件&#xff0c;条件是左右子树高度差…

vulhub中GitLab 远程命令执行漏洞复现(CVE-2021-22205)

GitLab是一款Ruby开发的Git项目管理平台。在11.9以后的GitLab中&#xff0c;因为使用了图片处理工具ExifTool而受到漏洞CVE-2021-22204的影响&#xff0c;攻击者可以通过一个未授权的接口上传一张恶意构造的图片&#xff0c;进而在GitLab服务器上执行任意命令。 环境启动后&am…

FFmpeg查看所有支持的编码/解码器/封装/解封装/媒体格式/滤镜

查看所有支持的编码器与解码器 ffmpeg -codecs 只查看所有编码器: ffmpeg -encoders 只查看所有解码器: ffmpeg -decoders 只查看H264编码器: ffmpeg -h encoderh264 只查看H264解码器: ffmpeg -h decoderh264 查看所有支持的封装: ffmpeg -muxers 查看所有支持的解封装…