当前位置: 首页 > news >正文

时间序列大模型:TimeGPT

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

相关文章:

  • 大数据平台红蓝对抗 - 磨利刃,淬精兵!
  • 搭建k8s集群实战(一)系统设置
  • 机器学习-决策树【手撕】
  • spawn_group_template | spawn_group | linked_respawn
  • 【Flink-CDC】Flink CDC 介绍和原理概述
  • 编码风格之(5)GNU软件编码风格(3)
  • c# MathNet.Numerics 圆拟合使用案例
  • 08章【文件与IO】
  • CMS如何调优
  • 如何在Docker下部署MinIO存储服务通过Buckets实现文件的远程上传
  • keil5 查看stm32 寄存器的值
  • MySQL对数据库的操作
  • 软件是什么?前端,后端,数据库
  • http503错误是什么原因
  • Redis(五)
  • Codepen 每日精选(2018-3-25)
  • extjs4学习之配置
  • GraphQL学习过程应该是这样的
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Nacos系列:Nacos的Java SDK使用
  • Shadow DOM 内部构造及如何构建独立组件
  • 阿里研究院入选中国企业智库系统影响力榜
  • 笨办法学C 练习34:动态数组
  • 将 Measurements 和 Units 应用到物理学
  • 通信类
  • 我从编程教室毕业
  • 怎么把视频里的音乐提取出来
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (7)STL算法之交换赋值
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计ssm电影分享网站
  • (七)理解angular中的module和injector,即依赖注入
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET DataGridView数据绑定说明
  • .Net IE10 _doPostBack 未定义
  • .net mvc部分视图
  • .NET中统一的存储过程调用方法(收藏)
  • .sh
  • @EnableWebMvc介绍和使用详细demo
  • @property @synthesize @dynamic 及相关属性作用探究
  • [20160902]rm -rf的惨案.txt
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [Bugku]密码???[writeup]
  • [C++基础]-初识模板
  • [EFI]MSI GF63 Thin 9SCXR电脑 Hackintosh 黑苹果efi引导文件
  • [LeetCode]Balanced Binary Tree
  • [leetcode]Search a 2D Matrix @ Python
  • [LeetCode]Spiral Matrix