论文导读: Stock Movement Prediction from Tweets and Historical Prices

本文提出了StockNet,一个基于深度生成网络的模型,用于结合推特内容和股票历史价格预测股票走势。StockNet利用循环变分下界和神经变分推断处理随机性和时间依赖性,通过多任务学习捕捉预测依赖性。实验表明,StockNet在股票趋势预测中优于传统方法和技术分析,验证了社交媒体信息和历史价格对预测效果的积极影响。

这篇文章主要讲的是利用推特内容和股票历史价格推测股票走势。

Abstract

股票市场是随机的,预测是基于混沌的数据,本文提出一种深度生成网络–基于文本和价格信号,该模型介绍了recurrent,连续的潜在变量(continuous latent variable)来更好的处理随机性。然后利用神经变分推断(neural variational inference)来解决难以处理的后验推理,他们也提供带有时间辅助的混合目标函数,来灵活捕捉预测依赖。

1. Introduction

在NLP中,新闻和社交媒体是两大主要的信息资源,而他们对应的模型通常是有区别的(discriminative)。传统方法使用特征工程,而随着神经网络的出现,事件驱动的方法 和 结构化的事件 表示开始被研究起来。更有直接利用层次attention对新闻序列进行直接挖掘的。但股票预测还是很难,因为他被新闻时间随机影响着,从而导致一种随机游走(random-walk)的特征。相比于判别式(discriminative)模型,生成式(generative)模型在描绘从市场信息到股票信号的生成过程并引入随机性方面具有天然优势。然而,这些模型用词袋来代表混乱的社会文本,并使用简单的离散潜变量。本质上,股票走势预测是一个时间序列问题。 现有的 NLP 研究没有解决运动预测之间时间依赖性的重要性。例如,当一家公司遭遇重大丑闻时 d1 交易日,一般到 d2 日,其股价在接下来的交易日会出现下跌趋势,即 [d1, d2]。
如果股票预测器可以识别这种下降模式,则可能有利于 [d1, d2] 期间的所有走势预测。 否则,此区间的准确性可能会受到损害。 这种预测依赖性是公共信息的结果,例如 公司丑闻,需要随着时间的推移来被吸收(影响的滞后性?),而这种预测依赖性也很大程度上在时间很接近的预测中被共享。

旨在解决上述在高市场随机性、混乱市场信息和时间相关预测建模方面的突出研究空白, 本文提出StockNet, 一个深度生成模型。我们提出了一种具有变分架构的新型解码器,并为端到端训练推导出一个循环变分下界。
为了全面的探索市场信息,StockNet直接学习没有预-提取 结构化的事件的data。我们通过参考基本信息来建立市场资源,比如推特内容,科技特征,历史股价等。为了准确描述预测依赖性,我们假设股票的运动预测可以从学习在滞后窗口中预测其历史运动中受益。我们建议将交易日对齐作为框架基础(第 4 节),并进一步提供新的多任务学习目标(第 5.3 节)。

2. Problem formulating

我们的目标是在目标交易日 d 预测预选股票集合 S 中目标股票 s 的走势。我们使用由相关社交媒体组成的市场信息语料库 M, 比如推特、历史价格, 区间lag为[d-Δ\DeltaΔd, d-1], 其中Δ\DeltaΔd是固定长度的lag。然后只有两种走势,1表示升,0表示降:

Y=1(Pdc>Pd−1c)Y=1(P_d^ c > P_{d-1}^ c)Y=1(Pdc>Pd1c)
其中pdcp_d^cpdc表示针对影响股价的公司行为调整的调整后收盘价。调整后的收盘价被广泛用于预测股价 或金融波动。

3. Data Collection

金融里,股票被分为9类:
Basic Materials, Consumer Goods, Healthcare,
Services, Utilities, Conglomerates, Financial, Industrial Goods and Technolog
由于高交易量股票往往在 Twitter 上被更多地讨论,我们选择了 88 只股票从 2014 年 1 月 1 日到 2016 年 1 月 1 日的两年价格变动,这些股票来自Conglomerates (综合企业集团)的所有 8 只股票和 其他8个行业资本规模排名前10的股票。我们观察到有许多目标的移动比率非常小。 在三向股票趋势预测任务中,通过设置股价变化的上限和下限,将这些变动归为另一个“保留”类别。由于我们针对可从社交媒体识别的股票变化的二元分类,我们设置了两个特定的阈值,0.5%和0.55%,并且简单地移除掉了38.72%的移动百分比介于两个阈值之间的选择目标。移动百分比≤-0.5% 和 >0.55% 的样本分别标记为 0 和 1。选择两个阈值来平衡两个类别,从而在整个数据集中产生了 26,614 个预测目标,其中两个类别分别占 49.78% 和 50.22% 。对数据进行划分:从2014年1月1日到2015年8月1日的20339个数据(movements)用作training,2015年8月1到10月1的2555个数据用来validation,2015年10月1日到2016年1月1日的3720个数据用来Testing。

