最新NLP研究 | Twitter上的情绪如何预测股价走势(附代码)

前言

经常有人说,没有代码的策略都是耍流氓!

当然这只是个玩笑。公众号力求有关量化策略的文章都配代码,这样。可以让大家亲自动手去学习研究。

我们以最快速度的把最新研究成果分享给大家。很感谢三年来大家对我们的支持、鼓励、好的建议!

结果不重要,重要的是过程!

Show me u code,come on!

获取全部代码、数据集。见文末

NLP for Quant 往期系列

NLP for Quant Ⅰ

NLP for Quant Ⅱ

NLP for Quant Ⅲ

正文

贪婪和恐惧是股市的两大驱动力。事实证明,社交媒体信息中的积极和消极情绪,比如Twitter,可用于预测股票价格的日常变动或走势。

尽管新闻肯定会影响股市价格,但公众情绪状态也可能发挥同样重要的作用。我们从心理学研究中得知,情感和信息一样,在人类的决策过程中扮演着重要的角色。行为金融学进一步证明,金融决策在很大程度上是由情绪驱动的。因此我们有理由假设,公众情绪能够像新闻一样推动股市的价格。

这里有一些研究可供大家参考:

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

论文地址:

https://link.springer.com/article/10.1057/s41265-016-0034-2

论文地址:http://blueanalysis.com/iulianserban/Files/twitter_report.pdf

论文地址:http://cs229.stanford.edu/proj2011/GoelMittal-StockMarketPredictionUsingTwitterSentimentAnalysis.pdf

本文整个分析过程都是基于Python编写

普及一个知识:

1、Twitter(推特):是国外的一个社交网络及微博客服务的网站。

2、Tweet:是用户发到Twitter上的信息,为了接收或者发送Tweets首先要注册一个免费的Twitter帐号。

3、微博(MicroBlog):是一个基于用户关系的信息分享、传播以及获取平台,用户可以通过WEB、WAP以及各种客户端组件个人社区,以140字左右的文字更新信息,并实现即时分享。

假设

今天的Tweet带有正面或负面情绪,并包含一个或几个cashtags可以影响股票明天的走势。如果今天负面情绪占主导地位,那么明天的股票价格预计会下跌,反之则会上涨。Twitter账户的粉丝数量也是一个主要因素。一个账户的关注者越多,推文的影响力就越大,他们的情绪对股价的影响也越大。

cashtags是什么?

Twitter的一项功能允许用户点击股票代码,看看“Twitterverse”在说些什么,,比如$GOOG、$AAPL或$FB。该系统的工作方式Twitter众所周知的#hashtags相同。Cashtags要求“$”后面跟着股票代码。

公众号补充:

一个通用标准$符号被纳入了twitter的官方标记(cashtag),Twitter宣布这是包含了股票跟踪链接,用户点击股票信息便会显示到搜索页面上。

国内的雪球早已将$标记融入自己的微博服务中,且这些投资社区对$标记利用得更好。点击$标记后可显示出对应公司/股票的实时股价等交易信息及其他投资者对于这支股票的讨论。

数据集

从2016年3月28日到2016年6月15日,79天内收集了大约100万条推文,其中提到了纳斯达克100指数成分股公司的cashtags。这些数据由followthehashtag.com提供,这是一个Twitter搜索分析和商业智能工具。

https://www.followthehashtag.com/datasets/nasdaq-100-companies-free-twitter-dataset/

这里有两个带有cashtags的负面和正面推文的例子,分别代表苹果、谷歌和其他少数公司。

在数据中的100只原始股票中,不得不因为各种数据特定的原因而减了15只,比如日期上的不一致,或者仅仅是因为关于cashtags的推文太少,也就是说,甚至连每天的推文都没有。排除在外的人包括Apple,Tesla和Yahoo。

最终分析中包含推文最多的cashtags是(前12名):

在这79天的时间里,100只股票cashtags的平均推文数为6446条,即每只股票/cashtags每天有81条推文。

衡量 tweets上的情绪

为了提取每条 tweets的情绪,我们使用了VADER,这是一个现成的Python机器学习库,用于自然语言处理,特别适合阅读tweets的情绪。

地址:https://github.com/cjhutto/vaderSentiment

VADER更注重大写字母的识别,还能识别俚语、感叹号和最常见的表情符号。情绪得分从极负(-1)到极正(+1),中性为0。比如:

为tweet数据创建每日平均值

在将每条推文与其情绪相结合后,将其乘以该帐户的关注者数量。这样,在最终的模型中,更多“有影响力”账户的推文情绪将得到了更多的权重。在此之后,这些推文(平均每条cashtags有6500条)被压缩到75行,其中包括每条情绪的每日平均值,然后将其与相关股票的每日价格变化进行比较。

收集股票数据

使用Python的pandas-datareader库,从Yahoo Finance下载股票的每日数据。在股票数据中添加每日百分比变化列,并对周末缺失的数据进行插值之后,现在可以合并这两个数据集,即推文的情绪和股票的每日变化。

一个具有“Pct_change_stock”和“compound_multiply”两个特征的新dataframe,以及一个添加标签数据列“Buy/Sell”,现在已经准备好在训练中使用。

