人工智能系列之十六:再论时序交叉验证对抗过拟合-20190218-华泰证券-23页_1mb
报告摘要
金工研究:对抗过拟合的时序交叉验证改进
核心内容
本文围绕时序交叉验证对金融时间序列数据建模过程中的过拟合问题进行深入探讨,并提出分组时序交叉验证作为改进方法。研究旨在明确时序交叉验证相较于传统K折交叉验证的提升是否源于保留时序信息,还是使用更少样本。同时,通过对比多种基线模型,分析不同交叉验证方法在模型性能和单因子测试中的表现。
主要观点
-
时序交叉验证与K折交叉验证的对比:
- 传统K折交叉验证不适用于时间序列数据,容易导致模型过拟合。
- 时序交叉验证通过保留数据的时间顺序,有效降低过拟合风险,但样本内表现弱于K折。
- 分组时序交叉验证在样本内表现略优于时序交叉验证,且能更精细地切分训练集和验证集,确保验证集严格位于训练集之后。
-
基线模型设置的改进:
- 本文引入了三种新的基线模型,包括“训练集折半的K折交叉验证”和“乱序递进式交叉验证”等,用于更准确地评估时序交叉验证的优势来源。
- 新基线模型在样本内表现略优于K折,但不如时序和分组时序交叉验证,表明模型表现的提升部分源于使用更少样本。
-
模型性能表现:
- 时序和分组时序交叉验证在测试集表现上优于其余基线模型。
- 对于逻辑回归和XGBoost两种基学习器,时序和分组时序交叉验证在年化收益率、夏普比率、最大回撤、Calmar比率等指标上表现更优。
- 时序和分组时序交叉验证选出的模型更简单,泛化能力更强,过拟合风险更低。
-
单因子测试结果:
- 时序和分组时序交叉验证在因子收益率和RankIC上表现更优,但RankIC波动较大,影响IC_IR和IC>0占比。
- 在多空组合测试中,时序和分组时序交叉验证表现优于其余基线模型,但夏普比率不占优势。
-
推荐方法:
- 推荐使用分组时序交叉验证作为对抗过拟合的主要方法。
- 该方法通过改进scikit-learn库的
model_selection模块,实现更精确的训练集和验证集切分。
关键信息
- 数据来源:全A股,时间区间为2011年1月31日至2019年1月31日。
- 因子池:包含估值、成长、财务质量、杠杆、市值、动量反转、波动率、股价、beta、换手率、情绪、股东、技术等大类,共70个因子。
- 模型调参方法:使用网格搜索,以验证集平均AUC最高作为最优超参数选择标准。
- 回测方式:包括回归法、IC值分析法、分层回测法,以评估模型的预测能力和实际表现。
- 代码实现:通过修改scikit-learn的
_split.py和__init__.py文件,实现GroupTimeSeriesSplit类,用于分组时序交叉验证。
结论
- 时序交叉验证相较于K折交叉验证,在测试集表现更优,主要得益于保留时序信息。
- 分组时序交叉验证在样本外测试表现略优于原始时序交叉验证,进一步提升了模型的泛化能力。
- 不同交叉验证方法在样本内表现和测试集表现上存在差异,推荐在金融时间序列建模中使用分组时序交叉验证。
风险提示
- 时序和分组时序交叉验证高度依赖基学习器的性能,若未来市场环境变化导致基学习器失效,该方法可能失效。
- 存在一定的欠拟合风险,需在模型复杂度和泛化能力之间权衡。
- 需注意样本外测试的稳定性,避免因数据波动导致策略表现不稳定。
附录信息
- 本文测试了六种交叉验证方法,包括:
- K折交叉验证
- 时序交叉验证
- 训练集折半的K折交叉验证
- 乱序递进式交叉验证
- 分组时序交叉验证
- 乱序分组递进式交叉验证
- 每种方法在模型性能、单因子测试、分层回测等方面均有详细分析。
- 附录提供了分组时序交叉验证的代码实现,包括
GroupTimeSeriesSplit类的定义和主函数调用方式。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载