对于推特数据,他们使用了正则表达式来踢去股票相关的文本,具体怎么操作可以看文章,不再介绍。

4. Model Overview

我们概述了数据对齐(data alignment)、模型分解(model factorization)和模型组件(model component)。
如第 1 节所述,我们假设预测交易日 d 的走势可以受益于预测其前交易日的走势。 然而,由于样本独立的一般原则,直接在具有时间接近的目标日期的样本之间建立连接对于模型训练是有问题的。作为替代方案,我们注意到,在目标交易日为 d 的样本中,很可能存在滞后期 d 以外的其他交易日,可以模拟接近 d 的预测目标。受启发于这个观测和多任务学习,我们不只是对d天做预测,而是所有存在于lag中的交易日。比如,如下图Figure-2,要预测8月7号并且lag=5天,那么从8月2号到8月6号都应该预测,这些预测之间的关系可以因此被捕获在样本范围内。
在这里插入图片描述
考虑到lag中并不是每一天都是交易日,比如周末和假期,他们只把交易日当作最基础的单位,而不是按照正常日历中的日子来计算。为此,我们首先找出一个样本中引用的所有T个符合条件的交易日,换句话说,存在于时间间隔内[d−Δd+1,d][d-\Delta d +1, d][dΔd+1,d],为清楚起见,在一个样本的范围内,我们将这些交易日索引为t∈[1,T]t \in [1,T]t[1,T],并且他们中的每一个都被映射到交易日dtd_tdt上。于是该文提出交易日匹配(trading day alignment),会把这些包括推特内容和价格信息的input匹配到这T个交易日上。特别地,在第t个交易日,他们会使用Corpus语料库MtM_tMt[dt−1,dt][d_{t-1}, d_t][dt1,dt]的市场信号以及dt−1d_{t-1}dt1中的股票信息ptp_tpt,用来预测dtd_tdt的movements yty_tyt (涨 or 跌)。在Figure2中他们展示了一个匹配样本,并且可以产生一个预测序列y∗=[y1,...yT−1]y^* = [y_1, ... y_{T-1}]y=[y1,...yT1

### LLMFactor Method for Extracting Profitable Factors through Prompts in Explainable Stock Movement Prediction LLMFactor 是一种利用大语言模型(LLM)通过提示(prompt)来提取可解释股票波动预测中的盈利因子的方法。这种方法的核心在于结合了大语言模型的强大知识库和金融领域的特定需求,以实现对股票市场趋势的精准预测与深入理解。 在 LLMFactor 中,提示工程扮演着至关重要的角色。通过精心设计的提示,可以将复杂的金融数据转化为文本形式,使得语言模型能够处理这些信息并生成有价值的见解。例如,(Xue and Salim, 2023) 提出了一种基于提示的方法,将数字输入和输出转换为文本提示,将预测任务定义为句子到句子的转换。这种方法允许将语言模型直接应用于预测任务。对于金融时间序列预测,(Yu et al., 2023) 使用提示从 LLM 生成摘要和关键短语,结合多种数据源来增强时间序列预测。他们的方法为股市趋势提供了宝贵的见解。然而,他们的提示包含过多的信息,导致 LLM 的响应相对缺乏细节 [^3]。 尽管 LLMFactor 在实践中展现出了巨大的潜力,但它也面临着一些挑战。一方面,LLMFactor 对不同语言之间存在一定的性能差异,这可能影响其在全球范围内的应用效果。另一方面,在预测过程中,LLMFactor 也会出现一些不确定性,这就需要未来对其鲁棒性进行改进的研究 [^2]。此外,为了进一步提高 LLMFactor 对事件的理解和分析能力,如果能更充分地应用上 LLM 的知识储备,尤其是金融专业知识,或许还能取得更好的预测结果 [^2]。 从实际应用的角度来看,LLMFactor 方法不仅有助于提升股票市场预测的准确性,还能够在大数据时代帮助企业更好地处理海量数据,提高数据分析和决策的准确性 [^4]。掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求,从而推动金融行业的创新发展。 ```python def example_prompt_engineering(data): """ 示例函数演示如何将金融数据转换为文本提示。 参数: data (dict): 包含金融数据的字典,如价格、成交量等。 返回: str: 转换后的文本提示。 """ prompt = f"当前股票价格为 {data['price']} 元,成交量达到 {data['volume']} 股。" return prompt ``` 通过上述示例代码,可以看到如何将具体的金融数据(如价格和成交量)转换为一段自然语言描述,进而作为提示输入给大语言模型,以便于模型进行后续的分析和预测。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值