本文构建了基于量价的人工智能选股体系并测试其有效性
步骤1:遗传规划自动挖掘因子——因子的适应度、增量信息和挖掘效率
步骤2:机器学习模型进行多因子合成——强拟合能力和过拟合的权衡
相比线性模型,机器学习模型有更强的拟合能力,能够拟合非线性关系。实际应用中,需要在机器学习的强拟合能力和过拟合现象间寻找平衡点。针对机器学习模型易过拟合的缺点,我们引入特征选择和时序交叉验证调参。本文选择嵌入式特征选择方法——随机森林模型,在模型训练时自动进行特征选择,并使用时序交叉验证对模型的三个关键参数寻优。
步骤3:机器学习模型的可解释性分析——从“黑箱”到“白箱”
模型的可解释性是指人类能够理解其决策原因的程度。优秀的可解释性有助于打开机器学习模型的“黑箱”,提升人类对模型的信任,其重要性体现在:建模阶段,辅助研究人员理解模型,进行模型的对比选择,必要时优化调整模型;在投入运行阶段,向他人解释模型的内部机制和结果,并通过可解读的反馈结果不断优化模型。本文主要使用基于SHAP值的方法进行模型可解释性分析。
基于量价的人工智能选股能提供独立于传统多因子模型的增量超额收益
本文从日频量价信息出发,通过遗传规划滚动挖掘调仓周期为20个交易日的因子,并使用随机森林模型拟合得到合成因子。合成因子进行行业、市值、20日收益率、20日波动率、20日换手率五因子中性化后,RankIC均值为8.87%,IC_IR为1.16,分五层测试中TOP组合年化超额收益率为9.65%,信息比率为3.08。将合成因子叠加到使用传统因子的模型上后构建中证500增强选股组合,可使得组合的年化超额收益率平均提升1.38%,信息比率平均提升0.14。SHAP值可解释性分析显示,随机森林模型有效利用了遗传规划挖掘出的线性因子和非线性因子。
风险提示:通过人工智能模型构建的选股策略是历史经验的总结,存在失效的可能。遗传规划所得因子可能过于复杂,可解释性较低,使用需谨慎。机器学习模型存在过拟合的风险。机器学习模型解释方法存在过度简化的风险。
本文研究导读
1.目前人工智能技术能融入多因子选股的哪些环节?
2.如何构建基于量价的人工智能选股体系?体系中各个步骤的关键问题和解决方案是什么?
3.基于量价的人工智能选股体系测试效果如何?
人工智能融入多因子选股体系
从多因子选股到人工智能选股
多因子选股模型是当前最重要的定量管理模型之一,被广泛应用于构建主动量化、指数增强、量化对冲组合。多因子选股模型由套利定价模型(ArbitragePricingTheory,APT)发展而来,模型定量刻画了股票预期收益率与股票在每个因子上的因子载荷(风险敞口),以及每个因子每单位因子载荷(风险敞口)的因子收益率之间的线性关系,其一般表达式为:
传统的多因子选股模型主要包含三个步骤:因子生成、多因子合成、组合优化和风险控制。作为一种截面上的统计模型,多因子选股模型与人工智能模型有诸多共通之处,可借助大量人工智能领域的方法来做改进。如图表1所示,经过华泰金工前期报告的探索,我们认为人工智能模型已经可以很好融入多因子选股模型的前两个步骤:因子生成和多因子合成。
2.对于多因子合成步骤,传统多因子模型中一般使用线性回归、ICIR加权等线性模型来合成因子,其优点是模型简单可控。在人工智能领域,则有各类机器学习模型(如随机森林、XGBoost、神经网络等)能替代线性模型来进行因子合成。相比线性模型,机器学习模型有更大的模型容量(capacity),可以利用大量数据和高维因子,并进行非线性关系拟合。
基于量价的人工智能选股体系概览
1.原始量价数据:这里指个股在某个频率(从分钟频到日频)上的量价信息,包含开盘价、收盘价、最高价、最低价、成交量等,具体选用何种频率的量价数据,与策略的换手率有很大关系。
(1)遗传规划中适应度的定义:我们认为在选股因子挖掘的过程中,适应度的定义是一个重要环节。如果以因子的RankIC作为适应度,则可以挖掘线性因子;如果以因子的互信息为适应度,则可以挖掘非线性因子。如图表3和图表4所示,不同于线性因子,非线性因子的收益和因子暴露之间并非为单调关系,该类因子可能描述了市场中更高维度的规律,如果能利用这种规律,则可能为现有体系提供增量的alpha信息。
a)利用并行计算:例如遗传规划某一代中要遍历500个因子,可将500个因子平均分为10组,交给10个线程(或进程)并行计算。
b)利用速度更快的语言或程序包:单个因子涉及到大量的矩阵运算,可考虑使用C/C++等高性能语言实现。对于Python来说也有一些高性能计算的程序包可以使用,例如Bottleneck,详细内容可参见附录2。
3.机器学习模型进行因子合成:在这个步骤,我们使用机器学习模型(如随机森林、XGBoost、神经网络等)来替代线性模型进行因子合成。相比线性模型,机器学习模型有更大的模型容量,可以综合利用遗传规划挖掘出的线性和非线性因子。针对机器学习模型易过拟合的缺点,我们引入特征选择和时序交叉验证调参的方式来缓解过拟合。
(1)特征选择:特征选择方法可以缓解模型的“维数灾难”,提升泛化能力。相比于传统的因子来说,通过遗传规划挖掘出的因子可解释性较差,因子存在失效的可能,因此特征选择变得更加重要。如图表5所示,特征选择的大类方法有过滤式、包裹式、嵌入式三类。
a)过滤式:该方法先使用特征选择对原始特征集合进行“过滤”,再基于过滤后的特征训练模型,这一特征选择过程与后续模型的训练无关。
c)嵌入式:将特征选择和后续模型训练融为一体,即在模型训练过程中自动完成特征选择,例如Lasso回归、随机森林可视为嵌入式特征选择方法。
关于特征选择的更详细内容可参见本系列前期报告《人工智能选股之特征选择》(2018.7.25)。
4.机器学习模型的可解释性:由于原理复杂,多数人倾向于认为机器学习模型是一个“黑箱”,然而近年来对于机器学习模型可解释性方面的研究也有较大进展。模型的可解释性是指人类能够理解其决策原因的程度。优秀的可解释性有助于打开机器学习模型的“黑箱”,提升人类对模型的信任,其重要性体现在:建模阶段,辅助研究人员理解模型,进行模型的对比选择,必要时优化调整模型;在投入运行阶段,向他人解释模型的内部机制和结果,并通过可解读的反馈结果不断优化模型。本系列前期报告《揭开机器学习模型的“黑箱”》(2020.2.6)有过详细介绍。
特征重要性:对于基于决策树的随机森林、XGBoost模型来说,都可以根据决策树的分裂准则计算特征重要性。特征重要性能够给出各个选股因子的“权重”,从而能得知模型做出决策的主导因素。
(1)通过对比不同模型中各个因子的SHAP值,可得知模型对于因子的使用差异,从而辅助挑选合适的模型。
(2)SHAP值能给出各个因子的作用方向(如因子是正向的、负向的、或是非线性的),使得研究人员能得知模型对于因子的使用是否符合预期。
SHAP值能分析因子之间的交互作用,从而辅助分析模型对多个因子的交互使用机制。
基于量价的人工智能选股体系测试流程
数据准备
1.股票池:全A股,剔除ST、PT股票,剔除每个截面期下一交易日涨跌停和停牌的股票。
2.原始数据为未经过特征工程的个股量价信息,如图表6所示。
3.挖掘因子所需的函数列表如图表7所示。
使用遗传规划进行因子挖掘
以滚动方式挖掘因子:从2011年1月31日到2020年1月23日,每隔一年,使用过去6年的原始量价数据作为样本内数据挖掘因子。每次挖掘的流程如图表8所示,具体步骤如下:
1.初始化种群:设置种群大小为500,进化代数为4代。使用图表6中的因子和图表7中的函数集,生成大量因子。
2.公式适应度的计算:以挖掘增量信息为目标。第一轮挖掘时,以剔除风格因子(行业、市值、20日收益率、20日波动率、20日换手率)的残差收益率为预测目标,计算因子的适应度。从第二轮开始,以上一轮的残差收益率为预测目标,计算因子的适应度。
3.因子适应度判断:计算因子和残差收益率之间的适应度(RankIC或互信息),如果因子的适应度大于0.015,则因子进入备选池。
4.按照遗传规划的流程逐代进化。
6.以收益率为因变量,全部已有因子为自变量,回归得到残差收益率,供下一轮因子挖掘使用。
重复以上(1)~(6)步,进行多轮因子挖掘,直到达到停止条件:预设的最大轮数或者不能挖出新因子,则停止。由于算力有限,本文设置最大轮数为5轮。
使用机器学习模型合成因子
1.模型选择:为了简单起见,本文选择嵌入式特征选择方法,即在模型训练时自动进行特征选择。这里我们选择随机森林模型,该模型具有非线性拟合能力,可以自动进行特征选择,且可通过行采样和列采样来缓解过拟合。
2.特征预处理:
(1)使用遗传规划挖掘出的因子作为特征。
(2)中位数去极值:设第T期某因子在所有个股上的暴露度序列为,为该序列中位数,为序列的中位数,则将序列中所有大于的数重设为,将序列中所有小于的数重设为;
(3)行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值做线性回归,取残差作为新的因子暴露度;
(4)标准化:将中性化处理后的因子暴露度序列减去其现在的均值、除以其标准差,得到一个新的近似服从N(0,1)分布的序列。
3.数据标注:使用经过标准化的个股未来20个交易日收益率。
样本外预测:在每个样本外数据截面上,使用最新训练的模型预测个股20个交易日后的收益率。
组合构建和回测
对于随机森林模型合成的因子,进行以下测试:
1.单因子IC测试和分层测试。分析因子的RankIC均值、ICIR、分层组合年化收益率等指标。
2.构建行业市值中性的中证500增强策略进行回测。分析策略的年化超额收益率、信息比率、超额收益最大回撤等指标。
机器学习模型的可解释性分析
对训练好的模型分析特征重要性和SHAP值,从而得知因子在模型中的权重和作用方向。
测试结果
本章将对基于量价的人工智能选股体系进行详细测试。由于我们使用遗传规划挖掘因子并利用随机森林合成因子,测试的模型简称为“遗传规划+随机森林”模型。
“遗传规划+随机森林”模型的单因子IC测试
我们将“遗传规划+随机森林”模型在每个截面上的预测结果视为合成的单因子,进行单因子IC测试。测试方法如下:
1.回测区间:2011年1月31日到2020年1月23日。
2.截面期:每隔20个交易日,用当前截面期因子值与当前截面期至下个截面期内的个股收益计算RankIC值。
3.为了分析合成因子的增量信息,会展示因子进行行业、市值、20日收益率、20日波动率、20日换手率五因子中性化后的测试结果。
图表12~图表13展示了合成因子的IC测试结果,合成因子在进行了五因子中性后,RankIC均值为8.87%,IC_IR为1.16,增量信息显著。
“遗传规划+随机森林”模型的单因子分层测试
我们将“遗传规划+随机森林”模型在每个截面上的预测结果视为合成的单因子,进行单因子分5层测试。测试方法如下:
1.股票池、回测区间、截面期均与IC测试一致。
2.换仓:在每个截面期核算因子值,构建分层组合,在截面期下一个交易日按当日vwap换仓,交易费用为单边千分之二。
3.分层方法:先将因子暴露度向量进行一定预处理,将股票池内所有个股按处理后的因子值从大到小进行排序,等分N层,每层内部的个股等权重配置。当个股总数目无法被N整除时采用任一种近似方法处理均可,实际上对分层组合的回测结果影响很小。分层测试中的基准组合为股票池内所有股票的等权组合。
4.多空组合收益计算方法:用Top组每天的收益减去Bottom组每天的收益,得到每日多空收益序列,则多空组合在第n天的净值等于。
5.为了分析合成因子的增量信息,会展示因子进行行业、市值、20日收益率、20日波动率、20日换手率五因子中性化后的测试结果。
图表14~图表15展示了合成因子的分层测试结果,合成因子在进行了五因子中性后,TOP组合年化超额收益率为9.65%,信息比率为3.08,多空组合年化收益率为28.20%,多空组合夏普比率为3.08。合成因子增量信息显著。
“遗传规划+随机森林”模型构建行业市值中性的中证500增强策略
我们将“遗传规划+随机森林”模型在每个截面上的预测结果视为合成的单因子,构建相对于中证500的行业、市值中性的全A选股策略并进行回测,测试方法如下:
2.换仓:在每个截面期核算因子值,通过组合优化模型得到新的持仓股票和权重,在截面期下一个交易日按当日vwap换仓,交易费用为单边千分之二。
图表16~图表18展示了不同个股权重偏离情况下的回测结果。
“遗传规划+随机森林”模型增量超额收益分析
“遗传规划+随机森林”模型使用算法自动生成的因子来构建收益预测模型,其相对于使用传统因子构建的收益预测模型能提供多少超额收益?本节将进行分析。测试方法如下:
3.对比的模型:
模型1:“遗传规划+随机森林”模型。
模型2:以估值、成长、财务质量、杠杆、动量反转、波动率、换手率、beta、股价、技术、一致预期共88个传统因子为输入因子,个股20个交易日收益率为拟合目标,使用XGBoost模型得到合成因子(详细模型构建方法可参见报告《人工智能选股之Boosting模型》,2017.9.11)。
模型3:将模型1得到的合成因子和模型2得到的合成因子等权相加。
我们主要对比模型2和模型3的表现,即观察使用传统因子的模型在叠加“遗传规划+随机森林”模型前后超额收益的变化。图表19~图表20展示了模型2和模型3在不同个股权重偏离情况下的回测结果,在4种情况下,模型3相比模型2年化超额收益率平均提升1.38%,信息比率平均提升0.14。
图表21展示了个股权重偏离上限=1.5%时模型2和模型3的超额收益对比。
本节将利用SHAP值进行可解释性分析。我们选取最新一次训练的随机森林模型(2019-07),在图表22和图表23中展示模型的|SHAP|均值和SHAP值。|SHAP|均值只反映因子的重要性,SHAP值则包含因子的方向信息。由于因子数量众多而篇幅有限,图中仅展示|SHAP|均值排名前30的因子。图表22中,因子的|SHAP|均值越大,表明因子的重要性越高。图表23中,若因子的颜色分布为严格的左蓝中紫右红,那么在模型中因子为正向的线性因子;若因子的颜色分布为严格的左红中紫右蓝,那么在模型中因子为反向的线性因子;若因子的颜色分布非以上两种情况之一,则模型在使用因子时呈现出一定非线性规律。
进一步地,我们对|SHAP|均值排名靠前的因子进行分析。对于2019年7月训练的模型来说,其利用的是2013年7月至2019年7月的因子数据,因此因子的分层测试区间也为2013年7月至2019年7月。
1.alpha125:ts_corr(sub(open,free_turn),close,10)
在图表24的alpha125的分层测试中,该因子为正向的线性因子,但第一层和第二层区分不大,且第二层比第一层稳定。如图表25所示,alpha125的SHAP值和因子取值的关系可分两部分来分析,当因子取值小于1时(主要对应分层测试的三、四、五层),SHAP值和因子取值近似为正向线性关系,这与因子的分层测试结果吻合。当因子取值大于1时(主要对应分层测试的一、二层),SHAP值随着因子取值的变大变化不大,甚至稍有下降,这也与因子的分层测试结果相呼应,而且模型倾向于给更稳定的第二层更高的SHAP值。以上分析说明随机森林模型对于alpha125的使用符合预期。
2.alpha89:rank_mul(turn,add(high,volume))
在图表26的alpha89的分层测试中,该因子为反向的线性因子,但第四层和第五层区分不大,且第四层比第五层稳定。如图表27所示,alpha89的SHAP值和因子取值的关系可分两部分来分析,当因子取值大于0时(主要对应分层测试的一、二、三层),SHAP值和因子取值为近似为负向线性关系,这与因子的分层测试结果吻合。当因子取值小于0时(主要对应分层测试的四、五层),SHAP值随着因子取值的变小变化不大,甚至稍有下降,这也与因子的分层测试结果吻合,而且模型倾向于给更稳定的第四层更高的SHAP值。以上分析说明随机森林模型对于alpha89的使用符合预期。
随机森林模型对于|SHAP|均值排名3、4、5的因子也基本呈现出线性的逻辑,这与alpha125和alpha89类似,本文不再赘述。接下来我们分析|SHAP|均值排名第6的因子alpha103,该因子为非线性因子。
3.alpha103:ts_corr(high,low,20)
在图表28的alpha103的分层测试中,因子的第二层到第五层的超额收益表现单调,但是第一层的超额收益表现位于中间,因子呈现出非线性特征。如图表29所示,alpha103的SHAP值和因子取值的关系可分两部分来分析,当因子取值小于0.5时(主要对应分层测试的二、三、四、五层),SHAP值和因子取值近似为正向线性关系,这与因子的分层测试结果吻合。当因子取值大于0.5时(主要对应分层测试的一、二层),SHAP值随着因子取值的变大而明显下降,这也与因子的分层测试结果相呼应,以上分析说明随机森林模型对于因子的使用符合预期,这同时也体现出了随机森林模型的非线性拟合能力。
结论和展望
本文在华泰金工人工智能系列前期报告的基础上,梳理出一套基于量价信息的全流程人工智能选股体系,完善了体系中的一些细节,并进行了实证。本文结论如下:
步骤2:机器学习模型进行多因子合成——强拟合能力和过拟合的权衡。相比线性模型,机器学习模型有更强的拟合能力,能够拟合非线性关系。实际应用中,需要在机器学习的强拟合能力和过拟合现象间寻找平衡点。针对机器学习模型易过拟合的缺点,我们引入特征选择和时序交叉验证调参。本文选择嵌入式特征选择方法——随机森林模型,在模型训练时自动进行特征选择,并使用时序交叉验证对模型的三个关键参数寻优。
步骤3:机器学习模型的可解释性分析——从“黑箱”到“白箱”。模型的可解释性是指人类能够理解其决策原因的程度。优秀的可解释性有助于打开机器学习模型的“黑箱”,提升人类对模型的信任,其重要性体现在:建模阶段,辅助研究人员理解模型,进行模型的对比选择,必要时优化调整模型;在投入运行阶段,向他人解释模型的内部机制和结果,并通过可解读的反馈结果不断优化模型。本文主要使用基于SHAP值的方法进行模型可解释性分析。
基于量价的人工智能选股能提供独立于传统多因子模型的增量超额收益。本文从日频量价信息出发,通过遗传规划滚动挖掘调仓周期为20个交易日的因子,并使用随机森林模型拟合得到合成因子。合成因子进行行业、市值、20日收益率、20日波动率、20日换手率五因子中性化后,RankIC均值为8.87%,IC_IR为1.16,分五层测试中TOP组合年化超额收益率为9.65%,信息比率为3.08。将合成因子叠加到使用传统因子的模型上后构建中证500增强选股组合,可使得组合的年化超额收益率平均提升1.38%,信息比率平均提升0.14。SHAP值可解释性分析显示,随机森林模型有效利用了遗传规划挖掘出的线性因子和非线性因子。
风险提示
通过人工智能模型构建的选股策略是历史经验的总结,存在失效的可能。遗传规划所得因子可能过于复杂,可解释性较低,使用需谨慎。机器学习模型存在过拟合的风险。机器学习模型解释方法存在过度简化的风险。
附录1:核主成分分析简介
一般来说,主成分分析(PrincipalComponentsAnalysis,PCA)适用于数据的线性降维。而核主成分分析(KernelPCA,KPCA)可实现数据的非线性降维,可用于处理线性不可分的数据集。如图表30所示,KPCA的流程是:对于输入空间中的特征X,先用一个非线性映射把X映射到一个高维甚至是无穷维的空间,使其线性可分,然后在这个高维空间进行PCA降维。
与支持向量机SVM类似,运用KPCA时需要选择核函数,常用的核函数有:
为了形象化展示KPCA的效果,我们使用一个sklearn官网的例子来说明。如图表32所示,在二维空间中生成400个具有圆形决策边界的样本数据,红色样本点标签为0,蓝色样本点标签为1(图表32左上方)。显然原始数据是非线性可分的,PCA降维后数据依然非线性可分(图表32右上方)。而KPCA(RBF核)通过非线性映射将原始数据映射到高维空间后,能够对其进行线性降维(图表32左下方),且KPCA的高维特征空间经过逆转换得到的样本空间与原始空间具有很高的相似性(图表32右下方),说明KPCA对非线性可分数据的降维效果较好。
(
图表33展示了三组测试在多个截面上的平均拟合优度和显著性。可以看出,KPCA+线性回归的拟合优度和显著性最高,对增量信息的提纯效果最好。
附录2
Bottleneck能在多种运算函数上比numpy自带函数更快,图表34展示了二者速度的对比,表中的数字代表Bottleneck相比numpy的速度倍数。可以看出在绝大多数场景下Bottleneck有更优性能。
免责申明
本公司具有中国证监会核准的“证券投资咨询”业务资格,经营许可证编号为:91320000704041011J。
全资子公司华泰金融控股(香港)有限公司具有香港证监会核准的“就证券提供意见”业务资格,经营许可证编号为:AOK809