首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TimeGPT:时间序列预测的第一个基础模型

TimeGPT:时间序列预测的第一个基础模型

作者头像
小F
发布于 2023-12-30 06:15:37
发布于 2023-12-30 06:15:37
42800
代码可运行
举报
运行总次数:0
代码可运行

来源丨网络

大家好,我是小F。

时间序列预测领域在最近的几年有着快速的发展,比如N-BEATS、N-HiTS、PatchTST和TimesNet。

大型语言模型(LLM)最近在ChatGPT等应用程序中变得非常流行,因为它们可以适应各种各样的任务,而无需进一步的训练。

这就引出了一个问题:时间序列的基础模型能像自然语言处理那样存在吗?一个预先训练了大量时间序列数据的大型模型,是否有可能在未见过的数据上产生准确的预测?

通过Azul Garza和Max Mergenthaler-Canseco提出的 TimeGPT-1,作者将llm背后的技术和架构应用于预测领域,成功构建了第一个能够进行零样本推理的时间序列基础模型。

在本文中,我们将探索TimeGPT背后的体系结构以及如何训练模型。然后,我们将其应用于预测项目中,以评估其与其他最先进的方法(如N-BEATS, N-HiTS和PatchTST)的性能。

TimeGPT

TimeGPT是为时间序列预测创建基础模型的第一次尝试。

从上图中,我们可以看到TimeGPT背后的一般思想是在来自不同领域的大量数据上训练模型,然后对未见过的数据产生零样本的推断。

这种方法依赖于迁移学习,迁移学习是指模型利用在训练过程中获得的知识解决新任务的能力。这种方式只有当模型足够大,并且在大量数据上进行训练时才有效。

为此,作者对TimeGPT进行了超过1000亿个数据点的训练,这些数据点都来自开源的时间序列数据。该数据集涵盖了广泛的领域,从金融、经济和天气,到网络流量、能源和销售。

但是这里作者没有披露用于管理1000亿个数据点的公共数据的来源。

这种多样性对于基础模型的成功至关重要,因为它可以学习不同的时间模式,因此可以更好地进行泛化。

例如,我们可以预期天气数据具有日季节性(白天比晚上热)和年季节性,而汽车交通数据可以具有日季节性(白天路上的汽车比晚上多)和周季节性(一周内路上的汽车比周末多)。

为了保证模型的鲁棒性和泛化能力,预处理被保持在最低限度。事实上只有缺失的值被填充,其余的保持原始形式。虽然作者没有具体说明数据输入的方法,但我怀疑使用了某种插值技术,如线性、样条或移动平均插值。

然后作者对模型进行多天的训练,在此期间对超参数和学习率进行优化。虽然作者没有透露训练需要多少天和gpu资源,但我们确实知道该模型是在PyTorch中实现的,并且它使用Adam优化器和学习率衰减策略。

TimeGPT利用Transformer架构。

从上图中,我们可以看到TimeGPT使用了完整的编码器-解码器Transformer架构。

输入可以包括历史数据窗口,也可以包括外生数据窗口,如准时事件或其他系列。

输入被馈送到模型的编码器部分。然后编码器内部的注意力机制从输入中学习不同的属性。然后将其输入解码器,解码器使用学习到的信息进行预测。预测序列在达到用户设置的预测范围长度时结束。

值得注意的是,作者已经在TimeGPT中实现了适形预测,允许模型根据历史误差估计预测间隔。

考虑到TimeGPT是为时间序列构建基础模型的第一次尝试,它具有一系列广泛的功能。

TimeGPT的功能总结:

首先,TimeGPT是一个预先训练的模型,这意味着可以生成预测,而不需要对数据进行特定的训练。尽管如此,还是可以根据我们的数据对模型进行微调。

其次,该模型支持外生变量来预测我们的目标,也就是说可以处理多变量预测任务。

最后,使用保形预测,TimeGPT可以估计预测区间。这反过来又允许模型执行异常检测。如果一个数据点落在99%的置信区间之外,那么模型将其标记为异常。

所有这些任务都可以通过零样本推理或一些微调来实现,这是时间序列预测领域范式的根本转变。

