时间序列大模型:TimeGPT

news2024/11/18 15:25:13

论文:https://arxiv.org/pdf/2310.03589.pdf

TimeGPT,这是第一个用于时间序列的基础模型,能够为训练期间未见过的多样化数据集生成准确的预测。

大规模时间序列模型通过利用当代深度学习进步的能力,使精确预测和减少不确定性成为可能!通过对预训练模型进行了评估,并与既定的统计、机器学习和深度学习方法进行了比较,证明了TimeGPT在性能、效率和简单性方面表现出色。

1  介绍

时间序列数据在金融、医疗保健、气象学、社会科学等领域是不可或缺的,识别时间模式、趋势和周期性变化对于预测未来价值和为决策过程提供信息至关重要。然而,目前对时间序列的理论和实践理解尚未在从业者中达成共识,预测科学领域的努力未能实现真正通用的预训练模型的承诺。

2  背景

深度学习方法在时间序列分析中具有显著优势,如全局性、可扩展性、灵活性和潜在准确性,能有效学习复杂数据依赖关系,避免复杂特征工程。然而,其有用性、准确性和复杂性受到质疑。学术研究人员和从业者对深度学习模型的优越性能看法不一,有人质疑其基本假设,而一些行业领导者报告其增强了成果,简化了分析流程。时间序列分析领域对神经预测方法的性能持怀疑态度,源于评估设置未对齐或定义不清晰、次优模型、缺乏符合要求的大规模标准化数据集。更大和更多样化的数据集能使更复杂的模型在各种任务中表现得更好。

图1 单系列预测和多系列预测示意图

3  相关综述

深度学习预测模型在研究和产业中广泛应用,其成功源于对已建立的架构(RNN和CNN)的改进。这些模型最初是为自然语言处理和计算机视觉设计的,但现已广泛应用于时间序列预测。RNNs如DeepAR用于概率预测,而CNN在多项任务中表现优于RNN。前馈网络由于计算成本低、效率高,也经常被使用,N-BEATS和NHITS是著名的例子。近年来,基于Transformer的模型越来越受欢迎,因为它们在大规模设置和复杂任务中表现出卓越的性能。TFT和MQTransformer是早期的例子,通过Prob-sparse自注意力机制,Informer为长序列预测引入了Transformers。此后,该概念在Autoformer、FEDformer和PatchTST等模型中得到了进一步改进。基础模型在时间序列预测任务中的潜力仍然未被充分探索,但有迹象表明可以在不降低性能的情况下将预训练模型转移到不同任务上,且在时间序列预测任务中存在数据和模型规模的扩展律。

4  时间序列的基础模型

迁移学习是指将一项任务中学到的知识应用于解决新任务的能力。在时间序列预测中,预测模型提供一个函数fθ,将特征空间X映射到因变量空间Y。设定中,X包括目标时间序列y和外生协变量x,Y为目标时间序列的未来部分。预测任务的目标是估计条件分布:

图片

迁移学习是在大型源数据集上预训练模型,以提高其在新预测任务上的性能。本文探讨了两种情况:零样本学习和微调。在零样本学习中,直接转移预训练的模型解决新任务,无需在新数据集上重新训练参数。在微调中,进一步在新数据集上训练模型(从预先训练的参数开始)。基础模型的核心思想是利用这些原则,通过最大的公开可用时间序列数据集进行训练,利用数据集和模型规模的比例关系。多种多样的数据集允许TimeGPT从未有过的大量时间模式中获得洞见,这些模式跨越多个领域。

5  TimeGPT实践
5.1  介绍及使用

TimeGPT 是一种由 Nixtla 开发的专门用于预测任务的生成式预训练 Transformer 模型,具有自我关注机制,采用历史值窗口生成预测,添加局部位置编码,由多层编码器-解码器结构组成,每个结构都具有残差连接和层归一化。最后,线性层将解码器的输出映射到预测窗口维度。TimeGPT旨在处理不同频率和特征的时间序列,同时适应不同的输入大小和预测范围。这种适应性在很大程度上归因于TimeGPT所基于的基于transformer的底层架构。

TimeGPT可以仅使用历史值作为输入,无需训练即可对新时间序列进行准确预测。TimeGPT在历史上最大的数据集上进行了训练,该数据集包含超过1000亿行的金融、天气、能源和网络数据,并使时间序列分析的力量大众化。该工具能够在几秒钟内辨别模式并预测未来的数据点。

