研究导读
得益于数据科学在线社区日益成熟,机器学习和大数据的学习门槛逐渐降低,全球的爱好 者都可以通过在线平台参与编程训练和竞赛项目,和顶尖团队进行较量和探讨。Kaggle 正 是影响力较大的平台之一,囊括了超过 500 项竞赛、5 万个数据库和 40 万组代码。美国白 宫、斯坦福大学、北京大学、微软、谷歌等机构和企业都曾在 Kaggle 发布竞赛,征集解决 方案。
量化投资和机器学习、大数据关系紧密,多家量化投资机构也在 Kaggle平台发起挑战竞赛, 发布方不乏 Winton、Two Sigma 等知名对冲基金,也包含 Jane Street、Optiver 等头部做 市商。项目内容大多是基于资产历史行情、新闻数据或匿名特征,预测未来收益率或波动 率。下表整理了 Kaggle 平台量化投资相关竞赛。2022 年 1 月,国内量化私募九坤投资也 上线 Kaggle 竞赛,受到市场关注,2893 支队伍参赛,最终前 10 名队伍获得 10 万美元奖 金。
本文的主题是“抄作业”,九坤 Kaggle 量化大赛高手云集,高分队伍是否有经验值得借鉴? 我们梳理了部分高分队伍公布的解决方案,提炼出有共性的四个方向——特征工程、损失 函数、交叉验证和模型集成,并应用于中证 500 指数增强策略的改进。结果显示,改进策 略相比基线策略有稳定提升,回测期 2011 年至 2022 年内,年化超额收益从 14.2%提升至 17.0%,信息比率从 2.3/2.4 提升至 2.7。测试的改进技巧中,神经网络引入均值因子、CCC 损失、模型集成提升作用较显著。
九坤Kaggle量化大赛高分方案解析
九坤 Kaggle 量化大赛的具体任务为:基于给定的 A 股匿名特征,采用机器学习或深度学习 算法,预测股票未来短期收益,评价指标为预测收益和真实收益的 IC 值均值,属于典型的 监督学习问题。 大赛提供的训练数据超过 18GB,每条样本为一只股票在一个交易日的数据,包含如下字段: 1. time_id:时间 id,为有序数据。 2. investment_id:股票 id。 3. [f_0:f_299]:300 个匿名特征。 4. target:预测目标,股票未来一段时间的收益率,但未公布具体区间。
比赛于 2022 年 1 月开始,7 月公布最终成绩,部分排名靠前队伍公开了解决方案。 我们从众多方案中提炼具有共性的技巧,从特征工程、损失函数、交叉验证和模型集成四 个方向展开介绍。
特征工程
特征工程是模型搭建前的数据预处理和新特征构造工作,特征工程的质量一定程度上决定 了预测结果的好坏。数据预处理主要包括缺失值填充、异常值剔除和标准化;新特征的构 造则依赖投资者的经验和对市场的理解。原始特征可能无法很好反映样本和潜在问题的关 系,通过引入对原始特征处理和组合后的新特征,或可提升模型训练效果。 九坤量化大赛中,原始数据进行了预处理和匿名处理,无法基于因子含义构造新特征,这 给特征构造增加了困难。我们发现多数高分队伍都进行了新特征的构造,仅有少数方案只 使用原始的 300 维特征。第 1、2、8 名队伍都提到了构造“按照时间 ID 取平均的均值因子”, 他们指出均值因子的引入对于模型效果有显著提升。
具体而言,假设 f_0 为某个因子,在每个交易日对全部股票的 f_0 求均值,即得到该交易日 股票的均值因子 f_mean_0。该交易日全部股票的 f_mean_0 取值相同,在交易日间有差异, 反映 f_0 因子整体分布的时变特性。这一操作在传统机器学习中似乎不常见,构造一个全部 股票取值相同的因子也略显反常,但在九坤量化大赛中有效。
关于均值因子的有效性和背后的含义,我们猜想:与其他领域的预测问题相比,股票收益 率预测有其特殊性——未来表现不仅和股票本身特征相关,还与市场整体环境(如宏观状 态、市场风格等)相关,规律存在时变特性,因此有必要引入特征刻画市场环境变化。均 值因子反映原始因子整体分布的时变特性,是市场环境的一种简单表达,可能具备一定信 息量。
损失函数
损失函数决定了模型的优化方向,损失函数的选择取决于评价指标、下游任务等因素。九 坤量化大赛的最终评价指标为预测收益和真实收益的 Pearson 相关系数,即 IC 值,衡量预 测值和真实值的线性相关程度,部分高分队伍直接采用 IC 值的相反数作为损失函数: (, ˆ) = ∑=1 ( − ‾)(ˆ − ‾ˆ) √∑=1 ( − ‾) 2√∑=1 ( ˆ − ‾ˆ) 2 均方误差 MSE 是回归任务中常用的损失函数之一,衡量预测值和真实值间的距离,对偏离 真实值的预测给予较大惩罚。部分高分队伍也采用 MSE 或 RMSE(MSE 的平方根)作为 损失函数: (, ˆ) = 1 ∑=1 ( − ˆ ) 2.
总结 IC 和 MSE 作为损失函数的优缺点: 1. IC 衡量预测值和真实值的相关性。优点是和比赛最终的评价指标直接挂钩,也是量化 机构都会考察的指标,不受量纲影响从而在模型间可比。缺点是非凸不保证收敛,可能 导致训练不稳定。 2. MSE 衡量预测值和真实值的距离。优点是易于计算和求导,具有凸性从而保证收敛, 在数据噪声较小的情况下可作为 IC 的替代。缺点是受数据量纲影响。
九坤量化大赛的讨论区里,有选手提出使用一致性相关系数 CCC(concordance correlation coefficient)作为IC和MSE的融合,同时考虑相关性和距离。CCC由Lawrence I-Kuei Lin 在 1989 年于 Biometrics 发表的论文 A concordance correlation coefficient to evaluate reproducibility 中提出: = 2 2 + 2 + ( − ) 2 (1)。
Pandit 和 Schuller 在 2019 年于 arXiv 平台发布的论文 The many-to-many mapping between the concordance correlation coefficient and the mean square error 推导了其等价 形式: = 2 + 2 (2) 观察 CCC 的定义,(1)式分子中的 ρxy 代表 x 和 y 的 Pearson 相关系数,即 IC;(2)式分母 包含 MSE。直观来看,分子考虑两组数据的相关性,分母对两组数据均值的偏离度进行了 惩罚。实际使用中,可以取 CCC 的相反数作为损失函数。尽管高分队伍未使用 CCC 损失, 我们仍可以从讨论区中获得启发。
交叉验证
交叉验证主要用于选择模型超参数。最简单的方式是单次验证,即选择固定比例的训练集 和验证集。常用的方式是 K 折交叉验证,将原始数据分成 K 份,每次使用 K-1 份训练模型, 使用剩余 1 份评价模型,对 K 次评价取平均作为该组超参数的整体评价。但 K 折的缺点是 可能使用未来信息,第 1、7 名队伍均提到该问题,并提出使用时序交叉验证。 我们在《人工智能 14:对抗过拟合:从时序交叉验证谈起》(2018-11-28)中介绍过该方法。 时序交叉验证将原始数据按时间顺序划分为 K 份,第 i 次验证时,使用 1 至 i 份训练模型, 第 i+1 份评价模型,避免未来信息,使用数据量约是 K 折交叉验证的一半。总的来看,时 序交叉验证的优点是无未来信息,且使用数据量少时间开销低,缺点是可能存在欠拟合风 险。
模型集成
模型集成可以看成机器学习中“免费的午餐”。完美训练单个模型难度很大,模型集成通过 融合多个子模型,实现取长补短,为比赛中多数高分队伍采用。第 1、8、17 名集成了多种 不同类型的子模型,如决策树类模型和神经网络模型;第 2、3 名集成了多个同类型的子模 型。尽管投票法、Stacking 等模型集成方法层出不穷,比赛中仍主要采用最简单的等权法。 高分队伍使用决策树类模型和神经网络模型作为子模型,两者有各自优势,集成能起到互 补效果。决策树类模型对于数据的要求相对较低,对异常值、缺失值和特征间数量级不敏 感,是在实操中较常用的一类模型。神经网络一般要求数据数量级一致、不能有缺失值, 但可以通过批量训练将多个截面的信息一并地输入到模型中,自动构造出有效的新特征。
除上述四项外,高分队伍在模型架构上亦有可取之处,如第 1 名采用 TabNet,第 3 名采用 Transformer,但模型本身不是本研究关注的重点,故不作进一步测试。有少数队伍采用了 独特的训练技巧,如第 3 名使某些特征随机变为 0,第 5 名对预测目标取对数,对特征做分 位数转换(未指明转换成何种分布),上述个性化处理也不在后文讨论之列。
方法
基线模型为全连接神经网络(nn)和 XGBoost(xgb),特征为 42 个常规的基本面和量价 因子,标签为未来 10 个交易日收益率在截面上的排序,损失函数为加权 mse(wmse),以 截面上个股收益率排序进行衰减加权。交叉验证方法为单次验证,以 252*6 个交易日为训 练集,252*2 个交易日为验证集,252*0.5 个交易日为测试集,相当于约半年滚动训练一次。 交叉验证配合早停,仅用于确定模型的迭代次数,其余超参数均为固定值。
下面介绍四个方向的改进技巧: 1. 特征工程:除原始 42 个因子外,增加 42 个均值因子。针对每个原始因子,首先进行 去极值;其次在截面上将因子转换为标准差等于 1 的分布,避免因子间量纲差异的影响; 随后对截面上全部股票求均值;最后整体乘以 0.01,突出原始因子作用,弱化均值因 子影响。整体乘以 0.01 对模型的影响将在后文讨论。 2. 损失函数:测试 MSE、IC、CCC 三类损失函数,每类损失又分为等权和加权两种情况。 其中加权 CCC 定义为: = 1 ∑ , = 1 ∑ 2 = 1 ∑ ( −) 2 , 2 = 1 ∑ ( − ) 2 h_ = 1 ∑ − 2 + 2 + ( − ) 2 XGBoost 不便于自定义此类损失函数,故测试仅针对全连接神经网络。
3. 交叉验证:采用 5 折时序交叉验证结合网格搜索,确定 XGBoost 学习率和最大树深。 神经网络训练时间开销大,故测试仅针对 XGBoost。同样受限于时间开销,本文未测 试 K 折交叉验证,网格搜索颗粒度也较粗。超参数搜索方式的优化有待进一步研究。4. 模型集成:直接对全连接神经网络和 XGBoost 预测值取均值,两类模型等权。若神经 网络有细分子模型,则内部再进行等权平均。
结果
全部测试模型因子评价指标及回测绩效。核心结论如下: 1. 特征工程引入的均值因子对神经网络有提升,但削弱了 XGBoost。 2. 损失函数中,MSE 表现不突出;IC 损失单因子测试表现好,但指增组合回测表现差; CCC 损失在单因子测试表现一般,但指增组合回测表现较好;加权均优于等权。 3. 交叉验证调参改进不显著,考虑到时间开销大,性价比并不高,算力有限前提下,使用 经验超参数即可。 4. 模型集成提升较稳定,神经网络类和决策树类模型有互补效果。
特征工程
对比引入均值因子前后的表现。神经网络无论在 Top 组收益,还是在指增组合年化超额收 益、信息比率方面,均有显著提升。但 XGBoost 在上述指标均有较大削弱。原因可能是 XGBoost 对均值因子的“过度”使用,具体将在后文探讨。
损失函数
对比神经网络模型 MSE、IC、CCC 三类损失函数,以及等权和多头加权两种方式的表现。 单因子测试结果可概括为“种瓜得瓜,种豆得豆”。IC 损失下的 IC 均值和 Rank IC 均值较高, 加权 IC 损失下的加权 IC 均值和加权 Rank IC 均值较高。多头加权损失的 Top 组收益均高 于对应的等权损失。 但单因子测试和指增组合测试存在错位。加权 IC 损失的单因子多头收益和对冲收益均高于 其余损失,但指增组合表现却低于除等权 IC 损失外的其余损失。CCC 损失的单因子表现不 算突出,但从指增组合表现看,无论是等权和加权,均优于对应的 MSE 和 IC 损失。加权 CCC 损失的年化超额收益和信息比率较出色。
交叉验证
对比 XGBoost 模型时序交叉验证调参的表现,调参后的模型仅在指增组合超额收益回撤比 指标上有显著提升,其余重要指标反而略有削弱。但交叉验证调参的时间开销(近 19 小时) 远高于不调参(近 5 分钟),在算力有限情况下性价比不高。 需要说明的是,本文采用网格搜索的调参方法效率较低,从而导致调参颗粒度较粗糙。基 于贝叶斯优化的调参方法可以提升搜索效率,有待进一步测试。
模型集成
对比模型集成后的表现,各集成模型在单因子加权 RankIC 均值、多空收益、指增组合年化 超额收益、信息比率上均有显著提升。并且子模型为改进模型(后 3 组)的表现优于子模 型为原始模型(nn+xgb)。对比前述特征工程、损失函数、交叉验证的技巧,模型集成带来 的提升幅度更大且效应更稳定。
讨论
均值因子在神经网络和XGBoost间的差异,兼谈如何使用弱因子
特征工程引入均值因子提升神经网络表现,但削弱 XGBoost 表现。要弄清此中原因,相当 于用线性的人脑理解非线性模型的工作机理,难度颇大,我们尝试从下列角度分析。 首先,我们提出一个假设:均值因子属于弱因子,有用,但比重不宜过大。前文提到,均 值因子是对市场环境的刻画,有一定信息量;高分队伍的实践也表明该因子有效。但我们 同时观察到,比赛中第 1、2 名未使用全部 300 个匿名特征构建均值因子,而是筛选 IC 前 100 个特征构建,均值因子从数量上比重不高,模型对均值因子的使用是有限度的。并且从 理论上分析,选股模型应侧重于个股信息的挖掘,市场环境信息只起到辅助作用。
其次,考察 XGBoost 模型的特征重要性,计算各期特征重要性均值。在 引入均值因子的 xgb_fe 模型中,重要性最高的特征为 bp_lf_mean,即 bp_lf 的均值因子。 重要性排名前 10 的特征中,均值因子占据 4 位。XGBoost 模型全部均值因子重要性之和 占比 44%,接近一半水平,比重较高。
再次,测试均值因子缩放系数的影响。预处理环节,我们对均值因子整体乘以 0.01,突出 原始因子作用,弱化均值因子影响。需要说明的是,从两类模型的原理看,特征的相对量 级对神经网络有效,对 XGBoost 影响不大。我们进一步测试均值因子缩放系数为 1e-4 和 1 时的表现以验证上述猜想。当缩放系数为 1,即不对均值因子做缩放处理时,神经网络和 XGBoost 均表现较差。随着缩放系数的降低,神经网络有显著提升,在系数为 0.01 时已能战胜原始 模型;XGBoost 变化不大,都不能战胜原始模型。由此可见,神经网络主动降低均值因子 值有一定效果,但对 XGBoost 不起作用。
最后,从理论角度分析两类模型训练过程。XGBoost 对特征进行随机采样,在采样的候选 特征中寻找最优划分方式,并非从全部特征中搜索。XGBoost 引入均值因子这类弱因子后, 原始特征被采样到的概率下降,可能被排除在候选特征外,导致模型预测效果下降。神经 网络不涉及特征采样操作,因此可以通过缩小取值的方式,在合理限度内使用弱因子。
MSE和IC损失函数的差异,兼谈因子合成和组合优化的目标错配问题
本文另一个“反直观”的结论是 IC 和加权 IC 作为损失函数,单因子测试表现较好,但指 增组合表现较差,弱于 MSE 和 CCC 损失。这也是因子投资长期存在的痛点,难度同样颇 大,我们尝试做如下分析。 一个不会出错的回答是:单因子测试和策略回测有差异,其背后是因子合成和组合优化两 步的目标错配。该问题早已为研究者关注,常用的样本多头加权,正是针对指数增强多头 组合,在因子合成这步进行的修正(尽管未必是最佳解决方法),使因子合成的目标尽可能 向组合优化的现实场景靠拢。
然而这并不能解答本文遇到的问题,即使是加权 IC 损失,在分 10 层多头收益高于加权 MSE 和加权 CCC 的情况下(25.0%,高于 24.7%和 24.2%),指增组合超额收益仍然大幅落后 (8.3%,低于 14.2%和 15.4%),这又如何解释? 容易想到的解释是分 10 层还不够细。随着 A 股市场的扩容,指增选股数量在股票池的占比 进一步减小,选股更加向头部集中。目前行业里常见的做法是分 20 层测试, 加权 IC 多头端收益仍然优于加权 MSE 和加权 CCC。看来问题不在于评价指标是分 10 层 还是 20 层。
可否考察加权 IC 超额收益低于加权 MSE 的交易日,从个案出发寻找线索?我们统计加权 MSE 相比加权 IC 近 10 日超额收益,差距最大的交易日为 2015 年 1 月 19 日。由于预测区 间为未来 10 个交易日,前推 10 日为 2015 年 1 月 5 日。我们对比该截面日下,各模型的 预测值和真实值。 该截面日股票池有 1127 只有效样本,即使分 20 层测试,由于分层组合收益通常为等 权重计算,这些点也会被淹没在 Top 组的 50 多只股票中,但恰恰是这些样本很大程度上左 右了策略的收益。
至此我们得到下列关键结论: 1. 评价指标的角度:传统的单因子测试评价指标可能不适用于目前多头选股场景。IC 值、 t 统计量等反映预测值的全局性,但对多头侧重不够,即使是加权 IC、分 20 层回测多 头收益,也会和最终选股组合表现脱节。 2. 损失函数的角度:以 IC 为损失函数,可以让评价指标变得很好看。但 IC 作为全局性的 统计量,不会侧重于个别头部样本,但这些少数样本可能对组合优化影响很大。而 MSE 的特点之一是给予极端误差较大惩罚,恰好可以弥补 IC 的弱点。CCC 结合 IC 和 MSE 的特点,同时学习数据中的共性和个性,在本文中表现好也就不难理解。
3. 因子合成和组合优化的目标错配:理想的解决方案是将两步放在相同的网络中进行优化, 实现真正的端到端训练。但当前技术尚未成熟,我们也暂没有特别好的思路。相对现实 的方案是设计因子合成的损失函数和评价指标,尽可能向组合优化场景靠拢。例如根据 多头选股数量,确定损失函数和评价指标的多头倾斜程度;融合多种损失函数,或采用 多目标训练等。
总结
本文梳理 2022 年九坤 Kaggle 量化大赛高分队伍解决方案,提炼出特征工程、损失函数、 交叉验证、模型集成四个主要方向,并应用于华泰人工智能中证 500 指数增强策略改进。 结果表明:(1)特征工程引入均值因子对神经网络有效;(2)CCC 损失优于 MSE 损失和 IC 损失;(3)时序交叉验证作用不明显;(4) 集成神经网络和决策树类模型提升较稳定。对比 整合多项改进的模型与基线模型,回测期 2011 年至 2022 年内,年化超额收益从 14.2%提 升至 17.0%,信息比率从 2.3/2.4 提升至 2.7。
随着数据科学在线社区日益成熟,越来越多的爱好者投身于网络编程竞赛之中。Kaggle 是 全球知名的数据科学在线平台之一,Two Sigma、Optiver 等头部量化机构曾在 Kaggle 发 布挑战竞赛。国内量化私募九坤投资于 2022 年 1 月启动 Kaggle 竞赛,吸引两千多只队伍 参赛。比赛具体任务为基于给定的 A 股匿名特征,预测股票未来短期收益,最终评价指标 为预测收益和真实收益的 IC 值,属于典型的监督学习问题,和实际量化选股场景较贴近。
我们梳理九坤 Kaggle 量化大赛高分队伍解决方案,提炼出四个改进方向。(1)特征工程引入 截面上全部股票因子的均值,均值因子可能反映原始因子整体分布的时变特性,是市场环 境的一种简单表达。(2)损失函数引入一致性相关系数 CCC,可视作 IC 和 MSE 的融合,兼 顾相关性和距离。(3)采用时序交叉验证选取最优超参数。(4)集成不同类型机器学习模型。 以神经网络和 XGBoost 构建中证 500 指数增强策略作为基线,测试上述技巧的改进效果。
四项改进技巧效果各异。特征工程引入的均值因子对神经网络有提升,但削弱了 XGBoost。 损失函数中,MSE 表现不突出;IC 损失单因子测试表现好,但指增组合回测表现差;CCC 损失在单因子测试表现一般,但指增组合回测表现较好;加权均优于等权。交叉验证调参 改进不显著,考虑到时间开销大,性价比不高,算力有限前提下,使用经验超参数即可。 模型集成提升较稳定,神经网络类和决策树类模型有互补效果。
研究发现均值因子对神经网络有效但对 XGBoost 无效。均值因子属于弱因子,有用但比重 不宜过大。XGBoost 引入弱因子后,特征采样使原始因子可能被排除在外,从而削弱模型。 神经网络可通过预处理缩小取值,有限度地使用弱因子。研究还发现 IC 损失单因子测试优 于 MSE 损失,但指增组合表现差,本质是因子合成和组合优化的目标错配。IC 属于全局统 计量,不会侧重于个别头部样本,但这些样本可能对组合优化影响较大。MSE 的特点之一 是给予极端误差较大惩罚,恰好弥补 IC 弱点。CCC 融合 IC 和 MSE,兼顾共性和个性,是 一类理想的损失函数。
(本文仅供参考,不代表我们的任何投资建议。如需使用相关信息,请参阅报告原文。)