2024-arXiv-金融领域的时间序列大模型微调
arXiv | https://arxiv.org/abs/2412.09880
GitHub | https://github.com/pfnet-research/timesfm_fin
摘要:
本文通过评估最新时间序列基础模型 TimesFM 在价格预测中的表现,研究将市场价格视为时间序列大模型能否用于市场预测。由于价格数据的不规则性,直接应用 TimesFM 效果不佳,因此提出在金融数据上对 TimesFM 进行微调以完成价格预测任务。具体做法是,在包含 1 亿个时间点的价格数据上对最新时间序列基础模型 TimesFM 进行持续预训练,涵盖了小时和日粒度范围内的多种金融工具。
一、引言
预测市场长期以来一直是研究者们感兴趣的课题。使用预训练 LLMs 的优势在于,能够结合文本上下文与数值数据以提高预测准确性,并且得益于其强大的编码器/解码器结构,仅需调整嵌入层以适应数值时间序列数据,即可将 LLM 输出调校至时间序列预测任务。
TimesFM 是一个专门为时间序列预测任务从头训练的基础时间序列模型,在多个预测基准测试中达到了最先进的性能。然而,这些基准测试通常包含规律性和季节性数据,与我们感兴趣的金融数据大相径庭。
二、金融微调方法
2.1 TimesFM
在 TimesFM 中,输入的时间序列数据被分割成 input_patch_len=liinput\_patch\_len=l_iinput_patch_len=li 的输入片段,这些片段通过堆叠的 Transformer 层进行处理,从中预测出包含 output_patch_len=looutput\_patch\_len=l_ooutput_patch_len=lo 时间点的输出块。在这些 lol_olo 点上计算均方误差(MSE)损失:
Train_Loss=1N∑j=1NMSE(y^lij+1:lij+lo,ylij+1:lij+lo)
Train\_Loss=\frac{1}{N}\sum_{j=1}^N MSE(\hat{y}_{l_ij+1:l_ij+l_o},y_{l_ij+1:l_ij+l_o})
Train_Loss=N1j=1∑NMSE(y^lij+1:lij+lo,ylij+1:lij+lo)
通常设置 li=32,lo=128l_i=32,l_o=128li=32,lo=128,建议 lo>lil_o>l_ilo>li,以仅解码器模式训练模型,同时最小化推理时所需的自回归步骤数,还应用随机掩码训练模型以遍历所有可能的上下文长度。在推理时,模型读取其生成的 lol_olo 点作为输入,并重复生成新的时间点,直到所有点都自回归生成,推理时不应用掩码。
TimesFM 预训练期间使用的数据主要包括谷歌趋势、维基百科页面浏览量以及许多其他公开可用的时间序列数据源。作者还表明合成数据的混合提高了模型的性能。
适应TimesFM进行金融数据持续预训练方面的两项贡献。
持续预训练:从TimesFM的预训练权重重新开始训练,在金融数据上继续随机梯度下降。我们以线性预热至学习率5e-4重新开始训练,随后进行余弦衰减。
2.2 金融数据微调改进
采用持续预训练的方法:从 TimesFM 的预训练权重重新开始训练,在金融数据上继续随机梯度下降。以线性预热至学习率 5e-4 重新开始训练,随后进行余弦衰减。 训练过程有以下改进:
2.2.1 损失函数
原始均方误差(MSE)损失在应用于价格数据训练时存在一系列问题:
- **偏向于大规模数值:**平均值为 1000 美元的股票指数在训练中会获得比平均值为 0.0001 美元的加密货币更大的权重。
- **市场崩盘事件导致的不稳定性:**特别是当高价股票经历超过其原始价值99%的快速下跌时,单步的不稳定性会导致 NaN 损失和收敛失败。
我们对原始时间序列应用对数变换,基于变换后的序列进行预测,在变换后的序列上计算 MSE 损失。
z←log(y)Train_Loss=1N∑j=1NMSE(z^lij+1:lij+lo,zlij+1:lij+lo)
z\leftarrow \log(y)\\
Train\_Loss=\frac{1}{N}\sum_{j=1}^N MSE(\hat{z}_{l_ij+1:l_ij+l_o},z_{l_ij+1:l_ij+l_o})
z←log(y)Train_Loss=N1j=1∑NMSE(z^lij+1:lij+lo,zlij+1:lij+lo)
- 对于 y 的小幅变化,计算 z=log(y)z=\log(y)z=log(y) 的 MSE 相当于计算百分比 MSE 损失。
- 对于 y 的大幅变化,对数函数的渐近特性导致 z 的变化比例小于 y 的变化比例,从而稳定了训练过程。
2.2.2 掩码策略
采用了一种类似于 TimesFM 中的掩码策略,旨在随机采样时间序列的起始点和终点。
- 时间序列被分割成长度不超过 max_context_length+output_lengthmax\_context\_length+output\_lengthmax_context_length+output_length 的序列。
- 从 [min_context_length,max_context_length][min\_context\_length, max\_context\_length][min_context_length,max_context_length] 区间内随机选取一个结束点 tendt_{end}tend,再从 [0,tend−min_context_length][0,t_{end}−min\_context\_length][0,tend−min_context_length] 区间内随机选取一个起始点 tstartt_{start}tstart。
- 选取 [tstart,tend][t_{start}, t_{end}][tstart,tend] 之间的点作为输入,模型在训练过程中输出接下来的 output_lenoutput\_lenoutput_len 个点,并在这些点上评估损失。
通常设置 min_context_len=128min\_context\_len=128min_context_len=128 以确保模型在训练时接触到有意义(足够长)的示例。
微调的掩码策略使其能够预测从 min_context_lengthmin\_context\_lengthmin_context_length 到 max_context_lengthmax\_context\_lengthmax_context_length 之间的任何价格数据序列。随机掩码在批次和训练步骤之间变化,通过训练模型从时间序列的不同片段进行预测,防止了过拟合。
→ 能够在一小时内完成对 TimesFM 在 8000 万个时间点上的微调,且未出现任何 NaN 损失。
三、实验
3.1 微调数据 & 超参数
数据集由股票、指数、外汇及加密货币的价格时间序列构成,时间粒度涵盖小时与日级别。主要数据来源包括 Yahoo Finance 和 Binance,通过公开的API接口获取数据。总计包含超过10万条时间序列和9000万个时间点。
采用75-25的比例划分训练集和验证集,随机采样自 2023 年前的同一时间序列子集,2023年及以后的数据被保留用于测试。

