本文是基于机器学习的选股量化研究。通过 JoinQuant 平台获取中证全指及沪深 300、中证 500 指数样本股在 2014 年 1 月 1 日至 2018 年 7 月 31 日期间每个交易日的截面数据作为测试集样本。另外,当天停牌或者开盘涨跌停的样本股作为对象外。之所以选择中证全指及沪深 300、中证 500 指数样本股作为数据样本,主要是因为其能够全方位地反映中国 A 股市场大中小市值公司的股票价格表现。
1.1 因子选取与模型构建#
1.1.1 因子选取#
在不同因子的组合作用下,将会对股票的超额收益产生不同的影响,因此量化投资策略,尤其是多因子模型成功的关键在于对因子的选取。为了能够有效解释股票收益,候选因子的选取必须考虑足够的维度,同时还需具备比较合理的经济意义。另外,因子的获取成本也需要考虑在内。对于量化因子的研究有很多,其中比较有名的是 WorldQuant 发表的《101 Formulaic Alphas》。本文经过对因子的相关性等方面的测试和综合考虑,分别从估值,资本结构,盈利,成长四个方面进行考虑,选取如表 1 所示的因子作为候选因子。
表 1 因子及其描述#
No | 大类因子 | 因子名 | 因子描述 |
---|---|---|---|
1 | 估值 | EP | 盈利收益率,取市盈率(TTM)倒数 |
2 | 估值 | BP | 账面市值比,取市盈率倒数 |
3 | 估值 | PS | 市销率 |
4 | 估值 | DP | 股息率,取应付股利除以总市值 |
5 | 估值 | RD | 市研率,取开发支出除以总市值 |
6 | 估值 | CFP | 现金收益率,取市现率倒数 |
7 | 资本结构 | log_NC | 对数净资产 |
8 | 资本结构 | LEV | 财务杠杆,取资产 / 负债 |
9 | 资本结构 | CMV | 对数流通市值 |
10 | 资本结构 | FACR | 固定资产比例,取固定资产 / 总资产 |
11 | 盈利 | NI_p | 净利润率,取(净利润 / 营业总收入)的绝对值 |
12 | 盈利 | NI_n | 净利润率,取((负数)净利润 / 营业总收入)的绝对值 |
13 | 盈利 | GPM | 销售毛利率 |
14 | 盈利 | ROE | 净资产收益率 |
15 | 盈利 | ROA | 资产回报率 |
16 | 盈利 | OPTP | 主营业务占比, |
17 | 成长 | PEG | 取市盈率 /(净利润增长率 * 100) |
18 | 成长 | g | 营业收入增长率(同比) |
19 | 成长 | G_p | 净利润增长率(同比) |
1.1.2 模型构建#
某个时间点上,股票的市值可以被多个因素解释。根据多因子模型的基本思路,我们在截面上将市值作为样本标签,按照表 1 所示因子,计算其因子暴露度,作为样本的原始特征。
对表 1 的多个因子进行回归,得到的残差值越小,说明股票市值向下偏离其理论值越严重,也就意味着该股票未来上涨的可能性越大,即收益率越高。构建模型如下所示:
1.2 数据预处理#
本文通过 JoinQuant 平台获取所需的市值及因子数据。
在进行模型构建与分析之前,为了提高数据的质量,需要对数据进行预处理。数据预处理有多种方法,包括数据清理,数据集成,数据变换,数据归约等。本文对数据主要进行以下预处理。
1.2.1 缺失值处理#
对于初始数据存在缺失的情况,本文统一用 0 来填充。
1.2.2 离群值处理#
因为过大或过小的因子数据可能会影响到分析结果,尤其是在做回归的时候,我们需要对因子的离群值进行处理。处理方法是调整因子值中的离群值至上下限(Winsorzation 处理),其中上下限由离群值判断的标准给出,从而减小离群值的影响力。离群值的判断标准有三种,分别为 MAD、3σ、百分位法。其中 MAD 标准的具体方法如下:
- 找出所有因子的中位数 。
- 得到每个因子 与中位数 的绝对偏差值,即 | 。
- 得到绝对偏差值的中位数 MAD。
- 确定参数 n,根据下述公式对因子值做出调整。
本文统一采用 MAD(n=5)标准对因子进行离群值处理。离群值处理前后的比较,以因子 g 在 2018 年 7 月 11 日截面数据为例,参考图 1 所示。
图 1 因子 g 的离群值处理前后比较 (来源:JoinQuant)
1.2.3 标准化处理#
由于不同因子所描述的对象单位不一样,那么可能导致不同因子数值差异很大,举个例子,如果我们用不经过标准化的市值作为因子暴露,如果公司 A 的市值是 B 的市值的 100 倍,那是否代表我们能说市值因子的收益率对 A 的收益率的影响是对 B 的收益率的影响的 100 倍呢?显然是不能的。所以,在利用因子进行策略建立之前,需要先对因子进行标准化处理。标准化的方法有很多,本文采用 z-score 的方法,参考图 2 所示,将因子值的均值调整为 0,标准差调整为 1。处理后的数据从有量纲转化为无量纲,从而使得数据更加集中,或者使得不同的指标能够进行比较和回归。
图 2 z-score 方法描述 (来源:量化投资训练营公众号)
以因子 log_NC 在 2018 年 7 月 11 日截面数据为例,标准化处理的前后比较参考图 12 所示。
1.2.4 中性化处理#
在使用因子进行选股时,有时会因为其它因子的影响,而导致选出来的股票具有一些我们不希望看到的偏向。比如说,市净率会与市值有很高的相关性,这时如果我们使用未进行市值中性化的市净率,选股的结果会比较集中。另一方面,朝阳行业和夕阳行业的市盈率在大致上也有一定的特点,也就是说行业对估值因子也有影响,那么我们得到的结果是具有一些多余偏好的。为了解决这一由于不同行业和市值大小导致的误差问题,让我们在用某一因子时能剔除其他因素的影响,使得选出的股票更加分散,我们需要对其进行中性化处理。
图 3 因子 log_NC 的标准化处理前后比较 (来源:JoinQuant)
对于因子来说,市场风险(例如牛市和熊市)和行业风险(同一行业的公司受的影响类似)是中性化主要考虑的因素,对这两者的处理方式有两种:
- 将市场因子和行业因子同时纳入模型。
- 仅纳入行业因子,而将市场因子包含在行业因子中。
第一种方式和第二种方式的区别在于,第一种方式行业因子收益率计算出来的是行业相对于市场的超额收益率,而第二种方式计算出来的收益率是行业绝对收益率。对于验证风格因子有效性而言,这两种方式是没有区 别的;对于回归而言,只是前者是带截距项的回归,而后者是穿越原点的回归。本文采取第二种方式,模型调整如下所示:
若该公司属于该行业,则将该行业的虚拟变量的值设为 1,否则设为 0。本文不对公司所属行业进行比例拆分,即公司只能属于一个特定的行业。本文的行业划分采用 JoinQuant 行业 1 级分类,参考表 2 所示:
表 2 行业分类一览#
行业代码 | 行业名称 | 起始日期 |
HY001 | 能源 | 1999/12/30 |
HY002 | 材料 | 1999/12/30 |
HY003 | 工业 | 1999/12/30 |
HY004 | 可选消费 | 1999/12/30 |
HY005 | 日常消费 | 1999/12/30 |
HY006 | 医疗保健 | 1999/12/30 |
HY007 | 金融 | 1999/12/30 |
HY008 | 信息技术 | 1999/12/30 |
HY009 | 电信服务 | 1999/12/30 |
HY010 | 公用事业 | 1999/12/30 |
HY011 | 房地产 | 1999/12/30 |
2.1 回测参数设置#
本文采用历史回测的方式进行实证分析。回测参数设置的不同所得到的测试结果差异很大,客观设置回测参数关系到策略交易效果的真伪和对策略的最终取舍。本文的回测参数设置及全局设定参考如下:
(1)投资金额
假定投资金额为:100 万。
(2)回测区间
未指定的情况下,默认回测区间为:2014 年 1 月 1 日 —2018 年 7 月 31 日
(3)佣金及印花税
为了使回测结果更加接近真实的交易成本,在实证分析中,设置佣金及印花税的比例。
近十年印花税的主要两次变化包括:
- 2008 年 4 月 24 号起,由 3‰调整为 1‰。
- 2008 年 9 月 19 日起,由双边征收改为单边征收,税率保持 1‰。由出让方按 1‰的税率缴纳股票交易印花税,受让方不再征收。
佣金方面,由于券商及客户本身的不同,佣金比率各自不同。本文做了单独设置。
(4)滑点
所谓滑点,是指下单价与实际成交价之间的差价。由于滑点对最终结果的影响较小,本文滑点设定为 0。
(5)仓位管理
根据每次买入时所剩资金,按照买入股票数平均资金,全仓买入。
(6)可行股票池
- 如无特别指定的情况,本文的可行股票池默认为中证全指。
- 实际情况中,当天停牌的股票是无法进行买卖操作的,所以在整体回测前,将当日停牌的股票剔除。
- 本文在跌停状态下策略不进行买入,涨停状态下策略不进行卖出。
(7)比较基准
对应可行股票池,选取中证全指的每日价格作为判断策略好坏和一系列风险值计算的基准。
(8)测试集提取
交易日当天的因子特征值为样本的原始特征,当天的市值对数为样本的标签。
(9)训练集(包括验证集)合成
以 T 日为例,每 21 个交易日为间隔,在没有特别指定的情况下,默认使用 T-63 至 T 的特征和标签作为训练集(包含验证集),且使用 3 折交叉验证的方法。
(10)机器学习算法参数设置
在没有特定指定的情况下,各机器学习算法的参数设置参考表 3 所示,使用固定参数的方式。
表 3 各机器学习算法参数设置#
人工智能算法 | 参数设置 |
线性回归 | 无参数 |
岭回归 | alpha:100 |
SVR | C:100,gamma:1 |
随机森林 | n_estimators:500 |
(11)其他
- 回测使用市价单下单,并假设不存在买不到或卖不出的现象。
- 财报和市值数据使用的回测日的前一天数据,从而避免未来函数。
- 由于本文聚焦研究选股策略,所以未使用止损止盈策略或择时策略来作为辅助,以保证选股策略以外的参数是一致的。
2.2 模型及因子有效性实证#
在对策略进行深入的研究之前,首先对策略进行有效性的研究及实证,以保证之后的研究在正确的前提下进行。对策略的有效性实证方法如下:
- 根据人工智能的线性回归算法,对模型中的因子特征值对市值(取对数)标签做线性回归,取实际值与预测值之差作为新的因子特征值。
- 按照 从小到大的顺序对股票进行排序。
- 将股票等分为 10 组,分别按照每 10 天和每 30 天进行一次调仓。
根据上述方法,回测条件参考表 4 所示,进行分组回测。分组回测的结果分别参考表 5、图 4、图 5 所示。
表 4 回测条件#
股票池 | 调仓周期 | 算法 | 持仓数 | 因子组合 |
沪深300 中证500 中证全指 | 10天, 30天 | 线性回归 | 10%(分组) | 全因子 |
表 5 分组回测收益率及排名#
图 4 不同组别的超额收益率(中证全指,调仓周期:10 天)
图 5 不同组别的回测结果(中证全指,调仓周期:10 天)
由表 5、图 4、图 5 可知:
- 根据假定的模型,沪深 300 不能得到明显的单调的策略收益率,而中证全指能得到相对明显的单调的策略收益率。中证 500 则居于沪深 300 和中证全指中间。说明该策略不适合用于投资沪深 300,但可以用于投资中证全指或者中证 500。
- 中证全指不仅能得到相对明显的单调的策略收益率,还可以获得相对单调的夏普比率和信息比率。
- 中证全指不能获得单调的最大回测,说明该模型在风险控制上并没有有效的机制。
以中证全指为股票池,按照每 30 日进行一次调仓,分别采用岭回归,SVR 和随机森林算法进行分组回测。回测条件参考表 6 所示,回测结果参考表 7 所示。
表 6 回测条件#
股票池 | 调仓周期 | 算法 | 持仓数 | 因子组合 |
中证 全指 | 30天 | 岭回归, SVR, 随机森林 | 10%(分组) | 全因子 |
表 7 分组回测排名#
组别 | 岭回归 | 排名 | SVR | 排名 | 随机森林 | 排名 |
1 | 111.91% | 2 | 159.14% | 1 | 96.34% | 1 |
2 | 115.73% | 1 | 96.40% | 2 | 62.81% | 3 |
3 | 84.34% | 3 | 79.04% | 3 | 57.74% | 5 |
4 | 69.23% | 4 | 59.84% | 4 | 47.91% | 8 |
5 | 49.12% | 5 | 49.03% | 5 | 54.28% | 7 |
6 | 34.19% | 8 | 22.80% | 8 | 56.70% | 6 |
7 | 31.04% | 9 | 30.92% | 6 | 69.18% | 2 |
8 | 35.06% | 7 | 17.04% | 10 | 64.71% | 4 |
9 | 15.25% | 10 | 30.65% | 7 | 24.80% | 9 |
10 | 37.7% | 6 | 17.44% | 9 | 19.82% | 10 |
本文选择 30 日为调仓周期,这是因为:首先,本文选择的部分交易数据实质是月数据,如果周期为天或者更小的话,这种调整将没有意义;其次,对于财务数据的选择,我们选择的是季度,按照前面的理论来说应将周期调整为季度,但以季度为周期会导致交易成本增加,并且有可能错过很多投资机会,交易的收益率也有可能受到影响,而且对于财务数据我们进行了滞后处理,因此以季度为周期是不可取的;最后,对于一些指标来说,月数据可能具有更好的效果,例如市盈率和市净率,以月为周期的数据会使得模型的检验更加有效,剔除了一些特殊值的出现。
从表 7 可知,仅从收益角度看,岭回归,SVR 和随机森林三种算法,和线性回归类似,也能够得到相对明显的单调的策略收益率。其中,SVR 的趋势最为明显。随机森林的趋势不够显著,在头尾的收益率分水岭比较清晰,在中间分组的分水岭比较模糊。
2.3 不同因子组合的算法实证比较#
将全部因子分成三种不同的因子组合,参考表 8 所示。
表 8 不同因子组合#
No | 因子名 | 组合1 | 组合2 | 组合3(全因子) |
1 | EP | ● | ● | ● |
2 | BP | ● | ● | |
3 | PS | ● | ||
4 | DP | ● | ||
5 | RD | ● | ● | ● |
6 | CFP | ● | ||
7 | log_NC | ● | ● | ● |
8 | LEV | ● | ● | ● |
9 | CMV | ● | ● | |
10 | FACR | ● | ||
11 | NI_p | ● | ● | ● |
12 | NI_n | ● | ● | ● |
13 | GPM | ● | ● | |
14 | ROE | ● | ● | |
15 | ROA | ● | ||
16 | OPTP | ● | ||
17 | PEG | ● | ● | ● |
18 | g | ● | ||
19 | G_p | ● | ||
合计数 | 7 | 11 | 19 |
利用不同算法下,买入排序后前 50 名股票。每 30 日进行一次调仓。详细的回测条件参考表 9 所示。
表 9 回测条件#
股票池 | 调仓周期 | 算法 | 持仓数 | 因子组合 |
中证全指 | 30天 | 线性回归, 岭回归, SVR, 随机森林 | 50 | 组合1, 组合2, 组合3(全因子) |
根据上述方法,利用不同的算法进行回测,回测结果参考表 10 所示:
表 10 不同算法的回测结果#
图 6 不同算法的超额收益图(因子组合 3)
图 7 不同算法的回测结果指标(因子组合 3)
由表 10、图 6、图 7 可知:
- 收益和风险的平衡最理想的策略是采用全因子组合的 SVR 算法策略,该策略的收益率为 243%,夏普比率为 0.987,IR 为 1.742。该三项指标在所有投资组合中表现最好,而其最大回测与其他投资组合持平,甚至更低。
- 长期来看,该投资策略在不同的算法皆能跑赢基准。在该投资策略下,总体上看,收益率表现最好的是 SVR。SVR 最低的收益率也比岭回归及线性回归最高的收益率要略高。其次是随机森林,而岭回归和线性回归不相伯仲。
- 随着因子数的增多,线性回归,岭回归的收益率反而下降,而 SVR 随着因子数的增多,收益率上升。随机森林的收益率表现不稳定。夏普比率和 IR 的表现和收益率相似。
- 不同的因子组合在不同的算法下,最大回测相差不大,没有一种算法也没有一种因子组合有特别的优势。这说明该投资策略本身在风险控制上存在着不足。
- 从测试集及验证集的打分来看,随机森林的模型拟合程度最高,预测准确度最高。SVR 的拟合程度表现不稳定。线性回归和岭回归的拟合程度基本一致。
- 随着因子数的增多,线性回归,岭回归,随机森林的打分越来越高,说明随着因子数的增加,其拟合程度越来越高。SVR 打分和因子数没有明显的关系。SVR 也是验证集打分与测试集打分的差别最大。
2.4 不同持仓数的算法实证比较#
在目前国外量化投资界,投资者普遍选择的组合规模为 50 到 60 股票,国外各大投资基金均以 60 只股票为持股规模,这是因为投资者认为随着组合规模的扩大,非系统风险会相应的降低直至接近于零,但考虑到过大的规模会导致成本的增加和收益率的下降,根据边际效用递减规律,当规模较小时增加规模的个数会使得风险降低,但随着规模的不断增大,当超越一定临界值时,风险降低的速度会变得缓慢起来,因此规模不能选择无穷大。而且伴随着规模的扩大,组合的效率就会下降,大量的原始资金和高额的交易成本就会凸现出来。本文为了分析并实证不同持仓数下的收益和风险的不同表现,按照表 11 所示的因子组合 3(全因子组合),将持仓数分别设置为 5、10、30、50,进行回测,详细的回测条件参考表 11 所示,回测结果参考表 12 所示。
表 11 回测条件#
股票池 | 调仓周期 | 算法 | 持仓数 | 因子组合 | 训练集 |
中证 全指 | 30天 | 线性回归, 岭回归, SVR, 随机森林 | 5, 10, 30, 50 | 组合3 (全因子) | 【T-84,T】 |
表 12 不同持仓数的算法比较#
从表 12 可知:
- 收益表现最好的是 SVR 算法(持仓数为 5)的情况,该算法实现了 698% 的最高收益率,夏普比率和 IR 也达到最高,分别为 1.61 和 2.03。但是该算法的最大回测也非常高,超过了 50%,策略波动率远高于基准波动率。如果考虑最大回测不要超过 50% 的话,SVR 算法(持仓数为 30)的情况最为理想,该算法实现了 263% 的收益率,普遍高于其他情况,夏普比率为 1.07,也普遍高于其他情况。而该持仓数下,最大回测下降到 44%,接近于平均值。
- 在相同持仓数下,收益率及夏普比率排名大致保持 SVR > 随机森林 > 岭回归 > 线性回归的顺序。
- 随着持仓数减少,各个算法的收益率都有上升,SVR 上升最为明显。由此可见,持仓越分散,收益越容易被平摊。而策略波动率则刚刚相反。持仓越集中,波动越大。
- 线性回归和岭回归随着持仓数减少,最大回测出现了逐渐缩小迹象。其中岭回归在持仓数为 5 的时候最大回测达到最小,盈亏比达到最大;与之相反,SVR 和随机森林随着持仓数减少,最大回测出现明显扩大。
- 结合收益和风险的指标,利用线性回归和岭回归算法时,最佳持仓数为 5,利用 SVR 和随机森林算法时,最佳持仓数为 30。
2.5 不同市场风格的算法实证比较#
针对不同的市场风格构建不同的投资策略,之前有不少学者都做过研究,比如中国股市周期划分实证分析,牛熊市追涨杀跌策略,市场惯性策略与反转策略,牛熊市周期协同性研究等。最近,将人工智能及机器学习应用到市场选择上的研究也层出不穷,比如机器学习对 A 股适应性比较研究。本文在以上研究的基础上,根据不同的市场的风格之间的切换,设置不同的回测区间,参考表 13 所示。
表 13 不同市场风格的回测区间#
区间编号 | 回测区间 | 区间长度 | 市场风格 |
区间1 | 2014年4月1日—2014年9月30日 | 6个月 | 盘整—上涨 |
区间2 | 2014年10月1日—2015年4月30日 | 7个月 | 上涨—上涨 |
区间3 | 2015年3月1日—2015年9月30日 | 7个月 | 上涨—下跌 |
区间4 | 2015年7月1日—2015年11月30日 | 5个月 | 下跌—上涨 |
区间5 | 2017年8月1日—2018年3月31日 | 8个月 | 盘整—下跌 |
区间6 | 2017年10月1日—2017年12月31日 | 3个月 | 盘整—盘整 |
区间7 | 2015年9月1日—2016年1月31日 | 5个月 | 下跌—下跌 |
回测条件参考表 14 所示,回测结果参考表 15 所示:
表 14 回测条件#
股票池 | 调仓 周期 | 算法 | 算法参数 | 持仓数 | 因子 组合 | 回测 区间 |
中证 全指 | 30天 | 线性回归, 岭回归, SVR, 随机森林 | 固定参数 | 5 | 全因子 | 区间1, 区间2, 区间3, 区间4, 区间5, 区间6, 区间7 |
表 15 回测结果#
为了更加清晰地比较不同算法的收益和风险,对表 15 进行简化,参考表 16、表 17 所示。
表 16 年化收益率排名#
表 17 最大回测排名#
从表 16、表 17 可知:
- 从收益来看,在市场风格没有大的切换的期间,整体而言,线性模型要优于 SVR 和随机森林算法。在市场长期盘整阶段,SVR 和随机森林算法基本失效。在长期盘整走势当中应该谨慎用机器学习算法进行量化投资的指导,此时更应该结合其他技术分析理论进行投资决策 [50]。在持续下跌的市场环境中,SVR 算法也能获得超额收益。
- 从收益来看,在市场风格出现明显切换的期间,SVR 和随机森林算法整体而言要优于线性模型,SVR 算法尤其突出。但是在市场风格由盘整切换到下跌期间,SVR 和随机森林算法基本失效。
- 从风险来看,在市场风格没有大的切换的期间,线性模型整体而言要优于 SVR 和随机森林算法。在持续上涨阶段,SVR 和随机森林算法基本能赶上线性模型,其他情况下,其风险远高于线性模型。
- 从风险来看,在市场风格出现明显切换的期间,并没有什么算法表现出特别高的风险预测能力。
- 总体而言,市场风格没有大的切换的期间,线性模型优于 SVR 和随机森林算法,反之,SVR 算法更优(市场风格由盘整切换到下跌期间除外)。
2.6 不同参数的算法实证比较#
以中证全指为可行股票池,持仓数为 5,分别使用固定参数和网格搜索(带标准 3 折交叉验证)的方法来验证不同参数的模型泛化程度并调节监督模型参数以获得最佳泛化性能。回测条件参考表 18 所示,算法参数参考表 19 所示,回测结果参考表 20 所示。
表 18 回测条件#
股票池 | 调仓周期 | 算法 | 算法参数 | 持仓数 | 因子组合 |
中证全指 | 30天 | 岭回归, SVR, 随机森林 | 固定参数, 网格搜索 | 5 | 组合1, 组合2, 全因子 |
表 19 算法参数一览#
算法 | 固定参数 | 网格搜索 |
岭回归 | (参考表6) | alpha:[1,10,100] |
SVR | (参考表6) | C:[10,100],gamma:[0.1,1,10] |
随机森林 | (参考表6) | n_estimators:[100,500,1000] |
表 20 不同参数的算法的收益率及打分#
由表 20 可知:
- 岭回归采用不同的参数设置方式下,固定参数的收益率高于网格搜索的收益率。而 SVR 和随机森林表现不稳定。
- 岭回归和随机森林的模型拟合程度(测试集打分)在不同参数的设置方式下,网格搜索相对于固定参数而言,没有明显的提升。而 SVR 的网格搜索的测试集打分则显著优于固定参数的打分。
- 总体而言,使用网格搜索可以使 SVR 的模型拟合度更高。但是,使用网格搜索并不能带来收益率的显著上升,甚至导致收益率的下降。
2.7 不同训练集长度的算法实证比较#
调节滚动训练集的长度,回测条件参考表 21 所示,进行回测。回测结果参考表 22 所示:
表 21 回测条件#
表 22 不同算法的回测结果#
由表 22 可知:
- 收益表现最好的是 SVR 算法(训练集长度:3)。该策略的夏普比率和信息比率也是最优的。
- 从收益来看,增加训练集长度,并不一定能带来收益率的增加。线性回归,岭回归,SVR 表现最佳的训练集长度是 3,随机森林表现最佳的训练集长度为 9。
- 从风险来看,增加训练集长度,并不一定能降低风险。线性回归,岭回归算法随着训练集长度的增加,最大回测有下降趋势。SVR,随机森林表现不稳定。
3.1 研究总结#
本文构建了基于四种机器学习算法的选股策略,主要以中证全指成分股为股票池,通过机器学习的算法从中选取具有投资价值的股票构建投资组合,期望该组合在未来的一段时间能够获取稳健的超额收益。本文的研究既丰富了选股策略的构建方式,也为机器学习如何应用于投资决策提供了一些借鉴。
本文选取中证全指成分股 2013 年 10 月至 2018 年 7 月定期交易日间隔的因子截面数据作为数据样本,其中 2013 年 10 月 —2018 年 6 月的数据作为训练集(包括验证集),2014 年 1 月至 2018 年 7 月数据作为测试集。实证研究过程主要分为因子选择,策略构建,数据预处理、实证分析四个部分。
本文构建的量化选股模型在 2014 年 1 月 - 2018 年 7 月间累计收益率最高可达到 698%(SVR 算法,持仓数为 5 的情况),年化收益率达到 59%,远远超出同期比较基准(中证全指)的业绩表现(收益率:42%),可见本文的策略具有较好的选股效果。
通过分组回测比较分析可以发现,在中证全指的情况下,策略业绩随着分位组变化具有显著的递减趋势,说明该模型在投资中证全指成分股时能够有效区分强势股和弱势股。
与线性模型(线性回归和岭回归)对比分析可以发现,本文的投资策略通过非线性模型(SVR 和随机森林)可以不断适应市场环境的变化,可以更好地挖掘具有超额收益的股票。非线性模型在收益率、夏普比率和信息比率方面表现不错,基于非线性模型选股的投资策略能稳定地优于线性模型;从回撤的角度看,非线性模型相比于线性模型不具备明显优势,有些时候回撤与线性模型持平甚至大于线性模型。
随机森林和 SVR 相比,虽然在个别的情况下,随机森林比 SVR 能获取更高的超额收益,但是从整体来看,随机森林的收益率要低于 SVR。但是,在本文因子条件下,随机森林的预测能力毋庸置疑远胜于 SVR。
具有正则化优势的岭回归相比线性回归对策略没有明显的提升作用。我们分析有两个可能的原因。首先,随着模型的可用数据越来越多,两个模型的性能都在提升,最终线性回归的性能追上了岭回归。反过来同时验证了如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。其次,由于预处理过程中做了去极值和标准化,在降低因子多重共线性的同时减少了极端样本的出现概率,因而进一步削弱了正则化的价值。所以,在本文的策略中,正则化并没有对收益率等指标产生明显的帮助。
随着因子数的增多,不管是哪种算法,整体上,拟合度和收益率出现了反向关系。两者刚好相反的原因可以解释如下:由于本文的量化投资策略是以购买偏离预测值下方最多的股票为投资标的,所以拟合度不高的算法反而更容易发现那些实际值与预测值偏差过大的股票,从而更能精准地买入。
不同的因子组合,不同的持仓数对策略表现具有一定的影响。线性模型在因子增多时收益率下降。非线性模型在因子增多时更具有收益能力。持仓数越少收益率越高,风险也随之增大。
在本文,我们将市场风格划分为 9 种,并实证了其中 7 种不同市场风格,分别是持续盘整,持续上涨,持续下跌,盘整 — 上涨切换,盘整 — 下跌切换,上涨 — 下跌切换,下跌 — 上涨切换。每种市场风格都测试了用人工智能算法对于收益率和最大回测的情况。根据测试结果显示:在市场风格没有大的切换时候,线性模型的算法要优于 SVR 和随机森林的算法,反之,SVR 表现最佳,且该算法的收益远胜于其他算法。
最后,关于在算法优化方面,不管是采用网格搜索的方法来优化算法的参数,还是采用增加滚动训练集长度的方法来优化模型泛化程度,都不能带来收益率的明显上升,甚至下降。SVR 算法的收益率对是否使用网格搜索或者说参数值的敏感度很高,在使用 SVR 算法时要充分讨论其参数的合理性。从收益率和夏普比率的角度来看,线性模型,SVR 算法的回测效果最佳的滚动训练集长度是 3 个交易月,随机森林算法的回测效果最佳的滚动训练集长度是 9 个交易月。
综上所述,基于机器学习的选股策略应结合表 23 所示进行使用。
表 23 不同算法对应的最佳策略#
3.2 不足与未来改进方向#
有关机器学习如何应用于量化选股的研究一直是投资领域的一个热点问题。本文在传统的多因子模型的基础上,引入机器学习选股,试图建立更加有效的量化选股策略,但仍然存在以下的几点不足:
首先,本文的策略在风险控制上显得不足,尤其是 2015 年牛熊市的市场风格切换异常迅速,本文的量化投资策略在市场高风险时没能考虑止损等风险控制,导致最大回撤较大。如能加入止盈止损条件或引入择时模型对股票的买卖时机以及仓位进行判断,或利用对冲机制对风险进行对冲,有望能控制风险。由于时间的关系,本文在这方面没有做深度研究。
其次,本文在使用多因子模型时,使用的因子的范围比较窄,主要基于基本面。基本面以外,比如技术面的因子并没有考虑进来。
最后,由于实际条件的限制,本文的量化投资策略的评价主要基于历史数据的回测结果进行比较和评估,没有后续的实盘模拟及实时交易跟踪。本文的策略还有待于在实盘交易中进行进一步的验证。
特别感谢:本文基于 JoinQuant 进行开发研究,所用源代码可参考以下链接:
https://www.joinquant.com/view/community/detail/7a63b350815f79bfd4d83ab22d0f291a