模型训练的若干细节测试 机器学习模型通过其复杂的非线性方式往往能得到较好的截面选股能力,但由于其“黑箱”的特性使投资者在进行模型训练的过程中对于很多细节问题没有明确的定论。本篇报告尝试探索了以下几个细节问题:包括特征和标签的数据预处理方式,使用全A股票训练还是成分股训练,使用一次性训练、滚动或是扩展训练的效果区别,分类模型和回归模型的差异,损失函数改为IC后是否有进一步提升,不同的树集成方法优劣对比共六个方面。 发现对于截面模型和时序模型而言,其最优数据预处理的方式有所不同。截面模型更适合使用整个训练集进行ZScore标准化,从而保留数据不同日期间的相对大小关系,而时序模型则应对特征和标签分别使用不同的方式处理。在训练方式上,我们也针对一次性、滚动或扩展训练进行对比,发现选取合适的样本区间能使模型更能适应不同的市场环境。在训练所用样本上,我们发现使用全A训练还是成分股训练既与所使用基准有关,同时也与模型本身特性相关,需要分情况使用最合适的样本。而在分类和回归模型的选择上,我们经过对比发现,回归模型所得因子在各指标上都能超过分类模型的效果,保留更有颗粒度的标签数据有助于提升模型的学习效果。而对于损失函数是否有必要直接修改为IC指标,我们经过多种测试,发现并没有带来显著的改善效果,使用MSE作为损失函数较为合适。最终,对于不同的决策树集成算法,我们经过对比发现引入了Dropout思想的DART模型超过了GBDT算法,能有效缓解模型可能存在的过拟合问题。 改进后因子与策略效果 最终,我们保持与原框架一致,使用GBDT和NN两大类模型分别在不同成分股上训练,得到了在样本外效果突出的因子。在沪深300上,因子IC均值1098,多头年化超额收益1966,多头超额最大回撤640。在中证500上,因子IC均值与沪深300近似,为1087,多头年化超额收益率为1293。而在中证1000成分股上,因子表现尤其突出,IC均值1514,多头年化超额收益率2348,多头超额最大回撤312。最终,我们结合交易实际,构建了基于各宽基指数的指数增强策略。其中,沪深300指数增强策略年化超额收益达到1543,超额最大回撤为287。中证500指增策略年化超额收益2050,超额最大回撤839。中证1000指增策略年化超额收益3225,超额最大回撤433。 风险提示 1、以上结果通过历史数据统计、建模和测算完成,在政策、市场环境发生变化时模型存在时效的风险。 2、策略通过一定的假设通过历史数据回测得到,当交易成本提高或其他条件改变时,可能导致策略收益下降甚至出现亏损。 内容目录 一、不同数据预处理方式的对比4 11数据准备与预处理的方式4 12不同数据预处理方式对比4 二、全A训练还是成分股训练?7 三、一次性、滚动还是扩展训练?9 四、分类还是回归?11 五、损失函数是否有必要修改为IC?12 六、GBDTDARTorRF13 七、改进后因子与策略效果14 71因子测试结果14 72基于GBDTNN的指数增强策略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:基于GBDTNN的沪深300指数增强策略指标17 图表30:基于GBDTNN的沪深300指数增强策略净值曲线17 图表31:基于GBDTNN的沪深300指数增强策略分年度收益18 图表32:基于GBDTNN的沪深300指数增强策略分年度收益18 图表33:基于GBDTNN的中证500指数增强策略指标18 图表34:基于GBDTNN的中证500指数增强策略净值曲线19 图表35:基于GBDTNN的中证500指数增强策略分年度收益19 图表36:基于GBDTNN的中证500指数增强策略分年度收益19 图表37:基于GBDTNN的中证1000指数增强策略指标20 图表38:基于GBDTNN的中证1000指数增强策略净值曲线20 图表39:基于GBDTNN的中证1000指数增强策略分年度收益20 图表40:基于GBDTNN的中证1000指数增强策略分年度收益21 一、不同数据预处理方式的对比 在上篇报告中,我们使用了GBDT和NN两大类模型和两种预测标签分别训练并最终合成,在A股各宽基指数成分股上均有不错的预测效果。但模型训练过程中的众多细节问题并未展开讨论和充分对比验证,在本篇报告中,我们将进一步深入机器学习在量化选股领域的研究,结合数据和市场的实际情况,针对性地优化模型训练过程,争取为投资者更好地使用机器学习模型提供参考依据。 为避免随机种子对预测结果产生的影响,我们对于所有模型均使用5个固定随机种子取均值的方式使结果更具参考价值。所用特征数据集、训练区间划分等细节可参考《Alpha掘金系列之九:基于多目标、多模型的机器学习指数增强策略》。 11数据准备与预处理的方式 由于通过机器学习训练得到最终结果存在较高的不可解释性,保证输入模型数据的准确性和细节的严谨性变得尤为重要。 在数据源层面上,由于主流的行情数据来源对于停牌股票当天的价格数据均会赋值为停牌前一天的价格,仅成交量会赋值为0。若股票连续停牌时间较短,则与价格相关的特征不会受到太大影响,但若特征计算过程中使用了成交量信息,可能会出现较大或较小的异常值。若停牌时间较长,则价格相关的特征会长时间没有变化,同样对于模型来说属于污染数据难以学习。因此,我们首先将停牌日的股票行情数据均统一赋值为NaN,计算相关特征时则会对应计算为NaN。 在标签层面,由于我们希望模型学习到的结果用来在次日开始调仓,与回测时保持一致。因此,对于月度调仓的策略而言,我们统一使用T1至T21日的收盘价信息计算收益率等数据作为标签。 由于不同特征和标签的量纲天然不同,若直接将数据喂入模型可能会使模型难以有效高效地实现梯度下降,因此进行适当的标准化处理一般而言是有必要的。而标准化处理的具体方式有很多选择: 截面ZScore标准化(CSZScore):对所有数据按日期聚合后进行ZScore处理,主要目的在于保证每日横截面数据的可比性。 截面排序标准化(CSRank):对所有数据按日期聚合后进行排序处理,将排序结果作为模型输入。此方法主要目的在于排除异常值的影响,但缺点也很明显,丧失了数据间相对大小关系的刻画。 数据集整体ZScore标准化(ZScore)截面标准化会使数据损失时序变化信息,而整个数据集做标准化可以将不同日期的相对大小关系也喂入模型进行学习。当然此处需要注意数据泄露问题,我们使用训练集算出均值和标准差后,将其用于整个数据集进行标准化。 数据集整体Minmax标准化(MinMax):相较于ZScore标准化而言,MinMax能使数据严格限制在规定的上下限范围内,且保留了数据间的大小关系。 数据集整体RobustZScore标准化(RobustZScore):由于标准差的计算需要对数据均值偏差进行平方运算,会使数据对极值更敏感。而M 能有效解决这一问题,使得到的均值标准差指标更加稳健。 12不同数据预处理方式对比 我们针对以上数据预处理方式进行遍历测试,以LightGBM和GRU分别代表两类模型,不同处理方式所得到因子在沪深300成分股的效果如下: 图表1:各类不同数据预处理方式的IC均值对比(LightGBM) 预测目标为超额收益率 预测目标为绝对收益率 CSZScore CSRank CSRankCSZScore Zscore RobustZscore Minmax None CSZScore CSRank CSRankCSZScore Zscore RobustZscore Minmax None CSZScore 882 1002 981 476 514 331 235 868 1010 1013 474 400 474 492 CSRank 892 1016 1017 704 807 680 777 936 1038 1030 128 079 006 029 CSRankCSZScore 1116 1190 1191 1027 1078 682 948 1120 1194 1207 156 171 274 315 Zscore 1135 1179 1173 1036 1067 687 971 1132 1202 1203 102 085 292 361 RobustZScore 1103 1183 1196 1013 1069 748 956 1161 1218 1200 136 077 283 347 Minmax 1135 1177 1187 1015 1065 722 975 1132 1185 1213 140 147 288 302 None 1116 1190 1191 1027 1078 682 948 1120 1194 1207 156 171 274 315 来源:Wind,国金证券研究所 我们此处展示了在预测目标分别为未来20日超额收益率和绝对收益率的情况下,因子的IC均值、多头超额收益率和多头超额回撤表现。表中Columns为预测目标的处理方式,Index为特征的处理方式。可以看出: 对特征做截面处理会显著影响LightGBM的学习效果,不同日期间的相对大小关系被忽视会影响截面模型对于未来收益率的预测能力。 若使用绝对收益率作为预测目标,则必须进行截面标准化处理。否则模型会受到市场整体行情干扰,彻底失去学习能力。 相较于超额收益率作为预测目标,绝对收益率能获得相对更高的IC(不到1),但多头超额和回撤水平显著不如超额收益率。 若使用超额收益率作为预测目标再进行截面标准化处理,效果与绝对收益率基本一致,反而失去了其超额收益率的信息。而对整个数据集进行标准化处理能得到相对更优的多头超额和回撤水平。几类对比发现,RobustZscore表现更加稳健。 综上,针对GBDT类模型,我们使用超额收益率作为预测目标,特征和标签均使用RobustZsc