采用了带有线性预热和余弦衰减的随机梯度下降法(SGD),其峰值学习率为5e-4。

3.2 损失曲线
训练通常在原始损失值的70%左右趋于平稳,由于随机掩码增强,训练中存在噪声。将训练延长至 100 epoch 以上,或使用更大的学习率,会初步显示出过拟合的迹象。未来的工作可以使用更大的训练集、更强的数据增强或提前停止训练,以获得更好的泛化能力。

3.3 评估指标:准确率
- 在训练时,模型接收 input_length≤max_context_length=512input\_length\le max\_context\_length=512input_length≤max_context_length=512 的数据点(带掩码),并始终被要求预测接下来的 output_lengthoutput\_lengthoutput_length 个点,损失函数基于这些输出长度的点进行评估。
- 在推理时,模型持续接收 context_length=c≤512context\_length = c\le 512context_length=c≤512 个点(无掩码),并被要求预测接下来的点。然而我们可能希望生成任意数量的未来点,而不一定是128个。
模型的任务是分类价格是上涨还是下跌。
在每一步中,模型预测接下来的 hhh 个点,准确率在最后一个输出点 yc+hy_{c+h}yc+h 上评估。在下一步中,模型读取接下来真实的 hhh 个点,并基于 y^c+2h\hat{y}_{c+2h}y^c+2h 再次计算准确率。以此类推
准确率的计算基于每个推理步骤的分类结果:
Accuracy(y^c+kh,yc+kh∣y1:c+(k−1)h),∀1≤k≤K
Accuracy(\hat{y}_{c+kh},y_{c+kh}|y_{1:c+(k-1)h}),\forall1\le k\le K
Accuracy(y^c+kh,yc+kh∣y1:c+(k−1)h),∀1≤k≤K
KhKhKh 超过所需的总预测范围 HHH,固定 H=128H=128H=128,变化 h∈{2,4,8,…,128}h\in\{2,4,8,…,128\}h∈{2,4,8,…,128}。

3.4 评估指标:F1-score
F1-score 是精确率(Precision)和召回率(Recall)的调和平均数。
采用 Macro F1-score 解决 F1-score 的类别不平衡问题,即分别以每个类别作为“正类”计算F1分数后取算术平均。

3.5 模拟交易
基础策略
交易者首先选择一个持有期 h=horizon_lenh=horizon\_lenh=horizon_len,,将上下文长度定义为 c=512c=512c=512(全程使用最大上下文长度)。交易是基于提前 hhh 步的预测进行的。
在交易日 iii 之后,交易者将时间序列 Pi−c−1:i={Pi−c−1,Pi−c,…,Pi}P_{i−c−1:i}=\{P_{i−c−1}, P_{i−c},…,P_i\}Pi−c−1:i={Pi−c−1,Pi−c,…,Pi} 输入模型,输出对 Pi+1:i+hP_{i+1:i+h}Pi+1:i+h 的预测。
- 如果 Pi+h>Pi+1P_{i+h}\gt P_{i+1}Pi+h>Pi+1,在第 i+1i+1i+1 天买入,在第 i+hi + hi+h 天卖出;
- 如果 Pi+h<Pi+1P_{i+h} \lt P_{i+1}Pi+h<Pi+1,在第 i+1i+1i+1 天卖出,在第 i+hi + hi+h 天买入。
在所有交易日 iii 中重复执行。若交易篮子中共包含 TTT 项资产,则所有下达的订单每单价值均为 1(h−1)T\frac{1}{(h−1)T}(h−1)T1。确保了在给定一天内所下订单的 l1 范数不超过 1h−1\frac{1}{h−1}h−11(旨在确保即便在持有期内每笔订单均为“买入”时也有足够的资本来执行所有订单),且在整个持有期内不超过 1。

市场中性策略
对基本策略进行均值归零,每天减去平均头寸(−1/3、1/3、1/3→−4/9、2/9、2/9-1/3、1/3、1/3→-4/9、2/9、2/9−1/3、1/3、1/3→−4/9、2/9、2/9)。
不是限制每日预算,而是将每日风险敞口限制在1/(h−1)1/(h − 1)1/(h−1)。


模型比较
h=128 下的比较



型比较
h=128 下的比较
[外链图片转存中…(img-mNfxBMP6-1739633798927)]
[外链图片转存中…(img-E7ZmSfO7-1739633798927)]
[外链图片转存中…(img-FrtH3TYT-1739633798928)]
更多推荐


所有评论(0)