总体思路
- 对于基本面因子的挖掘,总体来说,进行数据清洗整理后,通过IC因子分析,来确定有效的因子。在通过选出的有效因子,运用机器学习各类型算法或者其它常规的算法,来刷选出标的。
IC算法
- 在此对于IC因子进行一定的简介。IC即信息系数(Information Coefficient),表示所选股票的因子值与股票下期收益率的截面相关系数,通过 IC 值可以判断因子值对下期收益率的预测能力。信息系数的绝对值越大,该因子越有效。IC为负表示因子值越小越好,IC为正表示因子值越大越好。 IC计算分为Rank IC 和 Normal IC 其存在的差异性为:Rank IC 是通过计算测试因子数值与排序的名次之间的相关性系数,而Normal IC 则是计算因子数值与其涨跌幅之间的相关性系数。相关公式如下:
alphalens模块的使用
-
alphalens 是一个辅助进行IC有效性因子检测的模块,具体使用方法在此不加以阐述。IC分析流程:
1数据处理后需要的数据格式
data.png
2 部分分组后收益数据可视化部分截图pic1.png
3 IC数值图表table.pngpic2.png
有效性因子的刷选与数据挖掘
-
通过IC进行有效性因子进行刷选后,注意!!!对于选择出来的基本面多因子,很多存在高度相关的因子,因此在进行数据挖掘挖掘之间,需要对因子的相关性进行检测。因子相关性tabletable2.png
剔除高度相关的因子后,便可以使用选出的因子进行因子的挖掘,从而建立策略。在这里对于多种机器学习算法,例如Kmeans,随机森林,SVM,逻辑回归等。只对Kmeans算法的运用进行阐述,Kmeans算法的数学推导过程不做阐述。
Kmeans在此是一种探索性的运用,只是基于一种想法进行的数据验证。
在这里先对Kmeans算法的内容做一个简述,k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。从阐述中,不难发现,Kmeans算法是一种发现多维度下,在几何空间中具有邻近关系的聚类算法。那么在知道有效因子的情况下,基于多因子下,使用Kmeans便可以发现在多因子下,哪一些股票具有高度的空间邻近性,那么对于这些聚类分组后高关联性的股票组合,对其涨跌幅或者其他性质进行研究,探索出在这些分组中是否具有在某一方面性质很明显的股票。例如:某一个分组的股票普遍随机时间区间内平均涨跌幅均有极大可能优于其他分组。
在发现某种性质后,便可以基于该性质建立策略,进行工程化并回测,验证策略的有效性。
这里说明一点,由于Kmeans算法进行分组时需要自己设定分组数量,这里需要进行各种尝试。同时由于分组时初始点数据选择是随机的,导致大概率下,进行聚类时,例如某一数据第一次分类可能在第一组,而第二次分类就在第二组。这里需要解决此问题。
解决办法:无论分组在哪一组,具有高度空间邻近性的数据点必定极高概率每一次分组都在同一组中,那么对于每一个数据的每一次数据分组结果均进行分组数字化标签,而后进行协方差计算,高度线性相关
的便是同一组的数据点。在此种方式下需要考虑一种比较细的问题,便是由于定义高度相关性是需要阈值的,而在设定阈值后,极有可能出现数据A与数据B高度相关,数据B与数据C高度相关,但数据A与数据C稍低于阈值,从而非高度相关。在此情况需要考虑是取交集还是并集的问题!!!同时需要设计算法来进行高度相关的刷选过程。
-
在此附上某一性质下刷选出的分组结果截图,其标的均为沪深300成分股。
pic3.png