基于自然语言处理的新闻股价涨跌预测

     发布时间:2020-12-31

  按照产品开发计划,本项目旨在开发自然语言处理系统进行新闻预测股价涨跌,达到辅助或替代人工阅读股市新闻的效果。本次提交为雏形产品,其中已经完成的主要部分包括:

  目前整体产品的整体准确率仍然有待提升,但是已经可以根据股票新闻给出股票涨跌的预测结果,并且对模型的效果及效率也已进行了定量化的评估。目前使用5000条对于算法而言属于全新知识的新闻,在涨跌幅预测上已经可以达到55%左右的准确率。

  当然,本文在文末提供了92只股票在2017-12-18当天的收盘涨跌幅,计算规则为:

  (12月18日收盘价- 12月15日收盘价)/12月15日收盘价,即传统意义上行情软件中的“涨幅”数据,Tushare数据定义中的“p_change”(参见其官网说明),东方财富数据定义中的“涨跌幅 PCTCHANGE”字段(参见官方网站、Choice终端及API接口数据定义)。

  产品主要需要收集的信息包括新闻信息,股价信息及词汇库。其中,新闻信息主要充当原始的训练和测试样本,给予模型足够的文本信息;股价信息主要作为模型的监督学习的标签,能够指导模型向正确的方向收敛;而词汇库(及其相应的词向量)则充当将词汇信息转换为数值表证,并输入模型的角色。本产品中,新闻信息收集的部分使用网络爬虫完成,并储存在数据库服务器中;股价信息使用Tushare财经API访问并获取;词汇库则是使用的Github分享的Kyubyong的中文词向量库。

  由于新闻数据本身是由句子组成,而句子本身若不经划分就难以有很强的意义,故而需要对句子进行分词化(tokenization)。本产品使用隐马尔可夫模型(HMM)对句子进行分词化,达到了良好的效果。同时,由于股票新闻中并非每一个单词权值都是均等的,有一些词(如“增长”,“获利”或“破产”)信息价值远大于一些没有意义的词(如:“的”,“公司”及一些人名),故而对句子的分词进行筛选也是十分必要的。本雏形版本中,我们使用TF*IDF方法进行关键词筛选。该方法的优点是简单易行,很好的实现了开发时间与效果的平衡。在今后的版本中,我们可能加入更加先进的词汇选取方法。

  写入模型的数据必须为数学化的向量或矩阵,这就需要我们把新闻用相应的数学化表达代替。本产品中,我们将句子的分词按照顺序转换为相应的词向量,再将该新闻中所有的词向量拓展为一个矩阵。值得一提的是,在我们的模型中,只有既属于关键字,又能够在分词向量库中找到的,才将其载入矩阵。这样一来可以大大节省计算资源的消耗;二来可以降低噪声词向量的影响,提升准确率。

  实现本产品人工智能功能的主模型为RNN-GRU模型,即使用GRU记忆单元的递归神经网络(Recurrent Neural Network)。相对于传统的RNN模型,GRU记忆单元具有计算资源需求量小和收敛速度较快的优点。这里我们使用7层不同参数的GRU记忆单元,力图尽可能的学习到有效的信息。模型的表现请参见第三章的内容。

  本产品的模型评估主要包括准确率及模型所需时间/效率。由于新闻信息一般会占用较大的空间(该模型采用沪深300的数据训练,只取了30,000条新闻样本,但已经需要占用60GB以上的内存),故而我们在测试时选取了部分的数据。由于硬件能力受限,产品评估部分目前暂时尚未完善。后期的工作将加入更多的评估部分。

  产品在沪深300新闻数据集上训练,选取其中30,000条新闻样本,按照3:1的比例划分为训练集与测试集。其中,训练集对算法总是可见的,并且是我们让模型学习信息的基础;测试集不会参与模型的学习过程,也就是说在测试之前是不可见的,类似于“新知识”。人工智能所追求的目标,就是最大化我们在测试集上能够拿到的准确率。我们称其为泛化准确率,而这个准确率基本可以视为最终产品在实践中可以拿到的准确率。

  由于文本属于信息量非常大的信息,我们无法确保测试集能够以最终达到与训练集相同的准确率(泛化能力限制)。而且本产品属于雏形产品,重点在于验证有效性。不过,从技术上来讲,只要泛化准确率可以在训练集准确率上升的同时上升,就可以说明模型是有效的。而我们的结果,恰恰可以说明这一点。我们的模型训练持续了20次迭代,这20次的准确率如下表所示:

  从这个表中,我们可以看出,尽管测试集准确率的上涨速度未能够赶上训练集的准确率上涨速度,但是我们的产品依然将测试集准确率从51%提升到了55%——尽管看上去不多,但是用在实践中却是非常显著的。

  图中,红线代表训练集准确率,绿线代表测试集准确率。可以看到,尽管提升不如训练集准确率明显,但是测试集准确率依然在上升,这就证明了模型的有效性。而如何弥补训练集准确率上升与测试集准确率上升之间的速度差距,将是模型后期研究的重要内容。

  本文发布之时,由于受到硬件条件,及计算时间的限制,只来得及将全部A股3447只已经获取到新闻、公告数据中的部分股票(92只)进行运算。具体运算的2017-12-18日个股涨跌预测情况如下: