QIML Insight:基于多源特征及机器学习的股票聚类模型
由small_q创建,最终由small_q 被浏览 68 用户
核心观点
本文提出了一种基于数据驱动的行业分类方法,该方法以不同的粒度级别将类似的公司聚集在一起;机器学习的技术可以从相关数据源中提取特征,并学习相关关系,从而识别出在样本外时期风险回报情况相似的公司。历史收益相关性、GICS分类、10-K报告、规模、动量、资产负债率等基本因子对企业相似性的预测贡献最大。
行业分类体系在投资组合构建中有着非常广泛的应用,一个好的行业分类体系有以下两个特点:最小化组内股票的差距和最大化的组间股票区别。构建投资组合时,投资者往往通过分散行业配置来达到组合风险分散化的效果。但这种基于公司业务的分类体系,相对比较固定,在多变的市场环境及多样的市场观念下,很多时候属于同一行业的股票之间的并没有很高的相关性,反而不能行业的股票却有着较大相关性。这种情形下,投资组合在行业上的分散化效果就会大打折扣。
方法
本文提出了一种数据驱动的,基于多维度的特征对股票进行行业聚类的方法。
具体来说,是使用机器学习的模型对股票多维特征与未来相关性进行建模,从而建立一个可以预测未来股票间相关性的模型。相对传统行业分类体系,该方法能够构建更加动态有效的股票分类体系,及时反应市场最新的信息。
正文
我们先整体介绍下模型的框架,首先我们预测的目标是两个股票未来收益率的相关 系数,所使用的特征是如表2所示的股票各维度的特征,其中包括以下几类:
股票过去252日的日度收益 股票过去12个月的月度收益
基本面因子 : 主 要 使 用 MSCI Barra US Total Market Model的描述因子(详见附录)
对10-K报告使用NLP算法提取的因子,包括TF-IDF和Doc2Vec两大类。
其 中 TF-IDF又使用的SVD分解降到了100维;Doc2Vec的具体方法可以参考:
o https://markroxor.github.io/gensim/static/notebooks/doc2vec-wikipedia.html
使用新闻共现矩阵提取的节点表征
具体就是对新闻共现的股票的邻接矩阵使 用Node2Vec算法得到的每个股票对应的一个多维向量
原始的GICS行业分类
以上的特征并不直接作为模型输入的特征使用,因为预测的是任意两个股票未来收 益率之间的相关性,所以准备训练数据时需要对任意两个股票的特征做如下处理:
计算两个股票每类特征的马氏距离(L1 Distance)
计算两个股票每类特征的cosine相似度
最终的特征为所有类别特征的马氏距离和cosine相似度构成的向量
比如使用了Returns-Daily 、Returns-Monthly、Factors三类特征,那模型的输入就是以下6维向量:
[两个股票Returns-Daily的马氏距离, 两个股票Returns-Daily的Cosine相似度, 两个股票Returns-Monthly的马氏距离, 两个股票Returns-Monthly的Cosine相似度, 两个股票Factors的马氏距离, 两个股票Factors的Cosine相似度]
比如我们使用2019年的某股票池中所有股票的特征数据,按照以上方法,可以加工出该股票池中任意两个股票对,如股票i和j的特征,然后再使用2020年的日度收益率计算任意两个股票对,如股票i和j的相关系数。这样我们就可以进行模型的训练,训练出来的模型就可以使用2020年的股票特征数据,预测它们之间任意两个股票在2021年收益率的相关系数。在模型的选择上,作者使用了ridgeregression、neuralnetworks和XGBoost三种模型。
接着上面的例子,我们得到了某股票池2021年的预测的相关系数矩阵后,可以使用该预测的相关系数矩阵进行层次化聚类,从而生成动态的股票分类体系。关于层次化聚类的层数及每个层次的聚类个数可以对齐传统的行业分类,比如GICS,这样也能方便我们对比该聚类方法与GICS行业分类体系。层次化聚类的具体实施可以使用scikit-learn中的实现:
实证结果分析
作者对照GICS的前三级sector、industries及subindustries,使用了上述方法对股票进行了层次化聚类。也就是说层次化聚类时也分成了三个级别,每个级别中对应的聚类的数量与GICS对应,比如第一层聚类数量与GICS的sector的数量一致,也就是11个。
下表3和表4是股票聚类效果的对比,每一行表示不同的模型与特征集的组合在不同颗粒度下聚类的效果,如"Ridge:Factors"表示使用Ridge模型与Factors特征集的聚类效果,表中指标的意思表示该层次聚类下所有股票的平均相关性(使用样本外的收益率计算的相关系数)。
如最后一行XGBoost:ALL+GICS,Sector列的指标值是36.58,表示:使用XGBoost模型与所有特征数据进行聚类后,在Sector这个层聚类中,首先对每个聚类中的每个股票计算其与聚类中其他股票相关系数的均值,记为;然后再计算该聚类中每个股票的的均值得到;最后计算所有11个sector的的均值,即最后的指标值表3和表4的区别在于,表3中股票的数量取决于GICS行业分类体系中股票的数量,比如在GISC行业分类体系下,A股票在某个Sector中有N个同属这个Sector的股票;而在XGBoost:ALL+GICS的聚类算法下,A股票在某个Sector中有M个同属这个的股票。那么在计算指标时使用的股票数量是M与N的最小值,也就是说与。而表4中,是使用全部M个股票。
因为表3中使用的股票数量为对应GICS分类中的股票数量,所以主要目的是与GICS进行对比,我们可以看到XGBoost:ALL+GICS的聚类的相关性最高,效果最好。而参考表4,当使用各自聚类下所有股票数量时,在Sector和Industry层级,Ridge:ALL+GICS的聚类效果最好;XGBoost:ALL+GICS在Subindustries层级的聚类效果更好。
除了组内的相关性,本文对不同聚类的持续性进行了对比。如下表对应的值35,表示,在使用Ridge模型时(使用所有特征),35%的r层次的聚类中的股票与下一期相比股票的变动小于90%。
我们期望,属于同一聚类的公司将对不同的系统因子作出相似的反应。因此,每个公司聚类可以被认为是一个因子,可以解释系统冲击共同的因素。我们分析了从ML模型中获得的聚类作为因子,并评估了它们的同质性和样本外多样化效益:
其中为股票收益,为股票聚类暴露因子,当t时刻股票j属于聚类时,该值为1,不属于为0(类似因子模型中的行业暴露因子)。
下表7中展示了不同聚类模型下,聚类暴露因子收益的截面方差均值,方差越大说明不同聚类的收益区别越大,分散效果就越好。可以看出不同模型的分散效果均好于GICS本身。
除了比较聚类暴露因子的收益,本文还比较了聚类内及聚类间,相关基本面因子的离散度。如下表8和9所示。整体可以看出,GICS行业分类体系,在多个基本面因子的组内离散度要好于机器学习模型,但机器学习模型相比GICS在组间的离散度更大。
通过以上分析,我们发现整体上的模型表现更优。下图12和13分别给出了模型中特征的重要性,及不同类别特征的重要性。可以看出,日度收益率在预测未来股票相关性系数上是最重要的,然后还有股票本身所属的GICS行业分类。而在特征大类的重要性上,收益率数据依然是最重要的,排在后面的就是基本面因子。
总结
本文给我们最大的启示,是使用机器学习模型及多源数据对现有的行业分类体系进行改进,最终达到组合投资中更优的分散性。由于市场的对于不同公司的认知是不断变化的,传统的行业分类的更新可能跟不上市场的变化,从而导致同属一个行业的公司,表现并不一定会更相关。
其次,也给我们提供了一个新的思路,股票间的相关性是可预测的。我们之前一直将机器学习模型用于收益的预测,本文关于相关性的预测,给机器学习提供了一个新的可以尝试的应用场景。
文章来源:公众号 量化投资与机器学习