首页> 中国专利> 一种多模态数据预测证券涨跌幅的方法

一种多模态数据预测证券涨跌幅的方法

摘要

一种多模态数据预测证券涨跌幅的方法,综合考虑该证券本身的历史交易数据以及更为宏观的因素以及外界资讯评论所产生的影响,充分利用了结构化数据和文本数据,使用证券的历史交易数据,历史资金流向数据,以及股民针对该证券历史评价数据,深入探究影响证券涨跌幅的因素,从而构造了涨跌幅预测模型,预测效果好,准确度高。

著录项

  • 公开/公告号CN114913017A

    专利类型发明专利

  • 公开/公告日2022-08-16

    原文格式PDF

  • 申请/专利权人 南京邮电大学;

    申请/专利号CN202210668717.8

  • 申请日2022-06-14

  • 分类号G06Q40/04(2012.01);G06F17/16(2006.01);G06N3/04(2006.01);

  • 代理机构南京正联知识产权代理有限公司 32243;

  • 代理人杭行

  • 地址 210023 江苏省南京市栖霞区文苑路9号

  • 入库时间 2023-06-19 16:25:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-02

    实质审查的生效 IPC(主分类):G06Q40/04 专利申请号:2022106687178 申请日:20220614

    实质审查的生效

说明书

技术领域

本发明属于金融数据挖掘技术领域,具体涉及一种多模态数据预测证券涨跌幅的方法。

背景技术

随着深度学习的不断深入研究。对文本数据的研究,近几年有了较大的突破,BERT模型处理NLP领域问题有着较好的应用。神经语言程序(NLP)是一种行为模型,是一系列外显的技能和技术,由RichardBandlerandJohnGrinder在1975年创立的。为了定义主观经验结构的学习,NLP研究了大脑(“neuro”)、语言(“linguistic”)和身体三者之间的交互作用所产生的模式或“程序”。从NLP视角来看,交互作用产生了有效的行为,同时也产生了无效的行为,它是人类卓越和病理背后的进程形成的原因。很多的NLP技能和技术都是起源于对多个专业沟通领域的专家卓越模式的观察,这些领域包括心理治疗,商业,金融,法律和教育等。NLP是一种行为科学,包含三个方面,认识论:系统的知识和价值观;方法论:应用知识和价值观的方法和步骤;技术论:帮助应用知识和价值观的工具

预训练和微调被更多更好应用到深度学习中,预训练技术首先通过大规模无监督或半监督任务使模型能够尽可能多的学习到通用先验知识,然后在下游任务中进行微调,以实现知识的迁移。这种预训练+微调的模型训练方式使得在下游任务中深度模型仅需学习一些任务相关性的知识,而无需重新开始学习,因而能够显著降低下游任务对标注数据的依赖,并提高模型在小数据集上的泛化能力。

多模态领域技术近些年的热门讨论。单模态表示学习负责将信息表示为计算机可以处理的数值向量或者进一步抽象为更高层的语义特征。多模态表示学习是指通过利用多种模态之间的信息互补性,剔除模态间的冗余特征,从而学习到更好的特征表示。由于其广泛的应用前景,目前已经成为了预训练技术进一步发展的突破口。

发明内容

本发明的目的:因预测证券涨跌幅时,不仅要考虑该证券本身的历史交易数据,还应该综合考虑更为宏观的因素以及外界资讯评论所产生的影响,本发明提供一种基于多模态数据预测证券涨跌幅的方法,利用了结构化数据和文本数据,使用证券的历史交易数据,历史资金流向数据,以及股民针对该证券历史评价数据,深入探究影响证券涨跌幅的因素,从而构造了涨跌幅预测模型。

一种多模态数据预测证券涨跌幅的方法,具体步骤如下:

步骤1:获取证券的数据集,该数据集包括历史交易数据集、历史资金流向数据集、历史评价数据集;

步骤2:选取历史交易数据集中m天的收盘价、开盘价、涨跌幅、换手率四个特征,得到4*m的历史交易数据矩阵Tmatrix;