现在我们对TimeGPT有了更扎实的了解,了解了它是如何工作的,以及它是如何训练的,让我们来看看实际的模型。

TimeGPT进行预测

现在让我们将TimeGPT应用于预测任务,并将其性能与其他模型进行比较。

在撰写本文时,TimeGPT只能通过API访问,并且还处于封闭测试阶段。我提交申请,并获得了免费使用该模型两周的授权。

如前所述,该模型是在来自公开可用数据的1000亿个数据点上进行训练的。由于作者没有指定使用的实际数据集,我认为在已知的基准数据集(如ETT或weather)上测试模型是不合理的,因为模型可能在训练期间看到了这些数据。

因此,我使用了自己的数据集,数据集现在在GitHub上公开可用,最重要的是TimeGPT没有在这些数据上进行训练。

导入库并读取数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 import pandas as pd
 import numpy as np
 import datetime
 import matplotlib.pyplot as plt
 
 from neuralforecast.core import NeuralForecast
 from neuralforecast.models import NHITS, NBEATS, PatchTST
 
 from neuralforecast.losses.numpy import mae, mse
 
 from nixtlats import TimeGPT
 
 %matplotlib inline

然后,为了访问TimeGPT模型从文件中读取API密钥。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 with open("data/timegpt_api_key.txt", 'r') as file:
        API_KEY = file.read()

然后读取数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 df = pd.read_csv('data/medium_views_published_holidays.csv')
 df['ds'] = pd.to_datetime(df['ds'])
 
 df.head()

从上图中,我们可以看到数据集的格式与我们使用Nixtla的其他开源库时的格式相同。

我们有一个unique_id列来标记不同的时间序列,但在本例中,我们只有一个序列。

y列表示我的博客每天的浏览量,published是一个简单的标志,用来标记某一天有新文章发布(1)或没有文章发布(0)。一般来说当新内容发布时,浏览量通常会增加一段时间。

最后,列is_holiday表示美国是否有假日。在假期很少有人会访问。

现在让我们把我们的数据可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 published_dates = df[df['published'] == 1]
 
 fig, ax = plt.subplots(figsize=(12,8))
 
 ax.plot(df['ds'], df['y'])
 ax.scatter(published_dates['ds'], published_dates['y'], marker='o', color='red', label='New article')
 ax.set_xlabel('Day')
 ax.set_ylabel('Total views')
 ax.legend(loc='best')
 
 fig.autofmt_xdate()
 
 
 plt.tight_layout()

从上图中,我们可以看到一些有趣的行为。首先,红点表示新发表的文章,并且几乎紧随其后的是访问高峰。

我们还注意到2021年的活动减少,这反映在日浏览量减少上。最后在2023年,我们注意到一篇文章发表后,访问量出现了一些异常高峰。

大数据,我们还发现了明显的每周季节性。

从上图中,可以看到周末访问的访客比平时少。

考虑到所有这些,让我们看看如何使用TimeGPT进行预测。

首先,将数据集分成训练集和测试集。在这里为测试集保留168个时间步长,这对应于24周的每日数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 train = df[:-168]
 test = df[-168:]

然后使用7天的预测范围,因为我对预测整个星期的每日视图感兴趣。

该API没有附带验证的实现。因此我们创建自己的循环,一次生成七个预测,直到我们对整个测试集进行预测。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 future_exog = test[['unique_id', 'ds', 'published', 'is_holiday']]
 
 timegpt = TimeGPT(token=API_KEY)
 
 timegpt_preds = []
 
 for i in range(0, 162, 7):
 
    timegpt_preds_df = timegpt.forecast(
        df=df.iloc[:1213+i],
        X_df = future_exog[i:i+7],
        h=7,
        finetune_steps=10,
        id_col='unique_id',
        time_col='ds',
        target_col='y'
    )
     
    preds = timegpt_preds_df['TimeGPT']
     
    timegpt_preds.extend(preds)

在上面的代码块中必须传递外生变量的未来值,因为它们是静态变量,我们知道未来假期的日期,

这里我们还使用finetune_steps参数对TimeGPT进行了微调。

