本来文章准备今天下午发,但是有事耽误一直拖到现在,今天的事不想拖到明天,就现在发吧。
今天谈论的内容是和关联规则相关的股票预测,具体怎么做,我先在网上找了一些论文看,觉得做得都不够好,我有一些自己的思想,就写出来吧,因为是对自己学习的总结,也供大家参考。
首先我们可以从算法上分析,关联规则的APRIORI算法是很基础的,也是很好用的,它能挖掘出频繁K项集,也就是满足支持度阀值(当然,也必须有较高的置信度)的所有集合,但是它有一个较大的局限,就是它所适用的数据类型仅仅是二元的0或1(或者说成是YES或NO也可以)。当然,我们显然可以对数据进行处理,把连续的离散化,再把离散的二元化,这样,我们股票连续的数据也难够用APRIORI算法来进行关联规则方面的挖掘了。这里涉及到了一个问题,我们选取股票的哪些数据来做?我们知道,我们的数据最终都会被离散化,所以我们所选取的数据,一定不能是难以离散的。换句话说,就是如果将某个连续的属性离散掉却破坏了它本身的特性,那么这个属性一定是不可取的,因为它可能会对算法的结果造成负面的影响。
我们知道,一支股票最基本的信息大概包括开盘价,收盘价,最高价,最低价,成交量,成交金额等。而这些连续的数据并没有很明显的分段特征,所以我觉得并不能在这些属性上做手脚。但是这并不意味着这是一条死路,因为我们可以先通过统计学手段计算出某些具有特殊意义且易于离散的值。提到这里,想必大家已经明白了,我说的就是炒股公式。举例来说,KDJ值,想必炒股的人没有不认识的吧。百度一下,了解KDJ的内在涵义以后,我们可以很快把K值可以划分成0-10,10-90,90-100,三类,D值划分成0-20,10-80,80-100,三类,J值可以划分成小于10,10-100,100以上,三类,然后二元化,就是9个二元属性,这样预处理就完了。我们选出20-30个指标进行建模,然后用APRIORI算法挖掘频繁项集。
由于挖掘出的频繁项集很多是与类(也就是我们要预测的项,也就是股票的涨跌幅)不相关的,我们将这些信息排除掉,保留对我们有用的信息,这样,我们能够得到最终的关联规则预测。我们得到的答案是:这样的预测能帮助我们知道,当前这支股票对哪些指标最敏感?可以想象这会成为股民的一大助力。
具体的操作方法,首先说明,我的挖掘工具是用的WEKA,说下原因,第一,在所有的开源挖掘工具中,WEKA是综合性能最好的工具之一。第二,在这些综合性能最好的工具中,WEKA的统计能力相对偏弱,图形化一般,而挖掘能力是顶尖的,在股票的挖掘中,我们应用的数据本身就是统计学指标,是别人已经算好的,所以对统计能力的要求并不高,而WEKA保证了最好的挖掘效果。(这里说明一下,只针对我自己,不排除有想先自己设计出统计学指标,再做挖掘的朋友,只是我这里做的随意了)第三,我对JAVA比较偏爱。(其实程序可能会比C跑的慢点,但WEKA的程序架构得非常棒,学JAVA的都可以去看看,收获颇丰)。而我们在WEKA调用APRIORI算法,只用将数据离散化就可以了,二元化它会自动做。具体的相关代码就不发了,自己去找找,在WEKA中是怎么做的数据类型转换,不难找到。(其实是我还不知道怎么在博客中发代码,过两天试试)
关联规则我用的就这么多,之后可能还会发决策树和BP神经网络的在股票这方面的探索,敬请期待!