TimeGPT模型“读取”时间序列数据的方式与人类读取句子的方式非常相似——从左到右。它查看过去数据的窗口,我们可以将其视为“标记”,并预测接下来会发生什么。该预测基于模型在过去数据中识别并推断未来的模式。

API为TimeGPT提供了一个接口,允许用户利用其预测功能来预测未来的事件。TimeGPT还可以用于其他与时间序列相关的任务,如假设场景、异常检测、财务预测等。

安装

pip install nixtlats
如何使用

只需导入库,然后用两行代码就可以开始预测!

df = pd.read_csv('https://raw.githubusercontent.com/Nixtla/transfer-learning-time-series/main/datasets/electricity-short.csv')
 
from nixtlats import TimeGPT
timegpt = TimeGPT(# defaults to os.environ.get("TIMEGPT_TOKEN")    token ='my_token_provided_by_nixtla')
fcst_df = timegpt.forecast(df, h=24, level=[80,90])
INFO:nixtlats.timegpt:Validating inputs...INFO:nixtlats.timegpt:Preprocessing dataframes...INFO:nixtlats.timegpt:Inferred freq: HINFO:nixtlats.timegpt:Restricting input...INFO:nixtlats.timegpt:Calling Forecast Endpoint...
timegpt.plot(df, fcst_df, level=[80,90], max_insample_length=24*5)

5.2  训练数据集

TimeGPT接受了最大的公开时间序列集合的训练,包含1000亿个数据点,涵盖金融、经济等广泛领域。数据集具有多种时间模式、季节性、周期和趋势,以及噪声和异常值。大多数序列以原始形式包含,处理仅限于格式标准化和填补缺失值。这种多样性使TimeGPT能够处理各种场景,增强其鲁棒性和泛化能力,从而准确地预测未知的时间序列。

5.3  训练TimeGPT

TimeGPT在NVIDIA A10G GPU集群上训练,进行了超参数探索,旨在优化学习率和批大小等关键参数。实验结果表明,较大的批大小和较小的学习率对模型性能具有积极的影响。该模型在PyTorch框架中实现,并采用Adam优化器进行训练。我们还实施了学习率衰减策略,将其降低到初始值的12%。

5.4  不确定度量化

概率预测评估模型在风险评估和决策中具有重要作用,其预测的不确定性能够为决策提供重要的参考依据。保形预测作为一种非参数方法,能够生成具有指定覆盖率精度的预测区间,且无需严格的分布假设。这一特性使其在模型和时间序列的未知领域中具有广泛应用。在处理新时间序列推理问题时,我们采用滚动预测的方法来估计模型预测特定目标时间序列的误差,以确保预测的准确性。

6  实验结果

传统的预测性能评估方法,如划分训练集和测试集,已经无法满足基础模型的评估需求。这是因为这些模型的主要功能是预测全新序列。因此,我们特别关注TimeGPT的预测基础模型能力。为了对其进行测试,我们选择了大量未见过的时间序列,包括30万个以上的不同领域数据。测试中,我们关注每个时间序列最后一个预测窗口的评估,其长度会根据采样频率的变化而变化。TimeGPT在预测时,仅使用历史数据作为输入,如图3,并未对模型权重进行再训练(零样本学习)。并且,根据实际需求的不同频率,我们设定了不同的预测范围:12表示每月,1表示每周,7表示每天,24表示每小时的数据。这样的设置更能体现出TimeGPT在实际应用中的价值。

图3 新时间序列的推断。TimeGPT以目标值的历史值和额外的外生变量作为输入,生成预测。我们依靠基于历史误差的保形预测来估计预测区间。

图4 TimeGPT和各组模型在月频率上的相对平均绝对误差(rMAE)。图中每个豆子代表一组模型的rMAE分布,中心线显示平均值。TimeGPT的性能领先,其次是深度学习方法、统计方法、机器学习和基线模型。其他频率的结果类似。

TimeGPT在基准测试中对比了广泛的基线、统计、机器学习和神经预测模型,提供了全面的性能分析。基线和统计模型基于最后一个预测窗口之前的历史值进行训练。我们选择全局模型方法用于机器学习,并利用所有时间序列为每个频率选择深度学习方法。由于计算要求高和训练时间长,排除了Prophet和ARIMA等模型。评价指标包括相对平均绝对误差(rMAE)和相对均方根误差(rRMSE),均以季节性朴素模型为基准进行归一化处理。这些相对误差指标能提供额外洞见,展示相对于已知基准的性能提升,提高结果可解释性。它们还具有尺度独立性,有助于比较每种频率的结果。为确保数值稳定性和评估一致性,对指标进行全局归一化处理。具体计算方式见方程2。

表1 使用零样本推断和使用rMAE和rRMSE测量的基准模型的TimeGPT的主要性能结果,得分越低越好。每个频率和度量的最佳模型以粗体突出显示,第二个最佳模型以下划线突出显示,而第三个最佳模型则以虚线突出显示。

6.1  零样本推理

我们在零样本推理上测试了TimeGPT的功能,即未在测试集上执行额外微调。表1显示了其零样本结果。TimeGPT的性能优于经过战斗测试的综合统计模型和SoTA深度学习方法,在各个频率中排名前三。

评估预测模型的有效性需比较其与竞争替代方案的表现。虽然准确性是关键指标,但计算成本和实现复杂性在实际应用中也至关重要。TimeGPT通过简单、快速地调用预训练模型进行预测,相比其他模型所需的完整训练和预测管道更为优越。

6.2  微调

微调是利用基础模型和基于transformer架构的关键步骤,通过在特定任务数据集上调整模型参数,使模型根据新任务要求调整其广泛知识。此过程保持模型广泛理解,并擅长特定任务。基于transformer的架构受益于微调,提高在特定领域应用的性能。微调是连接基础模型广泛能力和目标任务特性的重要桥梁。如图5所示,TimeGPT在测试集上针对时间序列子集的微调步骤数提高准确度。

图5 对测试集的时间序列子集进行微调后的 TimeGPT 性能

6.3  时间比较

在零样本推断方面,TimeGPT的GPU推断速度为每系列0.6毫秒,与简单季节性朴素推断相当,远快于并行计算优化的统计方法(每系列600毫秒)和全局模型(如LGBM、LSTM和NHITS,每系列57毫秒)。由于其零样本推断能力,TimeGPT的总速度比传统统计方法和全局模型快几个数量级。

7  讨论和未来的研究

TimeGPT通过简化预测过程,显著减少了复杂性和时间投入,同时实现了最先进的性能。在时间序列中引入基础模型是一个重要里程碑,但还有许多未解决的问题。未来的研究方向包括有见地的预测和时间序列嵌入,以及多模态和多时态基础模型的整合。

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

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

相关文章

光流估计概念和算法

什么是光流? 光流就是物体和观测者之间的互相运动,亮度变化的速度矢量,下图两张图片表示了光流的原理。 光流的算法有几个基本不变的假设: 1,光强不变假设; 一元的n阶泰勒公式: 在这里插入图…

Mysql复习1--理论基础+操作实践--更新中

Mysql 索引索引的分类 索引InnoDB引擎MyISAM引擎Memory引擎Btree索引支持支持支持hash索引不支持不支持支持R-tree索引不支持支持不支持Full-text索引5.6版本以后支持支持不支持 索引 解释说明: 索引指的是帮助mysql高效的获取数据的结构叫做索引(有序) 没有建立索引的时候–…

Shell 虚拟机基线配置脚本示例

这是一个配置虚拟机基线的示例,包含关闭防火墙、禁用SElinux、设置时区、安装基础软件等。 这只是一个简单的模板,基线配置方面有很多,后续可以按照这个模板去逐步添加 代码示例 [rootbogon ~]# cat bastic.sh #!/bin/bashRED\E[1;31m GRE…

微信万能表单源码系统:自定义表单内容+自由创建多表单 附带完整的代码包以及安装部署教程

在当今信息化社会,在线表单已经成为收集、处理数据的重要工具。无论是企业还是个人,都需要通过表单来进行信息的收集、调查、报名等操作。然而,传统的表单系统往往功能单一,无法满足复杂多变的需求。为了解决这一问题,…

Hadoop3完全分布式搭建

一、第一台的操作搭建 修改主机名 使用hostnamectl set-hostname 修改当前主机名 关闭防火墙和SELlinux 1,使用 systemctl stop firewalld systemctl disable firewalld 关闭防火墙 2,使用 vim /etc/selinux/config 修改为 SELINUXdisabled 使用N…

【操作系统】实验五 添加内核模块

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

《Linux设备驱动开发详解》读书笔记

《Linux设备驱动开发详解》读书笔记 本书主要介绍linux设备驱动开发的方法,共有21章: linux设备驱动概述及开发环境搭建驱动设计的硬件基础linux内核及内核编程linux内核模块linux文件系统与设备文件字符设备驱动linux设备驱动中的并发控制linux设备驱…

Stable Diffusion学习

参考 Stable Diffusion原理详解_stable diffusion csdn-CSDN博客 Stable Diffusion是stability.ai开源的图像生成模型,可以说Stable Diffusion的发布将AI图像生成提高到了全新高度,其效果和影响不亚于Open AI发布ChatGPT。 图像生成的发展 在Stable D…

代码随想录算法训练营第41天|343. 整数拆分、96.不同的二叉搜索树

文章目录 343. 整数拆分思路代码 96.不同的二叉搜索树思路代码 343. 整数拆分 题目链接:343. 整数拆分 文章讲解:代码随想录|343. 整数拆分 视频讲解:整数拆分 思路 1.dp[i]:整数i拆分成k个数的最大乘积 2.dp[i] max(dp[i], max((i - j) *…

DAY08_SpringBoot—整合Mybatis-Plus

目录 1 MybatisPlus1.1 MP介绍1.2 MP的特点1.3 MybatisPlus入门案例1.3.1 导入jar包1.3.2 编辑POJO对象1.3.3 编辑Mapper接口1.3.4 编译YML配置文件1.3.5 编辑测试案例 1.4 MP核心原理1.4.1 需求1.4.2 原理说明1.4.3 对象转化Sql原理 1.5 MP常规操作1.5.1 添加日志打印1.5.2 测…

unity刷新grid,列表

获取UIGrid 组件,更新列表 listParent.GetComponent().repositionNow true;

书生·浦语大模型--第四节课笔记--XTuner大模型单卡低成本微调

文章目录 Finetune简介指令跟随微调增量预训练微调LoRA QLoRA XTuner介绍快速上手 8GB显卡玩转LLM动手实战环节 Finetune简介 增量预训练和指令跟随 通过指令微调获得instructed LLM 指令跟随微调 一问一答的方式进行 对话模板 计算损失 增量预训练微调 不需要问题只…

C++高精度问题

高精度前言 C中int不能超过2^31-1,最长的long long也不能超过2^63-1,所以我们在题目中如果碰到了很长很长的数,并且需要进行大数运算时,就需要高精度存储。 高精度总体思路 由于int和long long的限制,我们要想存放很长的数就需…

国标GB28181协议EasyCVR启动失败报错“Local Machine Check Error”的解决方法

国标GB28181安防监控系统EasyCVR平台采用了开放式的网络结构,可支持4G、5G、WiFi、有线等方式进行视频的接入与传输、处理和分发。安防视频监控平台EasyCVR还能支持GIS电子地图模式,基于监控摄像头的经纬度地理位置信息,将场景中的整体安防布…

感性负载对电路稳定性有什么影响?

感性负载是指带有电感元件的负载,如电动机、变压器等。在电路中,感性负载对电路稳定性有很大的影响。本文将从以下几个方面来分析感性负载对电路稳定性的影响: 当感性负载接通或断开时,会产生一个瞬时电流,这个瞬时电流…

大数据开发之Spark(RDD弹性分布式数据集)

第 1 章:rdd概述 1.1 什么是rdd rdd(resilient distributed dataset)叫做弹性分布式数据集,是spark中最基本的数据抽象。 代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.1…

安装vcenter7.0问题汇总

1.Windows server 2016安装vcenter7.0出现:无法获取目标服务器证书的 SSL 指纹。 第一个检查点: 防火墙:关闭或者开放443端口 第二个检查点: 检查自己的虚拟网卡是否开启 第三个检查点: 我标记的第一个大框中我这…

Zabbix分布式监控系统

实验过程 ps: 阿里云盘Xnode1获取 xnode1 https://www.alipan.com/s/HgLXfoeBWG2 提取码: eb70 1、xnode1克隆两台虚拟机并修改ip zabbix-server192.168.224.3 zabbix-agent192.168.224.4 2、修改主机名 [rootlocalhost ~]# hostnamectl set-hostname zabbix-se…

Vue3 ref与reactive

✨ 专栏介绍 在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使…

php比较运算,强相等(===)弱相等(==)表

弱相等() 符号为: 规则为:只比较值,不比较类型,只要值对就为true 样例:比较整型123和字符串"123",运行结果给出了true 弱相等表:* 代表在 PHP 8.0.0 之前为…