近期美国的一家公司Nixtla提出了业界首个时序基础模型TimeGPT,并开放了相关模型的API(https://docs.nixtla.io/)供大家体验。TimeGPT号称使用了来自金融、气象、能源、网络数据等多个领域超过1000亿个数据点进行训练,同时允许使用者利用自己的数据对其进行微调,最终支撑各类预测及异常检测任务,并号称是第一个始终能够以最小的复杂性超越其他选择的基础模型。

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

17201926-2024-06-17T12:19:54.png
从上图中,我们可以看到TimeGPT背后的一般思想是在来自不同领域的大量数据上训练模型,然后对未见过的数据产生零样本的推断。这种方法依赖于迁移学习,迁移学习是指模型利用在训练过程中获得的知识解决新任务的能力。这种方式只有当模型足够大,并且在大量数据上进行训练时才有效。

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

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

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

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

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

然后作者对模型进行多天的训练,在此期间对超参数和学习率进行优化。虽然作者没有透露训练需要多少天和gpu资源,但我们确实知道该模型是在PyTorch中实现的,并且它使用Adam优化器和学习率衰减策略。
17202151-2024-06-17T12:22:20.png
TimeGPT利用Transformer架构。

TimeGPT用于上证指数预测的代码

import yfinance as yf
import pandas as pd
# Define the ticker symbol for the S&P 500 index
ticker_symbol = "000001.ss"
# Fetch daily data for the S&P 500 index
data = yf.download(ticker_symbol, start='2010-01-01', end='2024-05-22')
# Create a DataFrame
df = pd.DataFrame(data)
from nixtla import NixtlaClient
nixtla_client = NixtlaClient(api_key = 'your key')
nixtla_client.validate_api_key()
#Create a timestamp column and change the index
df['timestamp'] = df.index
df = df.reset_index(drop=True)
level = [50,80,90] # confidence levels 
fcst = nixtla_client.forecast(df, h=10, level=level,freq='D', time_col='timestamp', target_col='Close')
nixtla_client.plot(df, fcst, max_insample_length=250,time_col='timestamp', target_col='Close')

预测了2024年5月22日后10日的数据:
17204048-2024-06-17T12:41:15.png

论文:https://arxiv.org/pdf/2310.03589
用例:https://github.com/marcopeix/time-series-analysis/blob/master/TimeGPT.ipynb