模型训练的若干细节测试 机器学习模型通过其复杂的非线性方式往往能得到较好的截面选股能力,但由于其“黑箱”的特性使投资者在进行模型训练的过程中对于很多细节问题没有明确的定论。本篇报告尝试探索了以下几个细节问题:包括特征和标签的数据预处理方式,使用全A股票训练还是成分股训练,使用一次性训练、滚动或是扩展训练的效果区别,分类模型和回归模型的差异,损失函数改为IC后是否有进一步提升,不同的树集成方法优劣对比共六个方面。 发现对于截面模型和时序模型而言,其最优数据预处理的方式有所不同。截面模型更适合使用整个训练集进行ZScore标准化,从而保留数据不同日期间的相对大小关系,而时序模型则应对特征和标签分别使用不同的方式处理。在训练方式上,我们也针对一次性、滚动或扩展训练进行对比,发现选取合适的样本区间能使模型更能适应不同的市场环境。在训练所用样本上,我们发现使用全A训练还是成分股训练既与所使用基准有关,同时也与模型本身特性相关,需要分情况使用最合适的样本。而在分类和回归模型的选择上,我们经过对比发现,回归模型所得因子在各指标上都能超过分类模型的效果,保留更有颗粒度的标签数据有助于提升模型的学习效果。而对于损失函数是否有必要直接修改为IC指标,我们经过多种测试,发现并没有带来显著的改善效果,使用MSE作为损失函数较为合适。最终,对于不同的决策树集成算法,我们经过对比发现引入了Dropout思想的DART模型超过了GBDT算法,能有效缓解模型可能存在的过拟合问题。 改进后因子与策略效果 最终,我们保持与原框架一致,使用GBDT和NN两大类模型分别在不同成分股上训练,得到了在样本外效果突出的因子。在沪深300上,因子IC均值10.98%,多头年化超额收益19.66%,多头超额最大回撤6.40%。在中证500上,因子IC均值与沪深300近似,为10.87%,多头年化超额收益率为12.93%。而在中证1000成分股上,因子表现尤其突出,IC均值15.14%,多头年化超额收益率23.48%,多头超额最大回撤3.12%。最终,我们结合交易实际,构建了基于各宽基指数的指数增强策略。其中,沪深300指数增强策略年化超额收益达到15.43%,超额最大回撤为2.87%。中证500指增策略年化超额收益20.50%,超额最大回撤8.39%。中证1000指增策略年化超额收益32.25%,超额最大回撤4.33%。 风险提示 1、以上结果通过历史数据统计、建模和测算完成,在政策、市场环境发生变化时模型存在时效的风险。 2、策略通过一定的假设通过历史数据回测得到,当交易成本提高或其他条件改变时,可能导致策略收益下降甚至出现亏损。 内容目录 一、不同数据预处理方式的对比4 1.1数据准备与预处理的方式4 1.2不同数据预处理方式对比4 二、全A训练还是成分股训练?7 三、一次性、滚动还是扩展训练?9 四、分类还是回归?11 五、损失函数是否有必要修改为IC?12 六、GBDT,DARTorRF?13 七、改进后因子与策略效果14 7.1因子测试结果14 7.2基于GBDT+NN的指数增强策略16 总结21 风险提示21 图表目录 图表1:各类不同数据预处理方式的IC均值对比(LightGBM)5 图表2:各类不同数据预处理方式的多头年化超额收益率对比(LightGBM)5 图表3:各类不同数据预处理方式的多头超额最大回撤对比(LightGBM)6 图表4:各类不同数据预处理方式的IC均值对比(GRU)6 图表5:各类不同数据预处理方式的多头年化超额收益率对比(GRU)7 图表6:各类不同数据预处理方式的多头超额最大回撤对比(GRU)7 图表7:成分股或全A训练因子值各项指标对比8 图表8:成分股或全A训练模型多空净值(沪深300)8 图表9:成分股或全A训练模型多空净值(中证500)9 图表10:成分股或全A训练模型多空净值(中证1000)9 图表11:滚动训练时间区间划分10 图表12:扩展训练时间区间划分10 图表13:一次性、滚动或扩展训练因子值各项指标对比(沪深300)10 图表14:LGBM一次性、滚动或扩展训练多空净值曲线11 图表15:GRU一次性、滚动或扩展训练多空净值曲线11 图表16:回归或分类任务训练因子值各项指标对比(沪深300)11 图表17:LightGBM模型分类&回归模型多空净值曲线12 图表18:GRU模型分类&回归模型多空净值曲线12 图表19:不同损失函数训练因子值各项指标对比(沪深300)12 图表20:不同正则化方法中决策树贡献的差异13 图表21:LightGBM不同集成算法因子值各项指标对比(沪深300)14 图表22:LightGBM不同集成算法多头超额净值曲线(沪深300)14 图表23:GBDT与NN合成因子在沪深300成分股的各项指标15 图表24:GBDT与NN合成因子在沪深300成分股的多头超额净值曲线15 图表25:GBDT与NN合成因子在中证500成分股的各项指标15 图表26:GBDT与NN合成因子在中证500成分股的多头超额净值曲线16 图表27:GBDT与NN合成因子在中证1000成分股的各项指标16 图表28:GBDT与NN合成因子在中证1000成分股的多头超额净值曲线16 图表29:基于GBDT+NN的沪深300指数增强策略指标17 图表30:基于GBDT+NN的沪深300指数增强策略净值曲线17 图表31:基于GBDT+NN的沪深300指数增强策略分年度收益18 图表32:基于GBDT+NN的沪深300指数增强策略分年度收益18 图表33:基于GBDT+NN的中证500指数增强策略指标18 图表34:基于GBDT+NN的中证500指数增强策略净值曲线19 图表35:基于GBDT+NN的中证500指数增强策略分年度收益19 图表36:基于GBDT+NN的中证500指数增强策略分年度收益19 图表37:基于GBDT+NN的中证1000指数增强策略指标20 图表38:基于GBDT+NN的中证1000指数增强策略净值曲线20 图表39:基于GBDT+NN的中证1000指数增强策略分年度收益20 图表40:基于GBDT+NN的中证1000指数增强策略分年度收益21 一、不同数据预处理方式的对比 在上篇报告中,我们使用了GBDT和NN两大类模型和两种预测标签分别训练并最终合成,在A股各宽基指数成分股上均有不错的预测效果。但模型训练过程中的众多细节问题并未展开讨论和充分对比验证,在本篇报告中,我们将进一步深入机器学习在量化选股领域的研究,结合数据和市场的实际情况,针对性地优化模型训练过程,争取为投资者更好地使用机器学习模型提供参考依据。 为避免随机种子对预测结果产生的影响,我们对于所有模型均使用5个固定随机种子取均值的方式使结果更具参考价值。所用特征数据集、训练区间划分等细节可参考《Alpha掘金系列之九:基于多目标、多模型的机器学习指数增强策略》。 1.1数据准备与预处理的方式 由于通过机器学习训练得到最终结果存在较高的不可解释性,保证输入模型数据的准确性和细节的严谨性变得尤为重要。 在数据源层面上,由于主流的行情数据来源对于停牌股票当天的价格数据均会赋值为停牌前一天的价格,仅成交量会赋值为0。若股票连续停牌时间较短,则与价格相关的特征不会受到太大影响,但若特征计算过程中使用了成交量信息,可能会出现较大或较小的异常值。若停牌时间较长,则价格相关的特征会长时间没有变化,同样对于模型来说属于污染数据难以学习。因此,我们首先将停牌日的股票行情数据均统一赋值为NaN,计算相关特征时则会对应计算为NaN。 在标签层面,由于我们希望模型学习到的结果用来在次日开始调仓,与回测时保持一致。因此,对于月度调仓的策略而言,我们统一使用T+1至T+21日的收盘价信息计算收益率等数据作为标签。 由于不同特征和标签的量纲天然不同,若直接将数据喂入模型可能会使模型难以有效高效地实现梯度下降,因此进行适当的标准化处理一般而言是有必要的。而标准化处理的具体方式有很多选择: 截面Z-Score标准化(CSZScore):对所有数据按日期聚合后进行Z-Score处理,主要目的在于保证每日横截面数据的可比性。 截面排序标准化(CSRank):对所有数据按日期聚合后进行排序处理,将排序结果作为模型输入。此方法主要目的在于排除异常值的影响,但缺点也很明显,丧失了数据间相对大小关系的刻画。 数据集整体Z-Score标准化(ZScore):截面标准化会使数据损失时序变化信息,而整个数据集做标准化可以将不同日期的相对大小关系也喂入模型进行学习。当然此处需要注意数据泄露问题,我们使用训练集算出均值和标准差后,将其用于整个数据集进行标准化。 数据集整体Minmax标准化(MinMax):相较于ZScore标准化而言,MinMax能使数据严格限制在规定的上下限范围内,且保留了数据间的大小关系。 数据集整体RobustZ-Score标准化(RobustZScore):由于标准差的计算需要对数据均值偏差进行平方运算,会使数据对极值更敏感。而𝑀𝐴�=M𝑒𝑑𝑖𝑎𝑛(|�− 𝑀𝑒𝑑𝑖𝑎𝑛(𝑥)|)能有效解决这一问题,使得到的均值标准差指标更加稳健。 1.2不同数据预处理方式对比 我们针对以上数据预处理方式进行遍历测试,以LightGBM和GRU分别代表两类模型,不同处理方式所得到因子在沪深300成分股的效果如下: 图表1:各类不同数据预处理方式的IC均值对比(LightGBM) 预测目标为超额收益率 预测目标为绝对收益率 CSZScore CSRank CSRankCSZScore Zscore RobustZscore Minmax None CSZScore CSRank CSRankCSZScore Zscore RobustZscore Minmax None CSZScore 8.82% 10.02% 9.81% 4.76% 5.14% 3.31% 2.35% 8.68% 10.10% 10.13% 4.74% 4.00% 4.74% 4.92% CSRank 8.92% 10.16% 10.17% 7.04% 8.07% 6.80% 7.77% 9.36% 10.38% 10.30% -1.28% -0.79% -0.06% -0.29% CSRankCSZScore 11.16% 11.90% 11.91% 10.27% 10.78% 6.82% 9.48% 11.20% 11.94% 12.07% 1.56% 1.71% 2.74% 3.15% Zscore 11.35% 11.79% 11.73% 10.36% 10.67% 6.87% 9.71% 11.32% 12.02% 12.03% 1.02% 0.85% 2.92% 3.61% RobustZScore 11.03% 11.83% 11.96% 10.13% 10.69% 7.48% 9.56% 11.61% 12.18% 12.00% 1.36% 0.77% 2.83% 3.47% Minmax 11.35% 11.77% 11.87% 10.15% 10.65% 7.22% 9.75% 11.32% 11.85% 12.13% 1.40% 1.47% 2.88% 3.02% None 11.16% 11.90% 11.91% 10.27% 10.78% 6.82% 9.48% 11.20% 11.94% 12.07% 1.56% 1.71% 2.74% 3.15% 来源:Wind,国金证券研究所 我们此处展示了在预测目标分别为未来20日超额收益率和绝对收益率的情况下,因子的IC均值、多头超额收益率和多头超额回撤表现。表中Columns为预测目标的处理方式,Index为特征的处理方式。可以看出: 对特征做截面处理会显著影响LightGBM的学习效果,不同日期间的相对大小关