您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[国金证券]:Alpha掘金系列之十五:基于OpenFE框架的机器学习Level2高频特征挖掘方法 - 发现报告
当前位置:首页/其他报告/报告详情/

Alpha掘金系列之十五:基于OpenFE框架的机器学习Level2高频特征挖掘方法

2025-01-18高智威、王小康国金证券米***
Alpha掘金系列之十五:基于OpenFE框架的机器学习Level2高频特征挖掘方法

因子挖掘与OpenFE框架介绍 我们在前期报告中进行了部分高频因子构建研究,但部分在日频量价因子中可以使用的自动化挖掘模式,如遗传规划等,在高频领域实现有较大困难。在本篇报告中,我们借鉴OpenFE的框架,实现对高频因子的批量化挖掘。该框架介绍了一种在机器学习领域自动化生成特征的通用方法,将基本特征转换为信息量更大的特征,投喂各类模型后能获得更好效果。该框架提出了先扩张(Expansion)再缩减(Reduction)的方案,并将缩减过程分为两步(连续二分法和特征重要性归因)。 在扩张阶段,框架会使用我们设计的所有算子进行特征遍历,一次性得到大量特征。在缩减阶段,首先使用连续二分法对样本数据随机采样,随着轮次增加,所用样本长度逐渐提升、特征数量逐渐减少。同时使用FeatureBoost避免每次都使用所有特征投喂LGBM进行特征有效性验证,两种方式结合大幅提升了特征筛选效率。 OpenFE高频因子挖掘方案 经过统计、归纳发现,大部分高频因子均可表示成Mask、基础特征和聚合算子的组合形式。我们梳理归纳了主流的Mask和聚合算子,使用高频数据的字段进行遍历生成备选特征。经过对比可以发现,大部分高频因子均可由此方式组合得到。在计算阶段,我们将数据首先转换为tensor转移至GPU使用torch计算,运算速度得到大幅提升。在验证阶段,我们为了保证效率,使用IC作为评价指标进行逐步特征剔除。 OpenFE高频因子测试结果与选股策略 从测试结果发现,由此方法所得因子整体均有较好的选股效果。因子的周度IC均值ABS平均为2.57%。而若将这些因子作为特征输入LGBM模型,整体表现能有进一步提升,IC均值6.42%,多头年化超额7.87%。对比前期报告中LGBM使用Alpha158和GJQuant所得因子,合成后因子表现还能有所改善,IC均值8.76%,多头年化超额19.34%,多头超额回撤仅为3.86%,多空年化收益率67.08%,多空最大回撤16.98%。 考虑扣费后,所构建的中证1000选股策略在2022年-2024年10月长期的市场波动中,获得了8.62%的年化超额收益率,策略的信息比率0.77,超额最大回撤11.95%。说明使用上述方法所得高频因子在经过LGBM模型训练后,可以在中证1000股票池中获得相对较稳定的超额收益。结合我们前期报告中所使用特征数据Alpha158和GJQuant所得模型的合成因子构建策略,年化超额收益率为13.68%,超额最大回撤仅为4.38%,信息比率为1.98。 风险提示 1、以上结果通过历史数据统计、建模和测算完成,在政策、市场环境发生变化时模型存在时效的风险。 2、策略通过一定的假设通过历史数据回测得到,当交易成本提高或其他条件改变时,可能导致策略收益下降甚至出现亏损。 一、因子挖掘与OpenFE框架介绍 在量化选股领域中,因子挖掘与机器学习模型训练是两种主流的获取alpha方式。在前期报告中,我们进行了部分有一定逻辑的高频因子挖掘,同时也有一部分基于机器学习模型的选股研究,然而在日频量价和财务基本面信息作为数据输入的情况下,模型的选股效果已经达到了一个瓶颈,难以再有质的提升。A股的高频数据由于更详细的展示了A股微观结构与投资者交易行为,数据包含了除传统日频K线以外的更多字段,是近些年获取更多超额的主要来源。 目前,针对高频量价因子的挖掘,业界的主流做法是结合论文等文献中介绍的逻辑,结合行为金融学的相关理论进行因子构建、测试并最终筛选、合成。由于高频数据量相较日频大很多,整个过程比较耗时,难以像日频量价因子一样进行快速构建、测试。因此,部分在日频量价因子中可以使用的自动化挖掘模式,如遗传规划等,在高频领域实现有较大困难。 在本篇报告中,我们尝试借鉴OpenFE的框架,实现对高频因子的批量化挖掘。OpenFE(T Zhang et al,2022)介绍了一种在机器学习领域自动化生成特征的通用方法,将基本特征转换为信息量更大的特征,投喂各类模型后能获得更好效果。该框架提出了先扩张(Expansion)再缩减(Reduction)的方案,并将缩减过程分为两步(连续二分法和特征重要性归因)。 图表1:OpenFE框架概览 图表2:OpenFE算法伪代码 1.扩张阶段(Expansion) 与传统遗传规划类方法类似,OpenFE需要先根据业务情况,设计好若干算子用来对单个基本特征或多个特征进行各类运算。典型的有加、减、乘、除、开方、次幂等。并针对所有基础特征对所有算子进行遍历,得到了数量较多的备选特征。 举例而言,若原有基本特征N个,对于一元算子“平方根”,需要对每个基本特征遍历,得到N个备选特征。对于二元算子“乘”,则会产生𝐶/2个备选特征。根据该算子是否对称,也有可能会产生𝐶个备选特征。 2𝑛 2𝑛 此外,也可以根据实际需要,将上述过程中得到的备选特征再嵌套一层算子,得到数量更多的二阶特征或更高阶特征。 2.缩减阶段(Reduction) 由于扩张阶段产生了大量的特征,直接全部运算会极其耗时,因此作者提出了连续二分法(Successive Halving)将所有数据首先分成2个block,在每一轮次中,随机抽取2数据,进行特征计算和特征有效性检验。 𝑞 𝑖 图表3:OpenFE框架连续二分法算法伪代码 而在有效性检验阶段,作者提出了FeatureBoost方案。在传统特征检验时,为确保该特征的评价不会受到特征之间交互的影响,一般会首先使用所有基础特征(BF)训练一个LGBM模型,得到一个Loss作为baseline。而在验证阶段时,将所有基础特征+某一个备选特征投喂给LGBM模型重新训练,得到一个新的Loss,将两个Loss作差,检查其是否得到提升。而OpenFE中,作者只将某一个备选特征投喂模型,使模型学习之前基础特征所训练好的模型的残差,若学习后能使损失下降,则也可以说明该特征的重要性。 图表4:OpenFE框架FeatureBoost算法伪代码 因此,结合了以上连续二分法和FeatureBoost后,因子的运算和检验耗时可以得到大幅度缩减。在每一轮次,将当前备选特征数量缩减至原本的一半后,下一轮次的样本数量扩充至原来的两倍,特征数量减半。 此过程进行若干轮次后,直至所有样本均已被用来计算或特征数量已经少于我们希望的最小特征数量,即可停止该缩减过程。最终,为了全面考虑备选特征和基础特征之间可能存在的交互影响,再将宿友所有基础特征和剩余备选特征一起放入一个LGBM模型重新训练,筛选重要性最高的特征作为最终结果。 总结而言,传统的遗传规划方法会先判断一阶特征的有效性,筛选更优秀的“基因”继续繁衍生成高阶特征。我们认为,在量化领域,一个看起来无效的一阶特征并不一定不能衍生出优秀的高阶特征,两者之间并没有必然联系,这种方案会导致潜在的优秀特征遗漏。 而OpenFE一次性就生成了所有潜在(一阶)特征,若需要生成高阶特征,则不对其父特征做有效性判断,尽可能地做到了全面检验。当然,由于生成阶段不做任何筛选,因子的复杂度(阶数)就不可能过高,最终的因子公式也不会过长,也在一定程度上避免了过长的因子公式带来的可解释度下降的问题。 二、OpenFE高频因子挖掘实现方案 接下来,我们将以上框架在量化高频因子挖掘领域进行尝试探索。整个过程分以下几步完成: 1.高频因子拆解及构建 我们首先对目前市场上的主流高频因子构建方法进行归纳,发现绝大部分高频因子可以由以下几个部分组成:Mask、基础特征和聚合算子。 所谓Mask,即我们对于高频数据按照一定规则进行截取,这是由于往往同样的特征在不同的时间区间、不同的价格区间会有截然不同的表现,部分情况下效果甚至可能反向。常见的Mask包括:高(低)价格区间、早(尾)盘、高(低)成交量区间等。 基础特征:即数据中原本包含的字段,如高频快照中的高开低收成交量、订单簿的委托价委托量、逐步数据中的成交价成交量等,是我们进行因子计算的基础。 聚合算子:由于A股中我们不做高频交易,按照惯例均需要通过一定方式将其聚合至日频得到一个日频因子。常见的聚合算子包括:求和、均值、标准差、高阶矩、Argmax、PctChange等。 有以上结构,我们便可以穷举出几乎所有的高频后低频化因子。此处举例说明一二: 在我们前期报告中,曾构建过遗憾规避因子,其构建思路为:将当天逐笔成交数据中所有高于收盘价的成交量取出,求出其对于当天整体成交量的占比,以此来衡量某只股票买入浮亏情况。 𝑁𝑖 ∑ 𝑣𝑜𝑙𝑢𝑚𝑒 ∗𝐼𝑡𝑜𝑡𝑎𝑙_𝑣𝑜𝑙𝑢𝑚𝑒 𝑏𝑢𝑦𝑖 𝑝 >𝑐𝑙𝑜𝑠𝑒 𝑏𝑢𝑦𝑖 𝐻𝐶𝑉𝑂𝐿= 套入上述结构,Mask为“高于收盘价”,基础特征为“逐笔成交的成交量”,聚合算子为“求和”,而分母部分则即可以通过设置一个Mask为空的结构求和得到,也可以直接用日K线数据得到。 图表5:高频因子拆解构建示例1 在该篇报告中,我们还将因子进一步加工进行改进,通过小单和微盘的限制提升了因子表现: 𝑁𝑖 ∑ 𝑣𝑜𝑙𝑢𝑚𝑒 ∗𝐼 ∗𝐼𝑡𝑜𝑡𝑎𝑙_𝑣𝑜𝑙𝑢𝑚𝑒 ∗𝐼 ̅̅̅̅̅ [ 𝑡∈14:30,14:57 ) 𝑏𝑢𝑦𝑖 𝑝 >𝑐𝑙𝑜𝑠𝑒 𝑣𝑜𝑙<𝑣𝑜𝑙 𝑏𝑢𝑦𝑖 𝐻𝐶𝑉𝑂𝐿𝐸1= 则类似地,此处使用的Mask还有“低于笔均成交量”和“成交时间在下午2:30以后”,我们将多个Mask结果取交集即可得到该因子。 此外,价格区间因子也可以通过以上结构计算得出,我们将一天中所有成交的成交价格排序,分别取出前20%、中间60%和后20%的数据,作为Mask后再计算成交量的求和即可。 𝑁𝑖 ∑ 𝑣𝑜𝑙𝑢𝑚𝑒∗𝐼 𝑡𝑜𝑡𝑎𝑙_𝑣𝑜𝑙𝑢𝑚𝑒 {𝑗∈𝑠𝑒𝑡} 𝑎 高价格区间成交量占比= 图表6:高频因子拆解构建示例2 2.日频因子的进一步低频化 由于我们一般调仓频率为周度或月度,获得日频因子后依然需要通过一些方案进一步降频,使其包含更多历史信息,通常才会有更优的长周期预测表现。同时,原始的日频K线数据依然可以与高频降频后的日频因子进行结合,因此,我们额外设计了合适的算子进行处理。 此处的算子与传统的遗传规划用算子比较类似,可以分为一元、二元、截面、时序四大象限。此处展示部分算子: 图表7:日频特征算子示例 时序算子中的额外参数回看天数d,我们设置为5,10,20,60,从中进行遍历。并对明显不符合逻辑的特征与算子结合方案进行负面剔除,得到最终所有备选因子,不考虑多个Mask取交集的情况下,因子数量约在8000万左右。整体因子构建过程可由下图说明: 图表8:因子构建过程 不过,值得说明的是,上述结构严格限制了因子的构建顺序:Mask->基础特征->聚合->进一步可与其他因子进行算子运算。若我们希望构建如下形式的订单簿不平衡类因子: 𝐴− 𝐵𝑡 𝑉+𝑉 𝑡𝐴𝑡 𝑄𝑢𝑜𝑡𝑒𝐼𝑚𝑏𝑎𝑙𝑎𝑛𝑐𝑒= 𝐵𝑡 此类因子涉及多个基础特征的简单运算后再进行聚合降至日频,在部分情况下可能与先聚合再进行简单运算得到因子的结果有明显差异。若在聚合之前就加入算子运算的步骤,会进一步大幅度膨胀因子数量,在本篇报告中我们暂不考虑。 3.因子计算及检验 在遍历得到大量因子后,我们借鉴OpenFE的缩减思想,采用连续二分法,从少批量的样本开始,每轮逐步扩充样本数量,逐步减少因子数量。值得一提的是,该框架本身并非为量化领域设计,对于样本的采样并未按照所属时刻进行统一,可能会导致所得到样本在时间和股票两个维度上完全分散,在计算IC或时序类算子时会出现问题。 因此我们将采样方案修改,假设我们共有8年&中证1000股票池所