牛晓健,魏宗皓
(复旦大学,上海 200433)
自Fama-French三因子模型提出以来,多因子模型逐渐成为一种主流的量化投资方法。多因子模型主要通过因子收益和因子暴露对股票在横截面上的收益率结构进行刻画,但在具体的建模过程中,Fama-French模型和Barra模型采用了两种不同的思路。在Fama-French模型的框架下,首先依据某一特征构建股票组合,计算多空组合的收益率作为因子收益,然后再时序上进行回归得到因子暴露,进而得到预期的收益率结构。而在Barra多因子模型的框架下,则先有因子暴露,再将当期的因子暴露和未来一期的股票收益进行回归得到因子收益。Barra多因子模型是典型的横截面回归,以最小化所有股票的定价错误为目标,通过检查所有残差项联合起来是否为零来判断模型的好坏。根据最新的Barra China Equity Model (CNE5)操作手册,Barra多因子模型中包含三类因子:1个国家因子、32个行业因子和10个风格因子。其中国家因子对应的上述方程中的截距项,所有股票对国家因子的暴露为1。风格因子细分为Size、Beta、Momentum、Residual Volatility、Book-to-Price、Non-linear Size、Earnings Yield、Liquidity、Leverage和Growth。
人工智能、机器学习的兴起为多因子模型构建提供了新的思路和方法,越来越多的学者和业界的投资者将机器学习算法引入多因子模型中来,取得了不错的效果。但是单一的机器学习算法,如支持向量机、Logistics、决策树等,在处理复杂的金融数据时经常会产生过拟合的问题,导致样本内和样本外的策略表现差距较大。本文将多因子选股当作分类问题处理,使用随机森林、Adaboost和XGboost等集成学习算法进行滚动训练,并以中证800指数成分股作为股票池,对模型表现进行回测,以验证集成学习算法在多因子模型上的适用性。
Eugene F. Fama 和 Kenneth R. French提出著名的三因子模型,将横截面股票收益率的差异归结为三个因素:市场因素、规模因素和账面市值比因素。基于这三个因素,Eugene F. Fama和Kenneth R. French构建出三个关键的因子:市场组合的超额收益、小市值股票组合和大市值股票组合的收益率之差、高账面市值比组合和低账面市值比组合的收益率之差[1]。三因子模型被认为开辟了多因子研究的先河,为后来的多因子模型研究提供了重要的思路和方法。Eugene F. Fama 和 Kenneth R. French在三因子模型的基础上,引入了盈利水平因子和投资风格因子[2],提出了五因子模型,模型的解释力进一步提高。在此之后,学者和投资者们更多的关注因子的解释力。比如Clifford S. Asness和Andrea Frazzini等从盈利性、增长性、安全性和派息率四个维度综合分析上市公司的质量,并通过综合打分的方法得到一个拥有多种度量维度的质量因子,证明了通过做多高质量股票做空低质量股票,可以获得显著的风险调整后收益[3]。Frazzini和Pedersen指出由于有约束的投资者偏好高beta资产,导致高beta的资产常常伴随着低alpha,根据这一特点,Frazzini和Pedersen构建了一个beta套利因子(BAB),即买入有杠杆的低beta资产并卖出高beta资产,可以获得显著为正的风险调整后收益[4]。范龙振、余世典通过对1995年7月至2000年6月全部A股股票月收益率的研究,证明了与国外大多数资本市场一样,我国的A股市场存在显著的市值效应、账面市值比效应和市盈率效应。同时,我国的A股市场还存在显著的价格效应[5]。杨炘和陈展辉验证了Fama-French三因子模型在我国A股市场上的适用性,指出我国A股市场存在显著的公司规模效应和股东权益账面市值比效应,市场因素、规模因素和账面市值比因素可以完全解释A股股票收益率的截面差异[6]。徐景昭利用回归的方法对使用市盈率、ROE增长率、资产负债率、月平均换手率等11个常见因子进行有效性检验,从中筛选出市净率、ROE增长率、资产负债率、月平均换手率、市值等5个有效因子,分别构建了基本的多因子模型、基于货币周期的行业轮动多因子模型以及基于固定效应下的多元回归模型,验证了多因子模型在我国市场的有效性[7]。
随着人工智能的兴起,一些研究者不再局限于因子研究和多因子模型的有效性检验,而是另辟蹊径,对机器学习算法在量化投资领域进行了探索。Eric H, Keith L和Chee K指出了传统多因子选股存在的问题,并提出应用CART(Classification and Regression Tree)的方法进行选股。该方法以科技股为研究对象,从估值、基本面营利性、一致预期和价格动量四个方面选择了Sales-Price、Cash Flow-Price、EPS-Price、ROA等6个因子作为解释变量,以个股收益率与截面收益率的中位数之差将截面股票划分为两个类别:out-perform和under-perform,并将其作为标签,分别用静态树和动态树的方法进行训练和预测,验证了动态树相对于静态树存在边际改进,暗示了不断修正建树样本的动态树模型可以更好把握市场的变动规律[8]。钱颖能、胡运发应用朴素贝叶斯分类算法来训练上海证券交易所股票的会计信息,并获得了超越市场指数的超额回报[9]。郭文伟使用了支持向量机的股市风格轮换策略[10]。方匡南、吴见彬、朱建平、谢邦昌系统地总结了随机森林方法的原理与应用,并介绍了随机森林的两种衍生模型:随机生存森林和分位数回归森林[11]。文章全面总结了随机森林方法的优势,如bootstrap重抽样的方法利于提高模型对噪声和异常值的容忍度、袋外数据便于评价组合树的泛化能力、运算速度远快于Adaboost等,为基于机器学习的量化选股提供了重要方法论。王淑燕、曹正凤、陈铭芷构建了净资产收益率、总资产收益率、市净率、EPS一致预期等16个因子作为解释变量,利用股票在时间序列上的涨跌幅均值和行业涨跌幅均值构建了响应变量,通过随机森林方法预测未来股票的涨跌[12]。焦健、赵学昂、葛新元基于我国A股的电子和信息技术两个行业的股票数据研究了CART(Classification and Regression Tree)的选股效果,并在传统的CART模型基础上进行树的修剪与过滤,最终形成行业选股框架。
多因子模型研究的是股票收益率在横截面上的差异。多因子模型的发展可追溯到William Sharpe的CAPM模型和Ross的APT模型。CAPM模型将股票收益率差异归结为系统性风险,即贝塔系数[13]。APT理论则认为资产的收益率由一系列影响因素及相应的因素敏感性决定,当市场达到均衡时,均衡的预期收益率是因素敏感性的线性函数[14]。但APT理论并没有对影响因素进行进一步的阐述。直到Fama-French三因子模型和Barra模型的出现,多因子模型的理论体系逐渐完善,并以两种模型为基础,形成了两种主流的多因子研究体系。
Fama-French和Barra的多因子模型均涉及三个关键的概念:预期收益率、因子收益、因子暴露。一个典型的多因子模型可表示为如下形式:
(1)
在Fama-French的多因子模型框架下,首先依据某一特征构建股票组合,计算多空组合的收益率作为因子收益,然后再时序上进行回归得到因子暴露,进而得到预期的收益率结构。以经典的三因子模型为例,模型的形式是:
Ri,t-Rf=αi+bi(RM,t-Rf)+si(SMBt)+hi(HMLt)+εi,t
(2)
根据该式,股票的超额回报可以被三个因子的超额回报率解释:①市场组合超额回报RM,t-Rf,RM,t为t期市场组合的超额回报,Rf为无风险利率。②规模因子SMBt。③账面市值比因子HMLt。在Fama-French的框架下,因子代表的是投资组合的收益率。具体来看,首先按照市值对因子进行排序,并以中位数为界,分成两个组合small和big。然后再根据账面市值比BE/ME对两个组合分别排序,按照30%、40%、30%的比例进一步划分,得到S/H、S/M、S/L、B/H、B/M、B/L六个组合。SMB代表小市值组合(S/H、S/M、S/L)和大市值组合(B/H、B/M、B/L)的收益率之差,HML代表的是高账面市值比组合(S/H和B/H)和低账面市值比组合(S/L和B/L)的收益率之差。得到因子收益后,按照如下形式进行时间序列回归,得到因子暴露:
(3)
(4)
Black、Jensen和Scholes在此基础上给出了计算因子预期收益的简单方法,即因子收益率在时间序列上的均值就是因子的预期收益率。所以根据因子暴露和因子的预期收益率,可以得到股票的预期收益率,从而做出投资决策。通过GRS检验等统计检验方法,检验所有股票的αi联合起来是否为零,可以评价多因子模型的解释力。
在Barra的多因子模型框架下,因子并不是投资组合的收益率,而是个股的基本面数据或是行情数据。典型的Barra模型可以表示成如下形式:
(5)
根据Barra China Equity Model (CNE5)操作手册,Barra多因子模型中包含:1个国家因子、32个行业因子和10个风格因子。其中国家因子对应的上述方程中的截距项,所有股票对国家因子的暴露为1。行业因子和风格因子对应上式中的ft,其中风格因子包括Size、Beta、Momentum、Residual Volatility、Book-to-Price、Non-linear Size、Earnings Yield、Liquidity、Leverage和Growth。
机器学习的出现为建立多因子模型提供了新的方法。比如用SVM、Decision Tree、Random Forest等算法代替线性回归进行多因子回归。再比如将股票的预期的涨跌状态(0/1变量)作为被解释变量,利用SVM、Logistic等分类算法构建多因子模型,通过F1-score和AUC等来评价多因子模型的好坏。
集成学习本身并不是一种单独的机器学习算法,而是通过训练多个弱学习器,按照一定的方式进行组合,得到最终的强学习器。至于弱学习器的算法,可以有多种选择,最常用的是Decision Tree。
Bagging和Boosting是集成学习算法的两大派别。Bagging为并行算法,同时训练多个弱学习器,各个学习器间互不影响,最终通过大多数投票等方法汇总各个弱学习器,得到最终的强学习器。Bagging算法的代表是随机森林。Boosting为串行算法,各个弱学习器间存在较强的依赖关系,通过给分类错误的样本以较高的权重来不断降低分类的错误率,最终将全部弱学习器加权得到最终的强学习器。Boosting的代表是Adaboost和XGboost。
随机森林是由Leo Breiman在2001年论文《Random Forests》中提出的一种集成学习方法[15],这一算法是由多个随机子集(Bootstrap数据集)生成的决策树实例组成,称之为“随机森林”。
1.决策树原理及数学表达
随机森林算法基于基本的决策树(Decision Tree)模型。所谓决策树模型,是通过多个特征进行分类决策,在每个节点处,按照信息增益(Information Gain)最大化的方向进行分裂,得到下一层的节点,直至分裂至最终的叶子节点。常用来度量信息增益的方式有以下两种:
(1)Gini系数
Gini系数又叫做Gini不纯度,用来表示一个随机选中的样本在子集中被错分的可能性。Gini系数为这个样本被选中的概率乘以它被错分的概率,可表示成如下形式:
(6)
当一个节点中所有的样本都是同一类别时,Gini系数为0。
其中pk为数据集D中的样本点属于k类别的概率,Gini系数可理解为随机从数据集中取出两个样本,其类别标记不一致的概率。Gini系数越小说明数据集的纯度越高。
采用Gini系数度量时,D节点根据特征A进行分裂时,分裂后的Gini系数可以表示如下形式:
(7)
其中,Gini(left)和Gini(right)分别表示左边子节点和右边子节点的Gini系数。按特征A进行分裂时,信息增益可以表示为:
IGGini=Gini(D)-Gini(D,A)
(8)
(2)信息熵
熵最早源自于热力学,用来度量分子的混乱程度,熵值越大表示系统越混乱。而信息熵则借鉴了热力学中熵的概念,信息熵越大,集合越混乱,换言之,纯度更低。信息熵可表为如下形式:
(9)
采用信息熵度量时,D节点根据特征A进行分裂时,分裂后的信息熵可以表示如下形式:
(10)
其中,H(left)和H(right)分别表示左边子节点和右边子节点的信息熵。按特征A进行分裂时,信息增益可以表示为:
IGH=H(D)-H(D,A)
(11)
决策树模型可以理解为每个节点不断地朝着信息增益最大的方向分裂为两个子节点,直至满足达到最大深度、叶子节点的Gini系数足够小、叶子节点中的样本数小于最小分类样本这三个条件中的任意一个,则停止分裂,得到最终的决策树模型。
2.随机森林
随机森林是一种基于信息论和统计抽样理论的分类算法,属于集成学习的Bagging派系,除Bagging外,集成学习还有Boosting的方法。
从上述的算法介绍可以看出,随机森林包含两个随机过程:训练样本随机和特征随机。这一特点使得随机森林模型可以有效地防止过拟合,提高模型得泛化能力。
Schapire和Freund在1995年提出Adaboost(adaptive boosting)算法。该算法将弱分类器以串行的方式集合起来。在初始训练时,每个样本被赋予相同的权重,对于分类错误的样本,提高其权重。最后以更新权重后的样本作为第二次训练的输入集,以此类推,得到各个弱分类器,最终通过加权汇总,得到最终的强分类器。
1.用带权重的样本训练弱学习器φm(x);
2.计算第m个弱分类器在权重分布ωm上的误差:
(12)
其中I表示指示函数,满足条件时返回1,否则返回0。
3.计算第m个分类器的权重:
(13)
其中τ是学习率超参数。该分类器的误差率越低,它所占的权重就越高,如果它只是随机猜测,那么它的权重接近于零,如果误差率比随机猜测还要低,则它的权重为负。
4.更新训练样本的权重分布:
(14)
其中Zm是归一化参数,
(15)
通过Zm的表达式可以看出,被分类正确的样本获得了更低的权重,分类错误的样本获得了更高的权重。
5.重复迭代,用新的权重分布训练新的分类器。当达到迭代次数要求或者得到分类准确率达到要求时,算法停止。最终按αm对各个弱分类器加权,得到最终的强学习器:
(16)
Adaboost的弱分类器同样采用上一小节中介绍的决策树模型,除此以外,常用的还有以Logistics回归为基分类器构建的Adaboost模型,即LR_Adaboost。本文使用的是基于CART决策树的Adaboost模型。
1.GBDT算法的原理及数学表达
GBDT算法即Gradient Boosting Decision Tree,可以分为Gradient Boosting和Decision Tree来分别看待。Gradient Boosting不是一种具体的算法,而是一种优化的理念。比如对于给定训练集{(x1,y1),(x2,y2),(x3,y3)……(xn,yn)},Gradient Boosting可表示为如下过程:
(1)首先估计使损失函数极小化的常数值:
(17)
其中L表示损失函数(Loss Function),θ代表弱学习器。
(2)计算损失函数的负梯度:
(18)
(3)得到{(x1,rm,1),(x2,rm,2),(x3,rm,3)……(xn,rm,n)},进行训练得到:
(19)
(4)计算最优步长:
ρm=argminρL(yi,fm-1(x)+ρθm)
(20)
(5)完成模型的更新:
fm(x)=fm-1(x)+ρmθm
(21)
(6)重复(2)到(5),直至达到既定的迭代次数或满足精度要求。
Gradient Boosting仅给出了一种优化框架,并没有指定具体的算法。GBDT(Gradient Boosting Decision Tree)则是应用Gradient Boosting框架的一种具体算法,该方法采用决策树(Decision Tree)作为弱学习器,通过不断迭代,得到最终的强学习器。
而对于二元分类问题,可以定义损失函数(Loss Function)为对数损失函数:
L(y,f(x))=log(1+exp(-yf(x)))
(22)
带入上述Gradient Boosting的优化框架,并以决策树作为弱分类器进行训练,最终得到强分类器。
2.XGboost的原理及数学表达
XGboost算法是对梯度提升决策树(GBDT)算法的改进和提升,这里介绍基于CART决策树的XGboost算法。该算法的基本框架与GBDT相似,但在构造新树时有所不同,具体总结为以下几点:
(1)XGboost的损失函数加入了正则化项,可表示成如下形式:
(23)
(2)训练第t棵CART树时,要最小化obj(t),而obj(t)进行简单变换后又可以表示成如下形式:
(24)
其中const表示常数,即前t-1棵树的复杂度。对上式进行二级泰勒展开,可得:
(25)
(26)
(3)obj(t)中的正则项使用如下形式:
(27)
其中T代表CART树的叶子节点数目,ωj表示每个叶子节点上的得分,γ和λ为惩罚系数,数值越大代表惩罚力度越大。
(4)对obj(t)进行简单变换,改变内外求和顺序,可得:
(28)
上式是关于ωj的二次函数,可直接求得极小值点:
(29)
以及目标函数得极小值:
(30)
obj*代表了树的结构的好坏,该值越小,树的结构越好。利用贪心算法枚举不同树的结构,挑选出最好的树。具体来说,对于现存得每一个叶子节点,扫描所有的额切分点,衡量切分点的标准如下式所示:
(31)
Gain表示单节点的obj*与切分后两个节点的obj*之和的差值,Gain越大说明越值得切分。
3.XGboost算法的优势
(1)传统的GBDT算法仅使用了损失函数(Loss Function)的一阶导数,而XGboost对损失函数进行了泰勒展开,用到了一阶导数和二阶导数。XGboost支持自定义的损失函数,只要保证损失函数在数学上是二阶可导的。
(2)XGboost在损失函数中引入了正则项,用于控制树的复杂度,有利于防止过拟合,减小模型的方差。
(3)XGboost支持特征抽样(借鉴了随机森林的思想),在构建弱学习器时仅使用抽样出的部分特征来训练,减小过拟合风险。
(4)XGBoost在处理特征的层面上支持并行。训练决策树最耗时的一步就是对各个特征的值进行排序(为了确定最佳分割点)并计算信息增益,XGBoost对于各个特征信息增益的计算可以在多线程中进行,大大提高了模型的训练速度。
本文使用的候选因子包括基本面因子和量价因子,数据均取自天软数据库,时间区间为2010年1月至2020年1月。基本面因子为财务指标,包含盈利能力、收益质量、偿债能力、成长性、估值水平和公司规模6个维度,如表1所示。量价因子既包括常见的收益率反转、波动率和换手率。如表2,也包括利用遗传算法挖掘的部分因子。遗传算法方面,本文借鉴了Github上Genetic Programming算法的框架,并对这一算法进行了深度改造,重新编写运算符、适应度计算、表达式解析等模块,使其适用于因子挖掘,相关参数设置如表3。
本文使用IC和信息比率作为因子有效性的评价标准,并根据因子间的相关度,对部分因子进行剔除。最终保留6个基本面因子,相应的评价指标如表4所示。保留1个月收益率反转因子、12个月波动率因子和12个月换手率因子,如表5所示。保留7个利用遗传算法构建的因子特征,如表6所示。
表1 待检测的基本面因子及其计算方式
表2 待检测的量价因子及其计算方式
表3 遗传算法的相关参数
表4 保留的基本面因子及评价指标
表5 保留的收益率反转、波动率和换手率因子
表6 遗传算法挖掘的量价特征
为了验证集成学习算法在多因子模型问题上的有效性,本节将以上一章筛选出的16个因子作为特征,分别使用随机森林、Adaboost和XGboost等算法进行滚动训练,实现对股票未来涨跌状态的预测。同时,将模型与同期的指数和传统打分法进行对比,说明策略的有效性。具体步骤是:
第一,提取数据。从天软数据库提取中证800历史成分股的相关数据,数据区间为2010年1月-2020年1月。需要说明的是,这里要对股票池进行动态调整,保证调仓日的股票池与中证800当天的成分股一致。
第二,特征和标签的构建。以16个候选因子作为特征,并对特征进行预处理。预处理方法包括中位数法去极值和行业内标准化。计算个股未来20个交易日的收益率,排名前30%的股票作为正例,标签为1,排名后30%的股票作为负例,标签为0。这样每只股票就作为一个样本,样本的标签是1或0,特征是该股票在当前时刻的因子暴露为维的向量。
第三,模型的训练。采用滚动训练的方法进行模型训练,训练集长度为12个月,测试集长度为3个月。
第四,模型的评价。以AUC和策略的回测表现作为模型的评价指标。进行回测时,根据模型在测试集的预测进行调仓,调仓频率为月频,每个调仓日选取预测值最高的50只股票构建投资组合,组合内按流通市值加权,手续费设置为双边千分之二。以中证800指数和等权打分法作为比较基准。
本小节展示随机森林算法的建模结果。在进行训练时,使用网格调参进行参数寻优,同时对输入特征的重要程度进行了检测,目的是剔除不重要的特征,降低过拟合风险。特征重要性以信息增益来度量,即计算各个特征在每棵子树中提供的信息增益的平均值,信息增益的均值越高,特征的重要程度越高。16个候选因子的重要程度如表7所示。总体来看,各个特征的重要程度分布比较平均,不存在重要性特别低的特征,说明第3章构建的因子特征能够提供比较明显的信息增益,无须进行剔除。
表7 因子重要程度
随机森林算法测试集的AUC表现如图1所示。AUC的均值达到0.577,除个别月份外,AUC值均保持在0.5分界线的上方,分类的准确率和稳定性较好。模型测试集的回测表现如图2所示。2011年至今,随机森林模型的年化收益率达到20.817%,而等权打分法和中证800指数的年化收益率分别为13.173%和4.23%,具体的评价指标如表8所示。为评价随机森林策略的稳定性,本文进行了分年度回测,随机森林、等权组合和中证800指数各年份的收益率如表9所示。随机森林策略仅在2015年和2018年小幅跑输等权打分法,其余年份均明显占优,说明相比于等权打分法,随机森林策略具有明显的优势。与中证800指数相比,随机森林策略各年份的超额收益也比较稳定,仅在2020年一月份小幅跑输指数,其余年份均明显优于指数。
图1 随机森林测试集AUC变化
图2 随机森林策略净值变化
表8 随机森林、等权打分法和中证800表现对比
表9 随机森林、等权打分法和中证800分年度表现对比
本小节展示使用Adaboost算法的建模结果。进行模型训练时,使用了网格调参对基学习器的个数(n_estimators)和学习率(learning_rate)两个参数进行调优。基学习器的个数和学习率是boosting框架下的重要超参数,这两个参数通常应该结合来看。基学习器的个数决定了迭代的次数,而学习率决定了每次梯度下降所取得“步长”,所以这两个超参数共同决定了损失函数能否收敛至局部最小值以及以何种方式收敛至最小值。基学习器的个数较大时,如果学习率较小,会导致收敛速度较慢,如果学习率较大,可能导致损失函数在最小值附近反复跳跃,或无法收敛至最小。基学习器数量较少时,如果学习率较低,可能导致在距离最小值较远的地方停止,如果学习率较大,同样会导致梯度反复跳跃的情况出现。所以选择合适的基学习器个数与学习率显得尤为重要。
Adaboost算法测试集的AUC表现如图3所示。AUC的均值为0.570。采用与随机森林策略相同的方法对Adaboost策略进行回测,绘制的累计净值曲线如图4所示,并计算评价指标如表10所示。发现Adaboost策略的表现明显优于等权打分法,等权打分法的年化收益率为13.173%,而Adaboost的年化收益率达到了22.096%。从分年度结果来看,如表11,Adaboost策略仅在2012年小幅跑输等权打分法,其余年份均明显占优。在与中证800指数的对比中,Adaboost策略的表现同样亮眼,每年都战胜了同期的指数。
图3 Adaboost测试集AUC变化
图4 Adaboost策略净值变化
表10 Adaboost、等权打分法和中证800表现对比
表11 Adaboost、等权打分法和中证800分年度表现对比
XGboost在训练基学习器时借鉴了随机森林的思想,可以对树的最大深度进行设置,降低过拟合风险。本文滚动训练XGboost模型时,对基学习器个数、学习率和树的深度进行了寻优,其余参数使用默认值。模型测试集的AUC表现如图5所示。AUC的均值为0.573。模型累计净值曲线、评价指标和分年度表现如图6、表12和表13所示。XGboost策略的年化收益率为18.986%,低于随机森林和Adaboost,但仍然优于等权打分法和中证800指数。XGboost在2019年和2020年1月的表现不如等权打分法,其余年份表现尚可。在与指数的对比中,XGboost在2013年、2014年和2019年小幅跑输指数,2020年1月份大幅落后于指数,其余年份战胜了指数。总的来看,XGboost策略在2019年后表现平平。
图5 XGBoost测试集AUC变化
表13 XGboost、等权打分法和中证800分年度表现对比
从上述实证结果来看,将多因子选股当作分类问题来处理,使用分类算法滚动训练模型取得了不错的效果。如表4-8所示,随机森林和Adaboost的回测效果比较出色,年化收益率分别达到了20.817%和22.096%,夏普比率分别为0.905和0.957。XGboost的效果稍逊,年化收益率18.986%,夏普比率为0.828,但还是在大部分年份战胜了等权打分法和中证800指数。说明在因子相同的条件下,采用机器学习算法来构建多因子策略要优于等权打分法。
对于表现较好的两个模型——随机森林和Adaboost,可以按照一定的方式进行复合,以进一步提高模型的表现。本文采用软投票的方式对随机森林和Adaboost进行了组合,即将随机森林预测样本类别为1的概率与Adaboost预测样本类别为1的概率取平均,作为最终的预测结果,每次仍然取预测类别为1的概率最高的50只股票进行建仓。采用这种软投票的方法进行模型组合的回测表现如表14所示,累计净值曲线如图7所示。可见,通过模型组合,获得了比单一模型更好的收益表现,年化收益率提高到22.697%,夏普比率提高到0.987。
表14 不同模型表现对比
图7 组合策略的净值变化
本文将多因子选股当作分类问题处理,使用随机森林、Adaboost、XGboost等集成学习算法进行滚动训练,实现对股票未来涨跌状态的预测,并对模型在测试集的AUC和投资表现进行了回测。发现在使用的因子相同时,使用集成学习算法进行滚动训练获得了比等权打分法更好的年化收益率和夏普比率,而且在每年均战胜了基准指数。
本文的研究过程主要分为两个步骤。首先进行了单个因子的构建,包括基本面因子和量价因子。在进行构造量价因子时,使用了遗传算法,增加了因子的多样性。本文以信息比率和累计IC为标准,最终保留16个因子来构建多因子模型。其次,本文使用了3种常见的集成学习算法滚动地训练分类模型,训练集和测试集的长度分别为12个月和3个月。对模型在测试集上的投资效果进行回测,发现使用集成学习算法进行滚动训练的效果明显优于等权打分法和中证800指数,其中随机森林和Adaboost的表现更优,夏普比率分别达到0.905和0.957。最后,对于表现较好的两个模型——随机森林和Adaboost,使用软投票的方法对模型进行组合,实现了对原有模型的增强,新模型的夏普比率提高到0.987。
通过实证检验,本文证明了使用集成学习算法来构建分类器,可以获得比传统的多因子打分法更好的效果,且在2011—2019年每年均战胜了基准指数,表现比较稳定,适合指数增强型基金产品。在实际投资中,指数增强型基金的目标是提供高于标的指数的收益,本文的股票池设置为中证800指数的成分股,根据模型预测结果按月调仓,在回测区间内,每年均战胜了中证800指数,超额收益相对稳定,为指数增强产品提供了一种新思路。