基于决策树模型的三因子模型选股策略研究
2021-10-14王泽宇上海财经大学金融学院
王泽宇 上海财经大学金融学院
一、引言
多因子选股模型是量化投资实务中应用最广泛的一种模型,也是理论研究的重要内容,最经典的多因子选股模型是Fama- French[1]提出的三因子模型。之后的多因子模型研究主要是在三因子模型提出的思想和方法基础上对因子的研究和因子模型的有效性检验。传统的因子模型策略多采用回归的方式,利用历史数据回归出预期收益率和多个因子之间的线性关系,从而在取得当期数据后计算出预期的收益率,并根据收益率的高低选择合适的股票。但是股票价格的波动与其影响因子之间的关系往往呈现出复杂的非线性特性[2]。面对股票数据的非线性性,利用线性模型的预测方法难以达到令人满意的效果[3]。
人工智能、机器学习的兴起为多因子模型构建提供了新的思路和方法[4],将机器学习模型融入多因子选股模型的研究中,是多因子选股模型的改进方向之一[5]。相比传统的线性多因子模型,机器学习算法能够通过对因子的非线性表达,更加精细地捕捉到市场的信号,从而获取较为稳健的超额收益[6],机器学习算法主要基于其从数据中学习到的经验知识来预测资产价格,使得从数据中挖掘出更多与未来资产价格相关的信息成为可能[7]。决策树模型能够较好地映射非线性关系,易于理解和实现,速度快,易改造分类规则[8],因此,使用机器学习中的决策树模型来对于传统的三因子模型进行改进有其应有之义,笔者的研究对于丰富金融投资理论和实践具有一定的参考价值。
二、研究设计
Fama-French[1]提出的三因子模型如下:
三因子模型将股票相对于无风险收益的超额收益归类到三个因子MKT(市场风险溢价)、SMB(市值因子)、HM(账面市值比因子)。本文运用机器学习中的决策树模型来对于传统的三因子模型进行改进。决策树通过训练数据集进行学习,得出一棵自上向下的树的模型,再将测试数据应用于这棵树模型得出预测分类结果[9]。决策树的算法通常是一个递归的选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据有一个最好的分类过程,这一过程对应着特征空间的划分,也对应着决策树的构建[10]。
本文希望将每只股票分类为“买入”和“卖出”两类,一个基本的想法是直接用三因子模型中的三个因子来作为划分属性,比如说将MKT因子划分为高、中、低三类。但这种方式仅仅存在三个划分条件,导致存在严重的欠拟合风险,同时,因子的高、中、低三种划分方式是很模糊的,很难去界定,需要用更精细化的方法来划分因子模型。事实上,所有的股票构成的集合中,三个因子的取值都应当是连续的,所以无法直接用离散的分类方法对其进行分类,但可以与某个特定的数值进行比较从而实现离散化的过程。
图1 改进后的三因子模型决策树的划分方式
例如MKTt,这是市场超额收益率因子,可以考虑它是否大于0的分类,也可以考虑其是否大于0.2的分类,对于SMBt,我们同样可以考虑其对于某个临界值的大小比较。这样就完成了对于三个因子的离散化操作。这是至关重要的一步,这样决策树可以精细化地处理离散的数据。
当然,不可能将所有的分类标准全部塞入决策树中,那样会导致严重的过拟合情况的出现,因此,在处理完划分方式后还要再探究最优化的树的最大深度,在之后的研究中会运用利用sklearn.tree.DecisionTreeClassifier(criterion ='entropy')实现决策树分类,控制决策树的深度。从1开始逐渐增加最大深度,直到获得一个完整树。在测试得到了最优深度和信息增益最优的测试集合后,即得到了一个经过训练之后的决策树,在拿到一个新的股票后,只需要按照决策树进行分类即可得到决策树对其买入/卖出的判断。
三、实证分析
(一)数据获取与预处理
首先需要确定训练集来进行训练,即我们需要收集大量股票的三因子数据和我们最终对其进行的买入/卖出的判断来进行训练集的构建。本文训练对象为沪深300的所有成分股,选取计算出的2020年7月1日至2021年6月1日三因子数据。这其中,MKT是市场风险溢价,其计算方式为使用了2020年7月1日至2021年6月1日根据沪深300指数所计算得到的β值。SMB为市值因子,其计算方式为ln(当前公司总市值),单位为亿元。HML为账面市值比因子,其计算方式对将公司的PB值取倒数。Label为买入/卖出的标签,我们将训练集中的股票于2020年7月1日至2021年6月1日平均最终收益率高于同期沪深300指数平均收益率的股票记为1,其余的记为0。
这样,得到了所有所需的元数据,但这个数据没有办法直接进行决策树运算,需要按照上文方法对其进行离散化,并设计了75个分类标签。
例如,对于平安银行,其MKT值为0.91,那么相对应的1号分类标准MKT>0.0就会被标记为True,同时,在代码底稿文件Traindata.txt中就会出现1 1这一行代码来标识分类识别情况。预处理完的数据会被保留在四个文档中,在去掉缺省值之后共保留了299只股票,其中249只将被用于训练,50只用于测试。
(二)决策树训练
在完成了数据的预处理之后,就使用基于sklearn.tree.DecisionTreeClassifier的决策树分类器来对以上的数据进行训练和测试,我们需要控制决策树的深度,从1开始逐渐增加最大深度,直到获得一个完整树。由于随着最大深度的增加,过拟合现象会加剧,所以需要找到一个最佳的最大深度,来使得测试机的精度最高,笔者遍历了从1到100的所有的最大深度的决策树,经实验,当最大深度为5时,决策树具有最高的精度,再依据信息增益原理,可以得出最优化的决策树模型,如图2所示。
图2 最优决策树模型图
根据上面所提出的分类标准,例如,图2中的X[31]≤0.5即对应了判断第32个标准满足与否,即SMB是否大于6.4的判断,而按照在Label中的标记,应当买入最后的标记为1的股票,同时卖出最后标记为0的股票。
用一个比较清晰的方法重新表述一下上面的决策树模型。
图3 重新表述的决策树模型图
例如,泸州老窖(000001.SZ),其MKT值为1.46,SMB值为8.14,HML值为0.07。按照上面的决策树来对该股票进行判断,首先,其满足SMB>6.4的条件,因此在第一次判断向右进行,之后,其不满足HML>0.3的条件,因此向左进行,之后,其依次满足MKT>0.8,不满足SMB>8.6,满足SMB>6.6的条件,最终得出了应当买入的结论,这与其最近超过大盘的收益率相符合。
因此,为选定一个投资组合,只需要将股票池中的所有股票都按照以上的决策树进行判定,并买入被分类为“买入”的股票即可以构成一个投资组合。
(三)回测
利用BigQuant平台对于上文决策树策略进行回测。需要选定一个股票池,在股票池当中运用在前文所求出的决策树来判定是否应当买入,之后平均买入被分类为“买入”的股票。随机抽取50只不属于沪深300股票池的股票,并收集它们的三因子数据,对这50只股票依次按照决策树进行判断,得到了5只符合决策树买入分类的股票,并对这5只股票构成的投资组合在2016年1月1日至2021年1月1日这五年的区间内进行长期持有的无择时策略并进行回测。
图4 使用BigQuant的仅选股策略回测
可见,仅由这五只股票构成的选股无择时策略就已经战胜了基准的大盘收益率,可以看出该选股策略确实具有着优秀的选股能力。
四、结语
本文使用了决策树模型来对于传统的三因子模型进行改进,利用决策树对于股票池中的股票进行分类,将股票的各个因子作为判定结点,并创新性地提出了将连续的因子离散化的方法,最终得出了较为优秀的选股策略。本模型使用方便,易于理解,可以有效解决线性模型中系数恒定的问题并且模型能够给出明确的结论,为传统模型方法的局限性引入针对性的解决思路。本文所采用的训练和测试集仅覆盖了沪深300的所有成分股票,这些股票的市值都普遍较大并且风险与市场风险差距较小,对于特定类型的股票未必具有普适性,因此,在对于目标行业的股票进行判别时,可以使用同行业的其他股票对于模型进行再训练,让模型对于特定行业的股票具有更好的判别效果,这需要进一步的研究。其次,本文所提出的模型是一个纯粹的选股模型,它没有任何择时的功能。因此,在使用本文的选股策略的同时也可以配合使用一些择时策略,从而构建出更加优秀的投资策略。