第一部分流程图分析

股票数据(左箭头)Twitter数据(右箭头)

机器学习分类器

由于这是一个二元分类任务,即结果要么是“买入”,要么是“卖出”,因此我们使用了6种这样的算法:

  • KNN
  • Logistic回归
  • 支持向量机(SVM)
  • 朴素贝叶斯
  • 决策树
  • 随机森林

训练/测试数据分割

在74天可用的数据中,每只股票59天(80%)的数据用于训练,15天(20%)的数据用于测试每种算法的准确性。

交叉验证

由于数据量有限,仅使用20%的数据(15天)和80%的训练数据(59天)进行测试可能不够有代表性。为了避免训练/测试分割不完全随机的可能性,对数据进行交叉验证,这样得到每个算法精度更具代表性的结果。训练数据进一步分成10个子集,每个子集都与其他9个子集进行测试。

第二部流程图分析

结果

将85只股票分别通过6个二元分类器和10倍交叉验证后,结果如下。平均每个分类器的准确率都在50%以上这意味着,推特上的情绪具有预测力,至少比抛硬币强。抛硬币的平均准确率为50%,所以准确率超过50%在一定程度上证明了模型获得“非凡”收益的能力。更重要的是,对于许多股票,模型的准确性/预测能力在65-75%之间!

每个cashtag分类器的准确率(前5名):

在下面的图表中,红线表示50%的准确度限制。

以下是所有分类器的平均准确率:

接下来,我们将简单买入持有策略的盈亏与使用模型实现的盈亏进行了比较。令我们惊讶的是,在为期四周的模拟交易中,大多数模型的利润都远超我们的预期!

下载tweets

我们选择了纳斯达克的8只股票进行模拟,三月模拟交易的推文总数接近7200,平均大约800每条股票的推文。

tweet数据是通过使用其Developer API“抓取”Twitter而收集的。我们在2016年3月下载了所有包含cashtags $AAL、$ADP、$CERN、$EXPE、$FISV、$TMUS、$TXN和$WDC的tweets。

下载和准备其余的数据

前面我们详细解释了后续步骤的过程,下面简要的做一个回顾:

1、推文通过情绪分析算法运行,每个推文都有一个情绪;积极的,中性的或消极的。

2、每条推文都乘以该账户的关注者数量。这样,在最终的模型中,更“有影响力”账户的推文情绪就会得到更多的权重。

3、Tweet数据被压缩到28行,包含每一个情绪的日平均,并与同期相关股票的日价格变化进行比较。

4、股票数据下载并添加“每日变化百分比”列中。

5、Tweet和股票数据相结合,并添加一个标签列,即“买进或卖出”。这就是模型试图预测的内容。换句话说,基于今日推特情绪的预测值,预测一只股票应该在明天买进还是卖出?

然后通过比较买入持有策略与六种不同模型来使用这些数据集,每个每日预期的每日股票价格变动是使用模型预测的。

进行模拟交易2019年3月

对8只股票分别采用买入并持有策略,与其他6种基于二分类算法策略进行比较。

每个模型都使用2016年的原始推文进行训练。然后给出了每日建议:明天开盘时买入或卖出,收盘时卖出或买入。

看下图的策略结果:

总结

总体而言,基于情感的twitter策略在近60%的模拟案例中击败了买入并持有策略。

除去两个表现最差的模型,决策树和随机森林,结果得到了进一步的改进。在三分之二的案例中,“买入并持有”不理想。

如果只遵循表现最好的模型Logistic回归,那么在4只股票中每3只股票就会盈利!

进一步完善模型思路

1、模型只有75天的数据用于训练和测试。如果情绪真的具有预测能力,那么从更长的、甚至更近的时期添加更多数据,可能会显著改善结果

2、为了使每周仅5天的股票数据与每周7天的twitter数据相吻合,需要对周末调整后的收盘价进行插值。虽然考虑了特征工程,但周末创建的股票价格是人为的,可能会扭曲结果。考虑到推文对周一股市走势的影响,或许周五到周日的推文应该以某种方式组合在一起。

3、可以考虑将推特情绪的结果与其他技术结合使用,比如LSTM神经网络进行时间序列分析,总是提前一天做出预测

4、尝试使用其他一些现成的模型,比如TextBlob,而不是VADER来提取tweet情绪。或者更好的方法是,通过建立一个神经网络来训练你的情绪分类器,然后用你自己的数据来训练它,比如这里的数据;1.6mio将每一行标记为0=负,2=中性,4=正。

5、时间对最终结果的影响有多大?在模拟中,最终的P/L取决于周期的长度。在某些情况下,交易期越长,利润就会变成亏损,反之亦然。

6、模拟中没有考虑交易成本。至少在最终利润相当微薄的情况下,交易成本可以将利润变成亏损。

7、能否在特定业务领域的特定股票中发现模式?在这项分析中,美国航空和Expedia这两家旅游公司的股票收益最高。这仅仅是个巧合,还是某些企业的股票走势更容易引发推特情绪?

原文:https://medium.com/@jang.noodin/

原文发布于微信公众号 - 量化投资与机器学习(Lhtz_Jqxx)

原文发表时间:2019-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券