【广发金融工程】2018年重磅专题系列之八:机器学习多因子动态调仓策略
新浪财经
影响因子风格轮动的宏观经济变量和市场变量有很多,比如CPI、汇率、国债利率、市场的波动率,等等。这些变量对因子收益率影响的方式各不相同,这种复杂关系很难通过线性模型来刻画。
以XGBoost模型为代表的提升树模型是一类性能强大的非线性机器学习模型,相对于线性回归等模型,它不对输入特征的分布有过多假设,对异常值更加鲁棒,且能够学习到特征之间复杂的非线性关系。一般来说,我们可以通过对特征做交叉、采用核函数等方式,使得线性模型也能处理非线性问题,但是如何做特征交叉、选择什么核函数都需要人工干预。事实上,要在模型学习前确定合理的特征交叉方式和核函数是很有难度的。而在提升树模型中,随着决策树的“生长”,提升树模型能够自适应地产生高度非线性的模型。此外,相对于神经网络等复杂模型来说,提升树模型的可解释性较强,可控性更好。因此,本报告中采用提升树模型来预测因子的有效性。
本报告提出的基于XGBoost模型的多因子动态调仓策略是综合了以上两类因子择时思想,分别将因子的历史IC序列、宏观经济变量、市场变量等信息作为特征,采用性能优良的XGBoost模型对因子IC进行预测,根据IC值动态调整各个因子的权值。二、策略原理
2.1 因子择时框架
在我们此前的多因子Alpha系列报告中,我们已经建立了一个完整的多因子Alpha选股模型,包括风格因子库的建立、风格因子有效性的检测、Alpha因子的整合以及组合优化和对冲等主要步骤。本报告主要侧重于Alpha因子的整合和赋权。如下图所示,本报告选择了7大类常见的风格因子,然后将宏观变量、因子历史IC序列以及市场变量作为输入的特征,利用XGBoost模型来预测每个风格因子未来的IC值。在Alpha因子整合阶段,根据预期的IC值对各个因子赋权。
2.2 风格因子的选取本报告从常见的盈利、质量、成长、估值、规模、流动性、技术等7大类因子中选取7个典型因子作为研究对象,所选因子如下表所示。
每个因子都采用分位数变换进行标准化,只保留因子排名信息,这种标准化方法的优点是可以避免极端值的影响。2.3 外部变量的选取A股市场受市场交易行为以及宏观经济因素的影响较大,因此风格因子的有效性也与市场变量和宏观变量密切相关。本报告选择了6个市场变量,其中:沪深300指数和中证500指数最近20日的涨跌幅用来表征大小盘市场的强弱,最近20日的波动率用来表征市场波动性的高低,最近20日平均换手率用来表征市场流动性的好坏。另外,选择了7个关键的宏观经济变量:CPI同比、M1同比、M2同比、一周上海银行间同业拆放利率(SHIBOR1W)、PPI同比、PMI和美元兑人民币汇率。值得注意的是,宏观经济类的数据通常在次月公布,因此实际应用时,此类数据有一个月的滞后期。此外,有些宏观变量在时间轴上的分布非平稳,不同时期的取值可能存在很大的差别,不具备可比性。如下图所示,2009年下半年M2同比创下新高,此后保持下降趋势。可以通过对其作一阶差分,得到更加平稳的时间序列,使不同历史时期的取值具有可比性。从实际的角度来说,人们有时候对变量取值变化的敏感度要超过对变量取值本身,因此差分处理是一种可行的方法。
不同的外部变量具有不同的分布特性,需要采取不同的处理方法,使他们具有相对合理的分布。
2.4 XGBoost模型简介提升(Boosting)是一种集成学习方法,从弱学习算法出发,反复学习,得到一系列弱学习器,然后对这些弱学习器进行组合,最后构成一个强学习器。提升树(Boosting Tree)是以分类树或回归树为基本分类器的提升方法,它被认为是统计学习中性能最好的方法之一。多棵树的线性组合可以很好地拟合训练数据,能够刻画输入与输出数据之间复杂的非线性关系。因此它是一个功能强大的学习算法,近年来获得了非常广泛的应用,在各大知名机器学习比赛上(例如国外的Kaggle平台,国内的天池平台),获奖选手几乎有一半以上都会使用到这个模型。
由于提升方法应用广泛而且有效,这方面的研究和算法很多,其中最具代表性的是AdaBoost算法和梯度提升算法(Gradient Boosting)。本报告采用的XGBoost模型是近年来非常热门的一种机器学习模型,全称是eXtreme Gradient Boosting,由华盛顿大学的陈天奇博士发起,是梯度提升树的一种高效实现,曾经横扫Kaggle大赛。XGBoost模型不仅支持以分类回归树(CART)为基分类器,还支持线性分类器。
我们以一个简单的回归例子来说明以CART为基分类器的XGBoost模型在预测股票涨跌上的应用。假设输入X为个股的当期因子值,如PE、PB、总市值、流通市值、月换手率、月回报率等,输出Y为股票在未来20个交易日的回报率,选择树的棵数M=2,则模型结构如下图所示。XGBoost的模型预测结果是树1和树2的预测结果的加和。
以上的例子是一个回归问题,常见的目标函数为平方误差函数,最后的预测值是每棵树上得分的总和。我们也可以选择交叉熵等函数作为目标函数,这样就可以处理分类问题。在进行预测的时候,模型的预测值等于不同决策树预测值的加和。三、多因子动态调仓策略3.1 XGBoost预测模型因子择时的核心是动态地调整多因子组合中每个风格因子的权重,即赋予未来一期有效的风格因子更高的权重,赋予无效的因子较小的权重或者直接剔除。因子IC表示因子值与个股下期收益率之间的相关系数,能够反映因子提供超额收益的能力。IC的绝对值越大,说明因子取值与个股下期收益率之间的相关系数越高,选股能力越强。
本报告选取7类风格因子,其中盈利因子(ROE)、质量因子(速动比率)、成长因子(ROE同比)、估值因子(EP)为正向因子,而规模因子(流通市值)、流动性因子(月成交金额)、技术因子(20日股价反转)为负向因子。因此,本报告通过以下方式定义因子的有效性:
对于正向因子,若未来一期因子IC > 0,则因子有效,且取值越大说明因子越有效,IC < 0则认为该因子无效;
同理,对于负向因子,若未来一期因子IC < 0,则因子有效,且绝对值越大说明因子越有效,IC > 0则认为该因子无效。
本报告基于XGBoost模型,利用宏观变量、因子历史IC序列和市场变量等信息来预测每个风格因子未来一期的IC值,然后根据预测的IC值对风格因子赋予权重。
一般的,预测时间间隔越短,机器学习模型的预测能力会越强,但是短时间内股票价格的涨跌幅度一般较小,可能不足以覆盖交易成本及买卖股票对市场造成的冲击。综合考虑到模型预测的准确程度和交易成本,本报告选择以周为换仓周期,机器学习模型也选择以周为预测周期,即在每天收盘时进行预测,预测中证500成份股5个交易日之后的回报率与风格因子当前取值之间的相关系数。
在模型输入特征的选择上,本报告主要从因子历史IC序列及外部变量两个方面来提取特征,而外部变量又分为市场变量和宏观变量两部分。其中,从风格因子历史IC序列出发,我们提取了不同频率下(日频、周频和月频)每个因子上期的IC值,时间间隔分别为1天、5天和20天,总共得到21个特征。而外部变量包括6个市场变量和7个宏观变量。这样,整个模型共包含34个特征。此外,本报告对每个风格因子都建立了预测模型,因此总共有7个模型,模型输入为相同的34维特征,输出为下期的IC值。
本报告中,多因子策略的选择股票池为中证500指数成份股,以2008年1月至2013年12月的市场行情为样本内训练数据,以2014年1月以来市场行情为样本外回测数据。一般来说,对机器学习模型进行训练时,我们希望有更多的样本,这样训练得到的模型泛化能力更强、稳定性更高。但是,某些情况下市场风格比较多变,比较早期的历史市场结构可能与当前市场结构差别较大。在这种情况下,相距比较久远的历史样本可能反而产生负面的作用,所以我们选择训练样本时,也需要考虑训练样本与待预测样本的关系。比如2017年以来,在历史上具有良好表现的规模、反转等因子表现不佳,我们希望模型能够在一定程度上跟随当前市场的特点。因此,如图4所示,模型的训练采用两种方式,一种是固定的预测模型,即模型在样本内训练完以后,不再更新。样本内共有1456条样本,样本外共有972条样本。另一种是滚动训练预测模型,每个季度采用最新的数据更新模型,保持训练集样本数一致。从实证结果来看,进行滚动更新的模型可以取得更好的表现。
在实际训练时,我们将样本内数据按照4:1随机切分成训练集和验证集,通过模型在验证集上的表现来确定模型的超参数。XGBoost模型需要调节的参数主要包括弱学习器数量、学习率 、树的最大深度、子采样率和特征随机采样比例。3.2 特征重要性分析我们以ROE这个因子对应的IC预测模型为例,分析特征的重要性。如图5所示,中证500波动率和M1同比增长率是相对来说最重要的特征,这也说明了我们将市场变量和宏观经济变量纳入模型特征是很有必要的。在某些情况下,我们可以设定一个阈值α,将相对重要性低于这个阈值的特征删除,有时候能够起到抑制过拟合、加快模型训练速度的效果。而在本例中,特征维数不大,且没有相对重要性显著很低的特征,因此不作特征筛选。
3.3 模型预测效果评估为了评估XGBoost模型的预测效果,我们选择了四种评价指标,分别是因子IC值的预测误差、风格轮动的秩相关系数、单因子择时选股效果以及多因子动态调仓策略效果。(一)预测误差
考虑到模型预测周期较短(周频),风格因子具有一定的动量效应,我们拿上一期因子的IC值作为下一期IC值的估计值,将这个估计值作为基准,来比较模型的预测效果。我们选择的指标为平均绝对误差(Mean Absolute Error, MAE),即不同样本的IC预测值与真实值之差的绝对值的平均。
模型在样本外的预测结果如表2所示,相对于基于动量效应的因子IC估计值,XGBoost模型预测得到的IC值与实际IC值之间的平均绝对误差明显更小,平均的误差降低率在20%左右。
(二)风格轮动的秩相关系数 因子IC指的是截面因子值与个股下期收益率之间的相关系数,能够反映因子提供超额收益的能力。本报告提出的多因子策略根据模型预测得到的IC值给各个初始因子赋权,因此与因子IC类似,在这里我们定义风格轮动的秩相关系数,它代表了在横截面上,7个风格因子的IC预测值与实际值的秩相关系数。这个值越大,说明预测效果越好。如果风格轮动的秩相关系数为0,说明预测结果是随机的。
如图6所示,XGBoost模型预测得到的因子IC值与实际值之间的秩相关系数在样本外的平均值达到18.19%,显著高于风格动量模型的7.79%,这说明模型能够很好的预测因子IC值之间的相对大小关系。
(三)单风格因子择时效果我们对比了7个初始因子自2014年以来在中证500成份股内通过单因子选股和单因子择时选股的表现。调仓时将股票池均分成10档。单因子选股时始终按照因子得分取最高的一档;单因子择时选股时,如果预测未来一期因子有效则按照因子得分取最高一档,否则选择持有中证500指数。两种策略样本外表现如表3所示。单因子择时选股时,年化超额收益较不择时有所降低,但是年化波动率都显著降低,最大回撤也普遍更小,7个因子中有4个因子的信息比得到了提升,这证明了因子择时是有效果的。
3.4 多因子动态调仓策略策略模型的实际效果最终要从多因子动态调仓策略的表现中去验证。本报告中以周为调仓频率,在t时刻我们通过XGBboost模型预测各个因子在未来一期选股的IC值,即预测个股在5个交易日后的回报率与当前因子取值之间的相关系数。本报告选取的7个风格因子,其中盈利因子(ROE)、质量因子(速动比率)、成长因子(ROE同比)、估值因子(EP)为正向因子,而规模因子(流通市值)、流动性因子(月成交金额)、技术因子(一个月动量)为负向因子。本报告提出的多因子动态调仓策略通过以下方法对风格因子赋权:
也就是说,每期选股时,只选择IC预测值与因子方向相同的因子,按照预测的IC绝对值进行加权;而将IC预测值与因子方向相反的因子剔除,即赋予零权重。其余回测参数设置如下:
调仓周期:5个交易日;
股票池:中证500成份股,剔除ST股票,剔除交易日停牌的股票;
超配组合:调仓时将股票池均分成10档,等权买入复合得分最高一档的个股;
对冲方案:中证500指数对冲;交易成本:千分之三。四、多因子策略表现
4.1 策略实证结果为了验证基于XGBoost模型的多因子动态调仓策略的有效性,首先我们将因子等权策略作为对照基准,即对全部7个初始因子采用最简单的平均加权法进行多因子组合构造。因子等权策略在2014年以来累积收益率为55.83%,最大回撤为11.26%,该策略自2017年以来表现不佳,出现较大的回撤。
同时,我们考察基于风格因子动量效应的多因子动态调仓策略,即对于每个初始因子,我们都将上一期的IC值作为下一期IC值的估计值,根据IC的估计值对因子进行动态加权。该策略在2014年以来累积收益率仅有45.77%,最大回撤为13.92%。该策略的整体表现不如因子等权策略。
最后,我们考察基于XGBoost模型的多因子动态调仓策略,即根据XGBoost模型对每个初始因子未来一期IC值的预测,以本报告3.4节中描述的方式对因子进行动态加权,因子权重如下图所示。从图中可以看出,流通市值、月成交金额、一个月动量的权重占比较大,3者的占比之和平均约在70%以上。该策略在样本外的表现如图8所示。该策略在2014年以来累积收益率达到88.18%,最大回撤为15.36%。