步骤3:选取历史资金流向中m天的净流入和主力净流入两个特征,得到2*m的历史资金流向数据矩阵Mmatrix;

步骤4:对Tmatrix和Mmatrix矩阵中存在的缺失值采用前后项平均值方法进行填充,对存在的节假日情况采用前项填补法进行填充,经过上述处理过后,Tmatrix更新为4*n的历史交易数据矩阵,Mmatrix更新为2*n的历史资金流向数据矩阵,其中n表示填补过后的数据集天数;

步骤5:将Mmatrix矩阵中的值由微观数据转变为宏观数据,为0或者1;

步骤6:对Tmatrix进行标准化处理,得到处理过后的矩阵Tmatrixnew;

步骤7:根据Mmatrix日期为索引,选取该证券n天的历史评价数据集;

步骤8:对上述数据进行处理,基于预训练后的BERT模型进行历史评论数据集的句向量集合获取;

步骤9:将Tmatrixnew和Mmatrix矩阵合并为6*n的struct矩阵。

步骤10:使用长-短期记忆法LSTM,最终构建预测模型;

步骤11,根据构建后的预测模型,基于历史交易数据集、历史资金流向数据集、历史评价数据集进行对应证券的涨跌幅预测;输入由步骤1得到的各个数据集到步骤10构建的预测模型中,得到预测结果。

进一步地,步骤4中,若存在节假日且节假日在工作日的星期一至星期五,采取前项填补法,即前一项数据赋给当前天,填充矩阵。

进一步地,步骤6中,使用Sklearn库中的preprocessing进行标准化处理。

进一步地,步骤7中,设第j天存在k条评论,按照每条评论阅读量降序排列并选取前x条评论数据,得到历史评价数据集记做Comment。

进一步地,步骤8中,具体包括如下步骤:

步骤8-1:选取Tmatrixnew的涨跌幅特征;取n天涨跌幅中第timesteps到最后一天的数据作为标签,其中label=Tmatrixnew[“涨跌幅”][timesteps:];共batch个观测点作为label标签。其中batch=n-timesteps;

步骤8-2:加载预训练好的BERT模型,加载bert_config.json、bert_model.ckpt、vocab.txt三个文件;

步骤8-3:根据MLM任务对BERT模型进行pre-training,将历史评价数据集作为原始语料;

步骤8-4:将所有字数超过max_num_tokens的评论进行截断;

步骤8-5:连接句子对,用’[SEP]’字符进行连接,句首置’[CLS]’字符,句末置’[SEP]’字符;

步骤8-6:随机遮住15%的单词;其中80%用masked token来代替,10%用随机的一个词来替换,10%保持这个词不变;

步骤8-7:根据上述步骤,用原始语料数据来训练BERT语言模型,其中包括Embedding层、双向Transformer编码器、输出层。完成bert模型的预训练并保存为change.ckpt;

步骤8-8:加载预训练过后的BERT模型change.ckpt和vocab.txt;

步骤8-9:读取vocab.txt,将txt文档中每个字word,给予一个唯一值,形成键值对word-token;

步骤8-10:建立键值对字典token_dict;