一旦循环完成就可以将预测结果添加到测试集中。TimeGPT一次生成7个预测,直到获得168个预测,因此我们可以评估它预测下周每日浏览量的能力。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 test['TimeGPT'] = timegpt_preds
 
 test.head()

与N-BEATS, N-HiTS和PatchTST对比

现在我们用其他方法来进行对比,这里使用了N-BEATS, N-HiTS和PatchTST。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 horizon = 7
 
 models = [NHITS(h=horizon,
                input_size=5*horizon,
                max_steps=50),
          NBEATS(h=horizon,
                input_size=5*horizon,
                max_steps=50),
          PatchTST(h=horizon,
                  input_size=5*horizon,
                  max_steps=50)]

然后,我们初始化NeuralForecast对象并指定数据的频率,在本例中是每天。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 nf = NeuralForecast(models=models, freq='D')

在7个时间步骤的24个窗口上运行执行验证,以获得与用于TimeGPT的测试集一致的预测。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 preds_df = nf.cross_validation(
    df=df,
    static_df=future_exog ,
    step_size=7,
    n_windows=24
 )

然后合并结果,这样就得到了一个包含所有模型预测的单一DataFrame。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 preds_df['TimeGPT'] = test['TimeGPT']

下面开始评估每个模型的性能。在度量性能指标之前,可视化一下测试集中每个模型的预测。

每个模型之间有很多重叠。我们确实注意到N-HiTS预测的两个峰值在现实中没有实现。此外PatchTST似乎经常预测不足。但是TimeGPT似乎通常与实际数据重叠得很好。

但是评估每个模型性能的唯一方法是度量性能指标。在这里使用平均绝对误差(MAE)和均方误差(MSE)。另外我们做的一个动作是将预测四舍五入为整数,因为小数在每日访问量上下文中是没有意义的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 preds_df = preds_df.round({
    'NHITS': 0,
    'NBEATS': 0,
    'PatchTST': 0,
    'TimeGPT': 0
 })
 
 data = {'N-HiTS': [mae(preds_df['NHITS'], preds_df['y']), mse(preds_df['NHITS'], preds_df['y'])],
        'N-BEATS': [mae(preds_df['NBEATS'], preds_df['y']), mse(preds_df['NBEATS'], preds_df['y'])],
        'PatchTST': [mae(preds_df['PatchTST'], preds_df['y']), mse(preds_df['PatchTST'], preds_df['y'])],
        'TimeGPT': [mae(preds_df['TimeGPT'], preds_df['y']), mse(preds_df['TimeGPT'], preds_df['y'])]}
 
 metrics_df = pd.DataFrame(data=data)
 metrics_df.index = ['mae', 'mse']
 
 metrics_df.style.highlight_min(color='lightgreen', axis=1)

从上图中可以看到TimeGPT是表现最好,它实现了最低的MAE和MSE,其次是N-BEATS, PatchTST和N-HiTS。

这是一个令人兴奋的结果,因为TimeGPT从未见过这个数据集,并且只进行了几个步骤的微调。虽然这不是一个详尽的实验,但我相信它确实展示了潜在的基础模型在预测领域的潜力。

对TimeGPT的看法

TimeGPT是时间序列预测的第一个基础模型。它利用了Transformer架构,并在1000亿个数据点上进行了预训练,以便对新的未见过的数据进行零样本推断。该模型结合保形预测技术,无需特定数据集的训练即可生成预测区间并进行异常检测。

虽然TimeGPT的简短实验证明是令人兴奋的,但原始论文在许多重要概念仍然含糊不清。

比如我们不知道使用了哪些数据集来训练和测试模型,因此我们无法真正验证TimeGPT的性能结果,如下所示。

从上表中可以看到TimeGPT在每月和每周频率上表现最好,N-HiTS和TFT通常排名第二或第三。因为我们不知道使用了什么数据,所以我们无法验证这些指标。

虽然TimeGPT看起来很好,但是它还是有2个问题要面对:

1、当涉及到如何训练模型以及如何调整模型来处理时间序列数据时缺乏透明度,可以认为是没有任何的可解释性。