三种多因子策略的样本外回测表现对比如表4所示,与因子等权策略相比,基于XGBoost模型的多因子策略的年化收益率有明显提升,信息比为因子等权策略的1.19倍,但是最大回撤比因子等权策略要高。
4.2 策略增强为了增强模型的表现,本报告从限制换手率和滚动更新机器学习两方面来考虑。(一)限制换手率
因子等权策略是固定比例加权,不同期选取的组合相对更稳定,平均换手率较低;而因子择时类策略每期都会对各个因子的权重进行动态调整,因此导致换手率显著提高。较高的换手率导致组合收益被交易成本蚕食。如果降低组合的换手率,有望减小交易成本损耗,提高策略的表现。
在上述交易策略中,我们在调仓时将股票池分成10档,等权买入复合得分最高一档的个股(个股总数的10%)。为了降低每期选股的换手率,我们考虑设置一个包含K只股票的缓冲池,如果上期持有的个股排名在最新打分的最高一档或者在缓冲池内,那么这些股票优先保留,保留的股票数目如果少于股票池内个股总数的10%,则按照个股复合得分排名,从高到低选择新股票予以补充,仍然保持每期等权买入的股票数为股票池内个股总数的10%。
限制换手率能够减小由交易成本引起的损失,但是缓冲池的存在会导致Alpha的损失,因此限制策略换手率实质上在Alpha和交易成本之间做一个权衡。从回测表现来看,通过设置缓冲池来限制换手率能够带来更好的策略表现。
(二)滚动更新模型
金融市场瞬息万变,为了让机器学习模型能够及时学习到市场特征的变化,还可以通过滚动训练的方式,每隔一段时间更新机器学习模型。本报告中,我们在每个季度采用最近几年的滚动数据更新模型,但保持训练集样本数量一致。根据XGBoost模型对每个初始因子未来一期IC值的预测,对因子进行动态加权,因子权重如下图所示。从图中可以看出,从2017年5月开始,流通市值、月成交金额和一个月动量这三个因子权重之和的占比较之前显著减小,EP和ROE权重的占比显著提高。而规模、反转、流动性等因子从2017年4月份开始表现不佳,这说明滚动训练的模型更好地追踪到了市场风格的这一种变化。
将缓冲池个股数限制在股票池个股总数的15%,模型滚动训练的多因子策略在样本外的表现如图10所示。该策略在2014年以来累积收益率达到107.89%,周度胜率达到63.21%,年化收益率达到20.08%,最大回撤仅为7.68%。
模型滚动训练的多因子策略与固定模型的多因子策略以及因子等权策略在样本外的表现对比如表5所示,其中模型滚动训练的多因子策略与固定模型的多因子策略的缓冲池个股数限制在股票池个股总数的15%,因子等权策略不对换手率作任何限制。模型滚动训练的多因子策略的信息比为1.74,分别较因子等权策略和固定机器学习模型的多因子策略提高了59.6%和27.9%,而且在胜率、年化收益率、最大回撤等多项指标上也有明显提升。
风险提示:策略模型并非百分百有效,市场结构及交易行为的改变以及类似交易参与者的增多有可能使得策略失效。