1.3 实例分析

本节将运用60只股票数据测试ReliefF算法的性能。运用该算法解决分类问题时,利用股票的资金数据作为特征,将股票分为好股票和坏股票;再运用该算法解决回归问题时,利用资金数据对涨跌幅进行回归。无论是分类问题还是回归问题,ReliefF算法最后都会给出特征的重要性排序。

1.3.1 数据集介绍

ReliefF算法既可以应用于分类问题,也可以应用于回归问题,本节将对60只股票数据做相应处理,构造分类标签和回归标签,原始数据如下。

图1-1 部分股票数据示意图

图1-2 行情数据与资金数据合并后股票数据的前10行

图1-1为所加载的60只股票数据的部分股票示意图,图1-2 为股票市场数据以及资金数据合并之后的前10行数据。

1.3.2 函数介绍

本文直接调用MATLAB自带的ReliefF算法,函数表达式如下。

下面对该函数进行详细解释。

1.3.3 ReliefF算法在分类问题中的实例分析

接下来以上证60只股票2014年1月3日到2017年7月24日的数据为例,将上述流程演算一遍。首先下载60只股票数据,并将两者的数据合成便于进行计算,代码如下。

接下来需要构造标签数据,也就是构造ReliefF算法中的Y。在本案例中,只将股票分为好股票与坏股票两类。假设3年半的时间里股票总涨幅超过80%的为好股票,标记为1;否则为坏股票,标记为0。执行下面的代码,将得到标签数据。Y标签的前10个如图1-3a所示。

在构建了Y的分类标签之后,下面将构造X特征矩阵。以7类资金数据的均值作为本案例中的样本特征,即用图1-2中第6列至第12列每只股票的均值来构造特征变量矩阵,代码如下。得到的结果如图1-3b所示。

图1-3 分类标签Y与特征矩阵X

最后将X、Y分别代入算法中进行计算,并绘制特征重要程度的排序图。执行下面的代码,可以得到7类股票资金数据的重要程度权重,如图1-4所示。

图1-4 股票资金特征判断股票好坏的重要程度权重排序

以上过程是通过调用MATLAB自带算法进行ReliefF特征选择的应用过程,可以看到本案例中成交量即volume特征在判断牛股与否中起到了主要的作用。需要注意的是,虽然在本案例中,成交量可以是判断股票好坏的一种权重较高的特征,但是并不意味着单纯用成交量来预测股票涨跌就一定有好的结果。

1.3.4 ReliefF算法在回归问题中的实例分析

通过上文我们对ReliefF算法已经有了一定的理解,接下来使用60只上证股票的数据来进行回归问题的实例讲解。上一小节已经学习了ReliefF的分类算法,回归算法的运用类似,因此在这里不再重复解释,直接给出案例代码。由于使用的数据与分类案例的数据是一样的,所有前两步的原始数据加载与合并过程的代码与上一节相同,得到的数据同样是图1-1和图1-2的效果。

由于本案例是回归问题,构造的预测标签Y是与分类案例不同的。以每只股票在2014年1月3日至2017年7月24日期间的对数收益率来构建Y,即Y是连续的数据,而不是分类案例中的0、1分类。执行下面的代码,可以得到图1-5a的结果,ReliefF回归算法股票对数收益率,即为构造的标签Y。

构建Y标签后,接下来将构造X特征矩阵,以7类资金数据的均值作为本案例中的样本特征,即用图1-2中第6列至第12列每只股票的均值来构造特征变量矩阵。执行下面的代码,得到X特征矩阵,如图1-5b所示。

图1-5 ReliefF回归问题中的标签Y与特征矩阵X

最后将X、Y分别代入到算法中进行计算,并绘制特征重要程度的排序图。执行下面的代码,可以得到7类股票资金数据对于股票对数收益率的重要程度权重排序,如图1-6所示。

图1-6 RelifF股票资金特征对股票对数收益率重要程度权重排序

图1-6的结果显示,所有的资金特征权重都是负的分数,也就是用单一的资金数据去判断股票的盈利,不是很准确。因此,结合分类问题和回归问题的分析结果,可以认为尽管资金特征中的成交量在判断股票好坏上有较高权重,但是如果单纯根据成交量来交易,是没法保证盈利的。