收稿日期:2008-11-11;修订日期:2009-01-15。
作者简介:冯家诚(1979-),男,安徽无为人,硕士研究生,主要研究方向:数据挖掘; 马锐(1972-),女,北京人,副教授,主要研究方向:人工智能。
文章编号:1001-9081(2009)S1-0155-02基于神经网络型数据挖掘技术的股价预测冯家诚1,马 锐2(1.华商基金管理有限公司运营保障部,北京100034; 2.北京理工大学软件学院,北京100081)(fengjc@hsfund .com )摘 要:提出适用于神经网络型数据挖掘的过程模型。
按照选取数据样本、数据转换、网络建模、网络仿真、结果评价这样一个完整的数据挖掘过程,对上证指数走势进行预测,得到了较高的预测精度。
说明了神经网络型数据挖掘技术在非线性系统预测中的优势,探讨了非线性系统预测的一种新思路。
关键词:数据挖掘;BP 网络;股价预测中图分类号:TP309 文献标志码:AStock pr i ce foreca st ba sed on da t a m i n i n g of neura l networksFENG J ia 2cheng 1,MA Rui2(1.O peration and Support D epart m ent,Huashang Fund M anage m ent Co m pany L i m ited,B eijing 100034,China;2.School of Soft w are,B eijing Institute of Technology,B eijing 100081,China )Abstract:The authors gave a p r ocedure model for data m ining based on neural net w orks .According t o each step of the model,the technol ogy of data m ining could p r ovide a higher accuracy of p redicti on of st ock p rice forecast,which p r oved the advantage of data m ining in the field of no 2linear f orecast .M ean while,a ne w method t o the non 2linear f orecast was als o poposed .Key words:data m ining;BP N;st ock p rice forecast0 引言就股市投资而言,辨认市场的运动规律,对将来时刻的股价指数进行预测,是股票市场投资决策的关键。
目前,经常采用的预测方法主要通过移动平均、回归分析等线性方法展开。
随着科学技术的发展,出现了一些新型的股票价格预测方法,如基于神经网络和遗传算法的股价预测、基于小波分析的股价预测和基于行为金融学的股价预测。
对于神经网络在股价预测中的应用,研究者们已经做了大量的研究[1-2]。
但是,现有的研究主要是围绕神经网络模型的构建和模型的优化展开的,着重于技术方面的解决,缺少对解决此类问题方法的讨论。
本文根据数据挖掘过程,以BP 神经网络模型作为技术关键,通过实证分析,定量预测了上证指数走势,说明了BP 神经网络在预测股票市场方面的有效性。
1 基于神经网络的数据挖掘过程在运用数据挖掘技术预测股价走势之前,需要确定数据挖掘的一般过程。
参考S AS 研究所的SE MMA 模型和SPSS 公司的5A 模型[3],并结合神经网络数据挖掘技术的自身特点,确定基于神经网络型数据挖掘一般过程如图1所示。
以上步骤不是一次完成的,其中某些或者全部步骤可能需要反复进行。
2 股价预测过程2.1 问题定义在对股票市场预测分析之前,辨认其运动规律是非常必要的。
如果市场是线性的,则线性的预测方法就能够与之相适应。
但如果市场是非线性的,那么仅依靠线性的方法去预测股价,就容易丢失很多有用的信息[4]。
已有的研究成果表明,现阶段的中国股市具有非线性的特征。
因此,运用神经网络的方法进行股价预测具有特殊的优越性。
在这样的背景下,此次数据挖掘的目的就是针对我国股市的非线性特征,建立符合这种特征的神经网络模型。
在此基础上,通过实证研究来证明模型预测的有效性,说明基于神经网络的预测方法在股价预测中的优势。
图1 基于神经网络的数据挖掘过程2.2 数据选样2.2.1 数据样本的选取就股票市场而言,数据样本的选取主要遵循两个原则:一是尽可能选择符合交易规律、并且交易特征相对明显的样本;二是顾及神经网络模型本身的性能。
在此次试验中,选取2004211230—200524229间连续100个交易日的上证综合指数作为待挖掘数据样本,并根据需要将其划分为训练样本和测试样本两个部分。
上证综合指数作第29卷2009年6月计算机应用Journal of Co mputer App licati onsVol .29June 2009为国内股市的重要评测指标之一,能够比较准确地反映股市行情的变化特征,具有较高的可预测性和预测价值。
2.2.2 样本向量的确定考虑到不加选择地选取会使数据庞杂,增加系统负荷,降低网络的功能。
反之,选取的指标过少又难以描述股票市场的特点。
因此,对于样本向量的各个分量,应该选取能充分反映股票市场交易特征的定量指标。
通过对上证综合指数各项指标的研究,确立8个样本向量见表1,其中,ξ1~ξ7为输入向量,ξ8为输出向量。
表1 神经网络模型向量样本向量含义样本向量含义ξ1开盘价ξ5成交额ξ2最高价ξ6涨跌量ξ3最低价ξ7涨跌幅ξ4成交量ξ8收盘价2.3 数据转换在数据挖掘过程中,对原始数据进行转换主要基于以下两个原因[5]:1)网络的各个输入分量有不同的意义和不同的量度,数据转换可以赋予各输入分量以同等重要的地位;2)BP 网络的神经元多采用Sig moid 活化函数,其输出值一般在0~1或-1~1之间。
通过数据转换,可防止因输入数据的绝对值过大而使神经元的输出饱和,继而使权值调整进入误区。
从选取的上证指数数据来看,其数值较大,极容易使试验中采用的BP 模型瘫痪。
因此必须进行适当的数据转换,对数据样本进行归一化处理。
转换公式为:A =(X -V m in )/(V max -V m in )(1)其中X 为变量的原始值,V m in 和V max 分别是变量的最小和最大值,A 为归一化后的变量值。
经过归一化处理,所有的分量都被限制在0~1之间变化,满足了下一步实验中网络训练和网络测试的需要。
2.4 网络建模2.4.1 建立模型根据BP 模型的工作原理[6],按照软件工程的方法,在本次实验中使用VC ++作为开发工具,实现了神经网络仿真工具,为整个数据挖掘过程提供了关键的建模准备。
2.4.2 优化模型根据定量比较分析的方法,通过大量数据实验对模型结构进行优化,设置了学习步长、隐节点数、活化函数等关键性网络参数,从而完成了网络模型的优化,确定了比较适用于股价预测的网络模型。
总结模型优化的结果如下:1)学习步长采用变步长方法;2)矩参数α=0.01,权及阈值的初始域为(-0.05,0.05);3)网络的拓扑结构为7(ξ1~ξ7)-9-1(ξ8);4)活化函数为Sig moid ()活化函数。
2.5 网络仿真利用优化后的BP 网络模型,在选定的数据样本中,选取2004211230—200524215间连续90个交易日作为训练样本,对2005204218—2005204229间10个交易日的收盘价指数进行预测。
2.5.1 网络训练利用优化后的网络模型,导入训练数据样本,对网络进行训练并保存训练后的网络结构和训练结果。
分析网络训练结果如下:最大绝对误差为16.97;最小绝对误差为0.02;最大相对误差为1.266%;最小相对误差为01002%。
由上述结果可知,网络的训练效果较好,可以利用训练后的网络结构进行下一步的预测。
2.5.2 网络测试将训练后的网络结构和测试样本导入神经网络仿真工具中,对收盘价指数进行预测。
为了分析BP 模型的预测精度,将网络模型的预测值和真实值导入SPSS 软件中,作时间序列图如图2所示。
图2 收盘价指数时间序列图由图2可知,网络模型预测值与收盘价实际值基本一致,初步说明了基于神经网络的数据挖掘技术在股价预测中的可行性和实用性。
2.6 结果评价在数据挖掘的最后一个阶段,需要结合专业领域知识对挖掘结果进行分析评价,使之符合实际应用的需要。
2.6.1 预测效果分析由图2可知,模型预测值与实际值的涨跌一致,说明在短期内,本次试验所建立的模型可以模拟股市的短期走势。
进一步分析预测精度可知,模型的短期预测精度均可以达到95%以上。
因此,在宏观经济环境没有发生重大变化的情况下,使用此预测模型将为投资者提供较好的决策依据。
2.6.2 局限性分析为了分析模型预测的局限性,作预测误差条状图如图3所示。
在图中可以清楚地看出,随着时间的推移,预测值和实际值之间的绝对误差和相对误差总体均呈上升趋势。
由此可见,所建的模型尚不适用于股价走势的中长期预测。
结合BP 模型的特点和影响股价走势的主要因素[7],总结神经网络型数据挖掘技术对中长期预测无效的主要原因如下:1)在本次试验中,选取模型输入向量时没有考虑经济景气指数、外围市场环境、突发性事件等对股市具有关键影响的因素,显然,这在一定程度上将影响模型的预测精度。
2)虽然在网络模型收敛到极值点时能够得到较好的学习精度,但同时也造成了对样本空间的过度拟合,从而对预测样本的推广效果较差。
(下转第183页) 651 计算机应用第29卷}else{if(Adjlevel(G,V2,lo w2,h igh2))return0;lo w2=h igh2;}coun t1=coun t2;//为访问下一层做准备level++;//当前层数加1}//while }//ifreturn1;//G是二部图}//B igraphDecisi on 分析上述算法,每个顶点至多进一次队列。
遍历图的过程实质上是通过边找邻接点的过程,因此其耗费的时间则取决于图所采用的存储结构。
当用邻接矩阵作图的存储结构时,查找每个顶点的邻接点所需时间是O(n2)[4]。
借助于G的邻接矩阵容易判定任意两个点之间是否有边相连,因为G的相应的广度优先生成树的同层上的任何两点至多被判断1次是否在G中邻接,所以判断各棵树的同层上任何两点在G中是否邻接的时间复杂度不会超过O(n2),所以整个算法的时间复杂度为O(n2)。