前言
股市的变化难以预测,任何微小的变化都可能对股票走势产生影响,这种不确定性让投资者们感到困惑。因此,研究者们开始关注目前备受关注的大型模型技术,他们试图利用这些技术来高效地处理和分析大量的股市数据,从中挖掘出隐藏的规律和趋势。他们希望能够迅速捕捉到新信息对市场的即时影响,进而预测未来股价的走势,并为投资者提供决策支持。
近期,WWW2024会议上发布了一项关于使用大型模型进行股票预测的研究,该研究不仅实现了16.6%的收益率,还提供了决策的解释。这一研究致力于通过有效处理和分析大量的股市数据,挖掘隐藏的规律和趋势,从而预测未来股价走势。
论文地址:https://arxiv.org/pdf/2402.03659.pdf
传统的非生成式深度学习模型难以解释股票预测,而尽管大型语言模型(LLMs)能够生成人类可读的解释,但在股票预测方面仍然面临挑战。为了应对这一问题,作者提出了Summarize-Explain-Predict(SEP)框架,该框架利用自我反思的代理和Proximal Policy Optimization(PPO)方法来训练LLM以生成可解释的股票预测。通过SEP框架,可以优化LLM在股票分类任务中的预测准确性和Matthews相关系数,并在投资组合构建任务中证明其有效性。
简介
金融市场中的有效市场假设(EMH)认为股票价格反映了所有可获得的信息,并且只对新信息做出反应。为了预测未来的股票价格变动,投资者需要分析来自外部数据源的大量信息,但这对金融专业人士来说是一个沉重的工作负担。因此,许多人开始研究并尝试利用深度学习技术进行股票预测。然而,传统的深度学习方法通常被视为黑盒模型,在股票预测中难以解释其预测结果,这降低了它们在实际应用中的可用性。
最近,大型语言模型(LLMs)为解决这个问题提供了新的思路。然而,使用LLMs进行可解释的股票预测仍然面临着挑战。首先,社交文本的影响因素多样,需要模型具备权衡新信息影响的能力。其次,引入解释组件会使问题更加复杂,需要大量的金融专家样本来训练强化学习模型。这需要耗费大量的人力和成本,不利于规模化应用。
本文介绍了一个名为Summarize-Explain-Predict (SEP)的框架,用于自动化生成可解释的股票预测。该框架利用自反思代理和Proximal Policy Optimization (PPO)算法,通过自学习的方式让一个LLM模型学会如何生成股票预测和解释其推理过程。该框架通过将大量文本输入数据转化为要点形式的摘要信息,让LLM模型能够理解和权衡不同信息的影响,并生成最可能的股票预测和解释。实验证明,该框架在股票分类任务中的预测准确性和Matthews相关系数方面优于传统的深度学习和LLM方法。此外,该框架还可以应用于投资组合构建任务,生成可解释的股票权重,并通过投资组合指标验证其有效性。
文本的主要贡献包括:
- 探索了在没有专家注释样本的情况下,教授LLM模型如何以可解释的方式权衡多个文本信息的局限性;
- 提出了一种利用自反思代理和PPO技术的解决方案,使LLM模型能够自主学习如何生成可解释的股票预测;
- 通过实验证明了SEP框架的有效性,并展示了经过微调的LLM模型在预测性能和解释质量方面的改进。通过在多个股票上生成定量权重来解决投资组合任务,并通过投资组合指标验证了该方法的有效性。
算法架构
文本分析在股票预测中的应用历程:早期研究使用不同的文本表示方法,如词袋、名词短语和命名实体,后来被结构化信息所取代。最近的研究则更注重增加其他形式的信息,如音频数据和公司关系图。
大型语言模型在金融领域的应用:BloombergGPT是最著名的金融领域的大型语言模型之一,其他研究也尝试使用自己的金融领域语言模型。最近的研究则探索使用大型语言模型通过指导调整或预训练模型来进行股票预测。本文则通过增加自我反思代理和PPO训练器来优化股票预测的语言模型。
实现方法
本文介绍了可解释的股票预测任务及其相关数据,并提出了SEP框架,包括Summarize模块、Explain模块和Predict模块。Summarize模块从非结构化文本输入中生成事实信息摘要,Explain模块通过自我反思迭代生成股票预测的解释,Predict模块则利用自动生成的注释样本微调LLM并生成置信度预测。这一框架的提出旨在提高股票预测的解释性和可靠性,为投资者提供更准确、更易理解的预测结果。
预备工作
本文旨在利用给定股票的文本语料库,预测下一个交易日的股票价格变动,并提供易于理解的解释。文本语料库包含了过去T天的文本数据,我们的目标是生成一个二进制的股票价格变动预测以及相应的解释。每个语料库都包含了变量数量的非结构化文本,我们需要从中提取要点信息。
我们构建了一个新的数据集,采用了ACL18 StockNet数据集的数据收集方法。原始数据集的时间跨度为2014年至2016年,我们收集了更新版本,覆盖了2020年至2022年。由于行业数量的扩大和推文数量的指数增长,我们选择了11个行业中排名前5的股票,总计55只股票。股价数据来源于Yahoo Finance,而推文数据则通过Twitter API收集。鉴于每天的推文数量庞大,我们使用了BERTopic进行聚类,以识别每天的代表性推文。这些代表性推文将作为所有模型的文本输入。
摘要生成
本模块的目标是从非结构化的输入文本中生成摘要信息。目前的大型语言模型已经具备了超越人类的摘要能力。为了避免超出字符限制,我们首先利用大型语言模型生成每天事实信息的点形式摘要。此外,在提示中,我们还提供了两个示例。
X
t
s
=
M
X
(
s
,
C
t
s
)
.
(
1
)
{\bf X}_{t}^{s}={\bf M}_{X}\left(s,C_{t}^{s}\right).\quad(1)
Xts=MX(s,Cts).(1)
解释生成
Explain模块的目标有两个方面:虽然模块的关键目标是为股票预测生成清晰的解释,但生成的解释也可以作为推理步骤,让LLM进行自我反思,以改进自己的预测。
解释提示
Explain模块的提示包含两个变量输入:指定的股票以及从上一个模块生成的提取的信息序列。给定这些输入,LLM生成响应第二天的价格预测,以及解释。我们将其形式化为:
Y
t
s
=
M
E
(
s
,
X
t
−
T
s
,
⋅
⋅
⋅
,
X
t
−
2
s
,
X
t
−
1
s
)
.
(
2
)
\mathcal{Y}_{t}^{s}=M_{E}\left(s,X_{t-T}^{s},\cdot\cdot\cdot,X_{t-2}^{s},X_{t-1}^{s}\right).\quad(2)
Yts=ME(s,Xt−Ts,⋅⋅⋅,Xt−2s,Xt−1s).(2)
与之前的摘要提示类似,我们从数据集中选择两个案例,并手动合成响应轨迹以用作少样本样本。此外,选择的两个示例案例具有一个积极和一个消极的运动标签,以避免任何多数标签偏差。
自我反思的过程
目前的LLM没有经过生成股票预测的训练,这可能会导致在上一步中错误地生成注释示例。为了解决这个问题,我们将LLM部署为一个自主代理,通过一个自我反思循环,可以迭代地改进其过去的响应。
对于不正确的样本,然后我们给定其之前的输入和输出提示LLM为每次迭代生成反馈,我们将其称为短期记忆。反馈应该清楚地解释它在之前的推理中哪里出了问题,并提出一个高级计划来减轻下一次迭代的失败。总体的形式如下:
r
t
,
i
s
=
M
R
(
s
,
X
t
−
T
s
,
⋯
,
X
t
−
2
s
X
t
−
1
s
,
Y
t
,
i
s
)
.
(
3
)
\mathbf{r}_{t,i}^{s}=M_{R}\left(s,\mathbf{X}_{t-T}^{s},\cdots,\mathbf{X}_{t-2}^{s}\mathbf{X}_{t-1}^{s},{\cal{Y}}_{t,i}^{s}\right).\quad(3)
rt,is=MR(s,Xt−Ts,⋯,Xt−2sXt−1s,Yt,is).(3)
对于每次迭代,LLM从其失败中吸取的教训,添加到其长期记忆。
y
t
,
i
s
=
M
E
(
s
,
X
t
−
T
s
,
⋅
⋅
⋅
X
t
−
2
s
,
X
t
−
1
s
,
R
t
,
i
s
)
.
(
4
)
\mathcal{y}_{t,i}^{s}=M_{E}\left(s,\mathbf{X}_{t-T}^{s},\ \cdot\ \cdot\cdot\mathbf{X}_{t-2}^{s},\mathbf{X}_{t-1}^{s},\mathbf{R}_{t,i}^{s}\right).\quad(4)
yt,is=ME(s,Xt−Ts, ⋅ ⋅⋅Xt−2s,Xt−1s,Rt,is).(4)
模型微调
本文利用类似RLHF的三步过程来微调LLM。在训练过程中,我们使用反射的二进制评估来选择“更好”的响应,而不是人工反馈。
在第一步中,我们收集了演示数据,这些数据是从初始迭代中正确预测的样本中提取的。这些样本没有对应的“错误”回答,因为它们仅仅是从最初的提示中提取的。这些样本被用于进行有监督微调。
在第二步中,我们收集了包含成对正确和不正确的响应数据。这些数据用于训练奖励模型,该模型学习将更高的奖励分数分配给正确的回答。
L
(
θ
)
=
−
E
(
x
,
y
w
,
y
l
,
s
,
t
)
∼
D
[
log
(
σ
(
r
θ
(
x
t
s
,
y
w
,
t
s
)
−
r
θ
(
x
t
s
,
y
l
,
t
s
)
)
)
]
(
5
)
{\mathcal{L}}(\theta) =-E_{(x,y_{w},y_{l,s,t)}}{\sim}D\left[\log\left(\sigma\left(r_{\theta}\left(\mathbf{x}_{t}^{s},\mathbf{y}_{w,t}^{s}\right)-r_{\theta}\left(\mathbf{x}_{t}^{s},\mathbf{y}_{l,t}^{s}\right)\right)\right)\right]\quad(5)
L(θ)=−E(x,yw,yl,s,t)∼D[log(σ(rθ(xts,yw,ts)−rθ(xts,yl,ts)))](5)
第三步,使用PPO对训练好的策略进行优化。我们首先使用监督策略初始化模型,并使用它为从整个数据集随机选择的样本生成预测。接下来,奖励模型用于为每个响应生成奖励。然后,我们尝试通过最大化整体回报来优化PPO模型。
L
(
ϕ
)
=
−
E
(
x
,
y
^
,
s
,
t
)
∼
D
π
ϕ
R
L
=
[
r
θ
(
x
t
s
,
y
^
t
s
)
−
β
l
o
g
π
ϕ
R
L
(
y
^
t
s
∣
x
t
s
)
π
S
F
T
(
y
^
t
s
∣
x
t
s
)
]
(
6
)
\mathcal{L(}\phi)=-{{{\mathrm{E}}}}\big(\mathbf{x,}\hat{y},s,t\big)\sim\mathcal{D}_{\pi_{\phi}^{R L}}=\left[r_{\theta}\left({\bf x}_{t}^{s},\hat{\mathcal{y}}_{t}^{s}\right)-\beta\mathrm{log}\frac{\pi_{\phi}^{RL}\left(\hat{\mathcal{y}}_{t}^{s}|{\bf x}_{t}^{s}\right)}{\pi^{SFT}\left(\hat{\mathcal{y}}_{t}^{s}|{\bf x}_{t}^{s}\right)}\right]\quad(6)
L(ϕ)=−E(x,y^,s,t)∼DπϕRL=[rθ(xts,y^ts)−βlogπSFT(y^ts∣xts)πϕRL(y^ts∣xts)](6)
我们注意到,目标包括一个附加项,惩罚训练策略和监督策略之间的KL分歧,这用于阻止策略坍缩成单一模式,并防止其生成与原始参考模型太不同的响应。
基于置信度抽样
在推理过程中,首先使用预训练的LLM对非结构化输入文本进行总结。然后,我们使用经过训练的策略从总结的事实生成第二天的预测。为了生成预测,我们使用best-of-𝑛采样器,在该采样器中,我们生成𝑛响应,并使用奖励模型的分数来选择最佳响应。
实验
本文评估了SEP模型在股票预测任务中的性能,并回答了三个研究问题:
Q1:SEP模型在分类准确性和解释质量方面如何与传统深度学习和其他LLM方法相比?
Q2:每个提出的组件如何帮助提高SEP模型的性能?
Q3:SEP框架是否足够通用,可用于其他金融相关任务,如可解释的投资组合构建?
实验设置
基线:
作者将SEP模型与传统深度学习模型以及经过微调的大型语言模型进行比较,并使用预测准确率和Matthews相关系数作为评估指标。基准模型包括:VAE+Attention、GRU+Attention、Transformer、GPT-3.5-turbo、Vicuna-7b-v1.5、FinGPT-Forecaster。
此外,SEP框架的一个关键特征是Summarize模块,它从非结构化推文中提取关键信息,供LLM基于其预测。对于LLM实验,我们报告了删除这些案例之前和之后的结果。在实践中,这可以被视为LLMs的一个好处,因为它能够主动判断它没有足够的信息来进行预测,投资者可以选择寻找更多的信息来进行分析,或者不进行当天的投资。
实现细节:
我们使用OpenAI GPT-3.5-turbo-16k模型对每个行业的前1名股票进行训练,其余股票使用Vicuna-13b-v1.5-16k模型。预测模型训练时使用Vicuna-7b-v1.5-16k进行训练,LLM模型使用trl进行训练。所有组件的训练都使用4位量化的LoRA进行。在推理时,我们采用n=4进行n-shot采样。最佳响应将作为选择的输出进行最终比较。
效果对比:
在预测准确性方面,SEP模型在使用GPT生成的解释上表现最佳,MCC指标也优于其他模型。在解释生成方面,SEP模型通过自我反思和强化学习,能够生成更好的解释,提高了模型的可解释性。
根据我们的分析,我们可以得出以下结论:
-
通用性指标(如信息一致性)得分最高,这使我们能够比较不同语言模型的相对性能。
-
尽管预测准确率仍然是首要指标,但即使预测错误,所有语言模型都能提供高质量的解释,这为投资者提供了更多的信息以做出决策。
-
SEP模型在所有指标上得分最高。通过自我反思和强化学习,SEP模型能够内在地教导模型更好地比较因素以提高预测准确性,这使其在股票预测任务中表现出色。
消融分析:
本文评估了三个组件的效率:Summarize、Explain和Predict模块。Summarize模块通过提取重要的事实信息来减少输入文本的噪音和长度。Explain模块通过自我反思生成注释样本,提高了模型的预测准确性。Predict模块的消融研究表明,去除非信息性文本可以提供最佳结果。同时,使用最多共享的文本比随机抽样更好。最后,Explain模块的自我反思可以生成更多的决定性和正确的注释样本,用于Fine-tuning。
在指导调整过程中,加入解释组件(从SEP(二进制)到SEP(无PPO))平均提高了6.9%的准确性,可能是因为调整LLM以生成解释,从而引发LLM的推理过程,提高了预测准确性。
指导调整变体(SEP(无PPO))与基础模型(Vicuna模型)的结果非常相似,可能是因为样本在反射迭代之前(即图4中的步骤1)被采集,这些样本是基础模型已经能够处理的“简单”样本。
PPO强化学习(从SEP(无PPO)到SEP(1-shot))的改进最大,平均提高了14.8%,强调了PPO训练器在教授LLM更有效地生成股票预测方面的能力。此外,n-shot采样使用学习的奖励模型加权选择最佳输出,平均改进3.0%(从SEP(1-shot)到SEP(Ours)),进一步证明了PPO过程中训练的奖励模型的有用性。
投资组合优化
SEP框架能够教会LLM以二进制方式权衡输入文本中的信息。通过使用SEP框架对LLM进行微调,我们进一步探索了其泛化能力,使其能够在定量上权衡其自动生成的解释中的信息,以生成股票投资组合权重。我们使用与上述相同的方法对LLM进行微调,但这次输入信息是每天篮子中所有生成的解释。为了减少LLM需要权衡的股票数量并防止负权重(从而设置无卖空约束[37]),我们只筛选出预测为正的股票。然后,我们提示LLM根据每只股票的前景生成投资组合权重。我们将两组生成的权重输入到PPO训练器中,选择利润更高的一组作为“更好”的响应。我们比较了由三种不同LLM生成的投资组合的表现:GPT-3.5-turbo、Vicuna和我们微调的SEP模型。我们还包括了三个基准:1/N投资组合(篮子中的11只股票以相等权重购买)[14]、标准普尔500指数和仅买入预测为正的股票(Positive-Only)。我们使用四个指标评估投资组合的表现:总收益(简单地将每天的收益相加)、累计收益(评估期间重新投资任何额外的利润或损失后的最终收益)、利润的标准差和年化夏普比率[45]。从表5中可以看出,仅买入预测为正的股票的投资组合已经展现出良好的表现。
我们可以观察到:
标准差结果显示,1/N和市场指数的投资组合方法包含更多的股票,能够更均匀地分散股价波动,但它们的夏普比率仍然低于其他模型,表明风险回报比较低。
预训练的LLM模型(如GPT-3.5和Vicuna)在大多数指标上表现优于仅考虑正面因素的投资组合,显示了使用LLM在信息之间进行权衡以产生投资组合权重的能力。
我们的SEP模型在大多数投资组合指标上表现优于其他方法,并在标准差方面达到可比较的性能,展示了我们SEP框架的有效性。此外,LLM模型能够解释生成的投资组合权重,增加了结果的可解释性和可信度。