2、这个模型是用于商业用途的,这也就是为什么论文缺少细节,无法让人通过论文来复制TimeGPT。当然这并没有错,因为毕竟是要赚钱的。但这就导致论文缺乏可重复性,没人或再去研究和改进他。

虽然是这样,但是我还是觉得这能激发时间序列基础模型的新工作和研究,并且我们最终能看到这些模型的开源版本,就像我们在LLM中看到的那样。

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

本文代码地址:https://github.com/marcopeix/time-series-analysis/blob/master/TimeGPT.ipynb

作者:Marco Peixeiro

万水千山总是情,点个 👍 行不行。

··· END ···

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 法纳斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PatchTST:长时间序列预测神器
基于transformer的模型已经成功地应用于许多领域,如自然语言处理(想想BERT或GPT模型)和计算机视觉,仅举几例。
数据STUDIO
2023/09/04
4.9K0
PatchTST:长时间序列预测神器
TimesNet:时间序列预测的最新模型
2020年发布的N-BEATS、2022年发布的N-HiTS和2023年3月发布的PatchTST开始。N-BEATS和N-HiTS依赖于多层感知器架构,而PatchTST利用了Transformer架构。
deephub
2023/10/19
3.7K0
TimesNet:时间序列预测的最新模型
TimeGPT:第一个时间序列的大模型
TimeGPT是首个时间序列基础大模型,能准确预测多样化数据集。评估显示,TimeGPT推理在性能、效率和简单性上优于统计、机器学习和深度学习方法。
算法进阶
2024/01/17
1.3K0
TimeGPT:第一个时间序列的大模型
SOFTS: 时间序列预测的最新模型以及Python使用示例
近年来,深度学习一直在时间序列预测中追赶着提升树模型,其中新的架构已经逐渐为最先进的性能设定了新的标准。
deephub
2024/06/17
6610
SOFTS: 时间序列预测的最新模型以及Python使用示例
BiTCN:基于卷积网络的多元时间序列预测
在时间序列预测领域中,模型的体系结构通常依赖于多层感知器(MLP)或Transformer体系结构。
deephub
2024/05/10
8250
BiTCN:基于卷积网络的多元时间序列预测
基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
本文将讨论通过使用假设测试、特征工程、时间序列建模方法等从数据集中获得有形价值的技术。我还将解决不同时间序列模型的数据泄漏和数据准备等问题,并且对常见的三种时间序列预测进行对比测试。
deephub
2023/02/01
1.5K0
时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较
最近时间序列预测预测领域的最新进展受到了各个领域(包括文本、图像和语音)成功开发基础模型的影响,例如文本(如ChatGPT)、文本到图像(如Midjourney)和文本到语音(如Eleven Labs)。这些模型的广泛采用导致了像TimeGPT[1]这样的模型的出现,这些模型利用了类似于它们在文本、图像和语音方面获得成功的方法和架构。
deephub
2024/03/20
5120
时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较
AI论文速读 | 立场观点:长程时间序列预测中没有冠军
论文标题:Position: There are no Champions in Long-Term Time Series Forecasting
时空探索之旅
2025/03/04
1560
AI论文速读 | 立场观点:长程时间序列预测中没有冠军
时间序列+预训练大模型!
时间序列预测可以使用经典预测方法和深度学习方法。经典预测方法如ETS、ARIMA等为每个时间序列独立地拟合模型,而深度学习方法在给定的数据集中学习时间序列。
算法进阶
2024/05/21
8460
时间序列+预训练大模型!
时间序列预测的零样本学习:TimeGPT vs. TiDE
在本文中,我们将讨论一个通用的预训练模型能否解决预测任务的范式转变。我们通过使用TimeGPT进行零样本学习并对模型的性能进行了彻底分析。然后将TimeGPT的性能与TiDE[2]进行比较(TiDE是一种在预测用例中击败了Transformer的简单的多层感知机)。
数据STUDIO
2024/04/11
7750
时间序列预测的零样本学习:TimeGPT vs. TiDE
时间序列预测的20个基本概念总结
时间序列数据是有序的。这意味着观察/数据点依赖于以前的观察/数据点。因此,在模型训练期间,数据点顺序不会被打乱。
deephub
2023/08/30
8400
时间序列预测的20个基本概念总结
Moirai:Salesforce的时间序列预测基础模型
在过去的几个月中,时间序列基础模型的发展速度一直在加快,每个月都能看到新模型的发布。从TimeGPT 开始,我们看到了 Lag-Llama 的发布,Google 发布了 TimesFM,Amazon 发布了 Chronos,Salesforce 发布了 Moirai。TimesFM是信息最多的模型,而Lag-Llama、Chronos我们都做过详细的介绍。今天我们来详细介绍一下Moirai,这里可能最不知名(相对)就是Salesforce了,所以基本没有介绍 Moirai的文章,我们就来补足这个信息。
deephub
2024/04/15
1.1K1
Moirai:Salesforce的时间序列预测基础模型
使用 TiDE 进行时间序列预测
时间序列预测一直是数据科学领域的一个热门研究课题,广泛应用于能源、金融、交通等诸多行业。传统的统计模型如ARIMA、GARCH等因其简单高效而被广泛使用。而近年来,随着深度学习的兴起,基于神经网络的预测模型也备受关注,表现出了强大的预测能力。
数据STUDIO
2024/07/24
6600
使用 TiDE 进行时间序列预测
darts 时序预测入门
darts是一个强大而易用的Python时间序列建模工具包。在github上目前拥有超过7k颗stars。
lyhue1991
2024/06/14
3530
darts 时序预测入门
Tiny Time Mixers (TTM)轻量级时间序列基础模型:无需注意力机制,并且在零样本预测方面表现出色
大语言模型的发展让研究人员专注于建立尽可能大的模型。但是其实较小的模型在某些任务中表现会优于较大的模型时,例如:Llama 3-8B在MMLU任务上的表现优于较大的Llama 2-70B !
deephub
2024/06/17
5400
Tiny Time Mixers (TTM)轻量级时间序列基础模型:无需注意力机制,并且在零样本预测方面表现出色
AI论文速读 | TimesFM-ICF:时间序列基础模型的上下文微调
论文标题:In-Context Fine-Tuning for Time-Series Foundation Models
时空探索之旅
2024/11/19
5470
AI论文速读 | TimesFM-ICF:时间序列基础模型的上下文微调
深度学习与统计学中的时间序列预测
近年来,深度学习在NLP领域取得了显著进展。由于时间序列本质上也是呈现出序列性,如果将预训练的转换器(transformers)模型应用在时间序列预测上,结果将会如何呢?
LeonAlgo
2025/02/26
1320
深度学习与统计学中的时间序列预测
时间序列预测任务的模型选择最全总结
如果你正在处理时间序列数据,那么就跟云朵君一起学习如何根据预测性能来比较和选择时间序列模型。
数据STUDIO
2023/02/24
5.8K0
时间序列预测任务的模型选择最全总结
5个时间序列预测的深度学习模型对比总结:从模拟统计模型到可以预训练的无监督模型(附代码)
来源:DeepHub IMBA本文约6700字,建议阅读12分钟本文讨论了5种专门研究时间序列预测的深度学习体系结构。 时间序列预测在最近两年内发生了巨大的变化,尤其是在kaiming的MAE出现以后,现在时间序列的模型也可以用类似MAE的方法进行无监督的预训练。 Makridakis M-Competitions系列(分别称为M4和M5)分别在2018年和2020年举办(M6也在今年举办了)。对于那些不了解的人来说,m系列得比赛可以被认为是时间序列生态系统的一种现有状态的总结,为当前得预测的理论和实践提供
数据派THU
2022/08/29
1.3K0
5个时间序列预测的深度学习模型对比总结:从模拟统计模型到可以预训练的无监督模型(附代码)
用LightGBM进行时间序列预测项目实战
但是在这篇文章将使用更高级的技术来预测时间序列,本文将使用 Prophet 来提取新的有意义的特征,例如季节性、置信区间、趋势等。
数据STUDIO
2023/11/09
1.3K0
用LightGBM进行时间序列预测项目实战
推荐阅读
相关推荐
PatchTST:长时间序列预测神器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档