token_dict={word

token_dict[word]=token

字典的键是单个字符,值是该字符唯一对应的int类型数值;

步骤8-11:选取Comment中第j天前x条的评论文本数据;

步骤8-12:对文本数据进行标示性学习,句首置’[CLS]’字符,句末置’[SEP]’字符;

步骤8-13:调用keras_bert中的tokenizer.encode,查询token_dict,将该评论文本数据每个字按照顺序完成word到token的映射;

步骤8-14:将处理过后的x条评论数据输入bert模型中,返回每条评论’[CLS]’对应的字向量,共x个’[CLS]’字向量;

步骤8-15:’[CLS]’向量表示该评论形成的句向量。按照每条评论的阅读量进行加权求和,得到第j天的评论文本数据向量token_comment

步骤8-16:对每一天进行上述操作,使用Token_comment表示n天数据对应的句向量集合,其中Token_comment=[token_comment

进一步地,步骤8-13中,句子最大长度maxlen取50,若评论大于50个字则截取,若小于50则进行padding补0操作。

进一步地,步骤10中,具体包括如下步骤:

步骤10-1:将步骤9得到的struct矩阵进行rashape操作,使得二维向量变成三维向量;

步骤10-2:struct的shape=[batch,timesteps,6];batch表示实验有batch个观测点,timesteps是用前timesteps天数据预测当天涨跌幅,6表示六个特征=[收盘价、开盘价、涨跌幅、换手率、净流入、主力净流入]其中4个微观特征,2个宏观特征;

步骤10-3:将Token_comment进行rashape操作,Token_comment的shape=[batch,timesteps,768],其中768是BERT模型形成句向量的维度;

步骤10-4:采用中层融合,调用keras.layers中的LSTM包构建模型,将struct和Token_comment一个batch分别代入各自的LSTM模型进行学习;

步骤10-5:构建结构化数据struct的LSTM网络模型,并使用keras.layers.LSTM添加更深层次LSTM网络;

步骤10-6:构建文本数据Token_comment的LSTM网络模型,并使用keras.layers.LSTM添加更深层次LSTM网络;

步骤10-7:将stu_learn和cl_learn向量进行拼接得到1*(z+c)的conclu_learn向量;

步骤10-8:使用keras中的Dense层对conclu_learn进行降维;

步骤10-9:再次添加一层Dense层,神经元个数为1,输出结果;

步骤10-10:采取MSE作为loss函数,将输出结果和涨跌幅真实数据进行比较,计算MSE值,根据MSE值指导模型在训练过程中朝着收敛的方向前进;

步骤10-11:按照上述步骤对每个batch数据进行学习;选取batch_size进行模型参数的更新;其中batch_size表示每学习多少个batch网络的权重参数进行更新。

步骤10-12:选取模型的迭代优化器为‘rmsprop’,metrics为MAE,对模型参数不断更新调整,使模型不断优化,完成模型的构建。

进一步地,步骤10-5中,使用keras.layers.LSTM添加第一层LSTM网络层,这一层隐层维度为a,加入dropout和recurrent_dropout来防止模型的过拟合,另return_sequence=True,返回一个timesteps*a的张量;使用keras.layers.LSTM添加最后一层LSTM网络层,这一层隐层维度为z,加入dropout和recurrent_dropout,另return_sequence=False,返回最后一个时间步1*z的张量,得到的是包含timesteps时间步数据信息的向量,记做stu_learn向量。

进一步地,步骤10-6中,使用keras.layers.LSTM添加第一层LSTM网络层,这一层隐层维度为b,加入dropout和recurrent_dropout来防止模型的过拟合,另return_sequence=True,返回一个timesteps*b的张量;使用keras.layers.LSTM添加最后一层LSTM网络层,这一层隐层维度为c,加入dropout和recurrent_dropout,另return_sequence=False,返回最后一个时间步1*c的张量,记做cl_learn向量。

本发明达到的有益效果为:本发明基于结构化数据和文本数据构造的涨跌幅预测模型,实现了综合考虑证券的交易、资金流向和评价的涨跌幅预测方法,预测效果更好,准确度高;采用中层融合方式能够学习到特征在更高维空间的表达,更有利于提取特征信息。

附图说明

图1为本发明实施例中的涨跌幅预测模型整体流程图。

图2为本发明实施例中的原始语料pre-training流程图。

图3为本发明实施例中的文本数据的表示学习示意图。

具体实施方式

下面结合说明书附图对本发明的技术方案做进一步的详细说明。

一种多模态数据预测证券涨跌幅的方法,步骤如下:

步骤S1:假设存在某只证券的数据集,该数据集包括历史交易数据集Trade、历史资金流向数据集Capital、证券历史评价数据集Discuss。

步骤S2:选取历史交易数据集Trade中m天的收盘价、开盘价、涨跌幅、换手率四个特征,得到4*m的历史交易数据矩阵Tmatrix。其中m表示选取数据的总天数。

步骤S3:选取历史资金流向数据集Capital中m天的净流入和主力净流入两个特征,得到2*m的历史资金流向数据矩阵Mmatrix。

步骤S4:对Tmatrix和Mmatrix矩阵中存在的缺失值采用前后项平均值方法进行填充,公式如下:

Tmatrix["col"][k]=(Tmatrix["col"][k-1]+Tmatrix["col"][k+1])/2

其中”col”为特征名称,k表示第k天。

对Tmatrix和Mmatrix矩阵中节假日进行填充,若存在节假日且在工作日(星期一至星期五),采取前项填补法(前一项数据赋给当前天)加入原矩阵。公式如下:

Tmatrix["col"][k]=Tmatrix["col"][k-1]

将m天的数据加入节假日数据后,则Tmatrix更新为4*n的历史交易数据矩阵,Mmatrix更新为2*n的历史资金流向数据矩阵,其中n表示为在原始m天的基础下加入节假日过后的总天数。

步骤S5:将Mmatrix矩阵中值进行微观数据到宏观数据的转变,若Mmatrix[“clo”][k]>=0,则Mmatrix[“clo”][k]=1;若Mmatrix[“clo”][k]<0,则Mmatrix[“clo”][k]=0。其中Mmatrix[“clo”][k](clo=净流入特征or主力净流入特征)表示特征第k天对应的数据。

步骤S6:使用Sklearn库中的preprocessing对Tmatrix进行数据标准化处理,得到处理过后的矩阵Tmatrixnew。标准差的公式如下:

σ为标准差,x

步骤S7:根据Mmatrix日期为索引,选取该证券n天的历史评价数据集。假设历史评价数据集第k天存在x条评论,按照评论阅读量降序排列选取前3条评论数据。将n天前3阅读量的历史评价数据集记做Comment。

Comment={[comment

步骤S8:假设构建模型时,选取前timesteps天的数据预测当天的涨跌幅。其中timesteps为5的倍数。例如:选取日期[j,j+timesteps)过往数据去预测日期为(j+timesteps)的涨跌幅。根据图1对上述数据具体处理过程即模型构建的过程如下。

选取Tmatrixnew的涨跌幅特征,取n天涨跌幅中第timesteps到最后一天的数据作为标签。label=Tmatrixnew[“涨跌幅”][timesteps:],共batch个观测点作为label标签。其中batch=n-timesteps。

加载谷歌公司根据大量中文数据集预训练好的BERT模型,加载bert_config.json、bert_model.ckpt、vocab.txt三个文件。

根据图2流程图。在下游任务数据集,根据MLM(Masked Language Model)任务对BERT模型进行pre-training,将历史评价数据集作为原始预料。

对字数超过max_num_tokens的评论进行截断。若len(comment

连接句子对,用’[SEP]’字符进行连接,句首置’[CLS]’字符,句末置’[SEP]’字符。

随机遮住15%的单词;其中80%用masked token来代替,10%用随机的一个词来替换,10%保持这个词不变。

根据上述步骤,用预处理过后的语料数据来训练BERT语言模型,其中包括Embedding层、双向Transformer编码器、输出层。完成bert模型的预训练并保存为change.ckpt。上述步骤对应于图2的流程,进行原始语料的pre-training。

加载预训练过后的BERT模型change.ckpt和vocab.txt。

读取vocab.txt,将txt文档中的每个字(word),给予一个唯一int值,形成键值对(word-token),建立键值对字典token_dict。

token_dict={word

token_dict[word]=token

字典的索引是单个字符,值是该字符唯一对应的int类型数值。

选取Comment中第k天前3条的评论文本数据[comment

根据图3对文本数据进行表示学习,将第k天的三条评论分别添加’[SEP]”[CLS]’字符,每条评论句首置’[CLS]’字符,句末置’[SEP]’字符。

调用keras_bert中的tokenizer.encode,查询token_dict将第j天的3条评价文本数据中每个字进行word到token的映射。其中maxlen=50,若评论大于50个字则截取,若小于50则进行padding补0操作。例如:comment

将处理过后的3条评论数据输入BERT模型中,返回3个’[CLS]’对应的字向量。

3个’[CLS]’字向量表示3条评论形成的句向量{sentenc_cls

其中readnum

计算出n天的句向量集合:

Token_comment=[token_comment

假设选取前timesteps天的数据预测当天证券的涨跌幅。通过下文步骤构建预测模型后,基于历史交易数据集、历史资金流向数据集、历史评价数据集按照预处理过程处理后,带入构建时保留下来的最优模型即可完成预测。

步骤S9:将Tmatrixnew和Mmatrix矩阵合并为6*n的struct矩阵。

步骤S10:使用长-短期记忆法(LSTM),构建预测模型。具体构建过程如下。

将struct矩阵进行reshape操作,使得二维向量变成三维向量。

struct的shape=[batch,timesteps,6]。batch表示实验有batch个观测点(label值),timesteps是用前timesteps天数据预测当天涨跌幅,6表示六个特征=[收盘价、开盘价、涨跌幅、换手率、净流入、主力净流入]其中4个微观特征,2个宏观特征。

将Token_comment进行rashape操作,Token_comment的shape=[batch,timesteps,768],其中768是BERT模型形成句向量的维度。

本发明采用的是中层融合,调用keras.layers中的LSTM包构建模型,将struct和Token_comment一个batch分别代入各自的LSTM模型进行学习。

构建结构化数据struct的LSTM网络模型。

使用keras.layers.LSTM添加第一层LSTM网络层,这一层隐层维度为a,加入dropout和recurrent_dropout来防止模型的过拟合,另return_sequence=True,返回一个timesteps*a的张量。

使用keras.layers.LSTM添加更深层次LSTM网络。

使用keras.layers.LSTM添加最后一层LSTM网络层。这一层隐层维度为z,加入dropout和recurrent_dropout,另return_sequence=False,返回最后一个时间步1*z的张量,该向量通过遗忘门、输入门、输出门完成所有数据的学习;得到的是包含timesteps时间步数据信息的向量,记做stu_learn向量。

f

i

o

其中,f

Sigmoid函数如下:

构建文本数据Token_comment的LSTM网络模型。

使用keras.layers.LSTM添加第一层LSTM网络层,这一层隐层维度为b,加入dropout和recurrent_dropout来防止模型的过拟合,另return_sequence=True,返回一个timesteps*b的张量。

使用keras.layers.LSTM添加更深层次LSTM网络。

使用keras.layers.LSTM添加最后一层LSTM网络层。这一层隐层维度为c,加入dropout和recurrent_dropout,另return_sequence=False,返回最后一个时间步1*c的张量,记做cl_learn向量。

将stu_learn和cl_learn向量进行拼接得到conclu_learn向量。

使用keras中的Dense层对conclu_learn进行降维。

再次添加一层Dense(神经元个数为1),输出结果。

将输出结果和涨跌幅真实数据比较,采取MSE作为loss函数。计算MSE值,根据MSE值指导模型在训练过程中朝着收敛的方向前进。

模型进行下一个batch的学习,选取batch_size进行模型参数的更新,直至所有batch学习完成。其中batch_size表示每学习多少个batch网络的权重参数进行更新。

选取模型的迭代优化器为‘rmsprop’,metrics为MAE。根据loss函数,模型参数不断更新调整,使模型不断优化,完成模型的构建。

步骤11,根据构建后的预测模型,基于历史交易数据集、历史资金流向数据集、历史评价数据集进行对应证券的涨跌幅预测。输入由步骤1得到的各个数据集到步骤10构建的预测模型中,就可得到预测结果。

以上所述仅为本发明的较佳实施方式,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号