通过新闻情感分析进行股票预测
有许多技术可以预测股票价格的波动,但在本项目中,我们使用《纽约时报》的新闻文章标题来预测股票价格的变化。
摘要
股票价格随着世界经济形势的变化而迅速波动。有许多技术可以预测股票价格的波动,但在本项目中,我们使用《纽约时报》的新闻文章标题来预测股票价格的变化。我们使用《纽约时报》的存档 API 来收集过去 10 年的新闻网站文章数据。我们将对标题进行情感分析,然后将情感分析的输出输入到机器学习模型中,以预测道琼斯工业平均指数 (DJIA) 的价格。
引言
“根据有效市场假说 (EMH),股票在交易所总是以其公允价值进行交易,因此投资者无法购买被低估的股票或以虚高价格出售股票。因此,通过专家选股或择时不可能跑赢大盘,投资者唯一可能获得更高回报的方式就是购买风险更高的投资。”[1]
这基本上意味着,根据过去趋势和历史股价的专业知识来预测股价是困难的。股价波动代表了当前的市場趋势和业务增长,以及其他可用于买卖股票的因素。为了分析当前趋势、公司新产品信息、业务增长等,我们可以查看每日新闻,它代表了关于公司的真实信息,最终可用于预测股价。因此,我们将使用新闻文章来预测股指的变化,而不是通过历史股价来预测价格。
数据收集
在 2007-2016 年这十年间,收集了以下两类数据:
1. 股指: 一般来说,大多数研究人员预测的是股指而非个股。因为股指价格反映了整个股市的总体变化。我们使用道琼斯工业平均指数 (DJIA) 来预测美国顶尖公司的整体变化。数据来自雅虎财经网站 [2]
2. 新闻数据: 互联网上可供公众使用的新闻文章数据并不多。根据我们的研究,在股票预测中最为合适且公开可用的数据来自《纽约时报》存档 API。 [3]
数据处理
文章过滤
从《纽约时报》存档 API 收集的文章包含按类别(版块)表示的数据。其中一些版块包含与股票完全无关的无关类别文章,例如“人物传记”、“讣告”、“日程”等。因此,我们从列表中删除了这些类型的文章。最终用于情感分析的文章版块如下:“商业”、“国内”、“世界”、“美国”、“政治”、“观点”、“科技”、“科学”、“健康”和“外国”。在 100 万篇文章中,应用上述过滤器后,大约过滤掉了 40 万篇文章。
合并股指与文章
过滤出相关文章后,将同一天的所有文章标题连接成一个字符串。获得一天的单一字符串后,将其与相应的日期(时间序列)和道琼斯工业平均指数 (DJIA) 股指值合并。
情感分析
Python 中的自然语言工具包 (NLTK) 是用于通过自然语言处理对情感或行为进行分类的最广泛使用的情感分析工具。NLTK 包自带的 VADER 情感分析器,用于为文章的单一合并字符串评分,并为该字符串提供正面、负面和中性分数。
训练模型
情感分析的输出被输入到机器学习模型中,以预测 DJIA 指数的股票价格。我们使用 scikit-learn[4] 库训练了各种机器学习模型,例如随机森林、逻辑回归和多层感知器 (MLP) 分类器,并使用不同的优化超参数值以获得最佳优化结果。
以下是应用各种分类器后的结果。注意:橙色线显示实际价格的指数加权移动平均 (EWMA),蓝色线显示预测价格的 EWMA。
随机森林
逻辑回归
MLP 分类器
挑战
1. 缺失的股指:由于股市在周末和美国假日期间休市,因此在这些日期没有股票的开盘/收盘价。这也会影响我们的 DJIA 值。我们使用了价格插值来填充缺失值。对于插值实现,我们使用了 pandas[5] 包中的 interpolate 方法。
2. 价格波动剧烈:由于股票价格波动很大,我们使用了称为平滑的技术,该技术在金融市场中用于计算值的移动平均,从而得到相对平滑的曲线。对于移动平均实现,我们使用了 pandas[5] 包中的 EWMA 方法。
结论
我们的测试表明,使用 MLP 分类器(又称神经网络)比逻辑回归和随机森林训练的模型显示出更好的结果。尽管生成的图表示出的结果并不令人满意,但以下领域的研究可能带来更高的准确性。
进一步改进
- 我们未能找到任何专门为新闻文章设计的语料库或情感分析器。我们使用了 VADER (Valence Aware Dictionary and sEntiment Reasoner) 情感分析器,但它专门用于社交媒体文本。我们可以开发一个在新闻文章场景中效果更好的情感分析器。
- 在我们的项目中,我们只考虑了新闻文章情感分析进行预测,但在实际场景中,股票波动会显示出随时间重复出现的趋势。因此,将股票趋势与情感分析相结合以预测股票有很大的潜力,这可能会带来更好的结果。
- 基于优化的训练模型和该公司特定新闻文章的情感分析,预测个股。
- 训练卷积神经网络 (CNN) 和循环神经网络模型。
Github 项目链接:https://github.com/dineshdaultani/StockPredictions
参考文献