如何实现用遗传算法或神经网络进行因子挖掘?
1. 问题介绍
多因子模型是量化投资中广泛使用的模型。多因子
论文: AutoAlpha: an Efficient Hierarchical Evolutionary Algorithm for Mining Alpha Factors in Quantitative Investment 1. 问题介绍 多因子模型是量化投资中广泛使用的模型。多因子模型的成功在很大程度上取决于模型中使用的Alpha因子的有效性。在量化多因子选股领域中,Alpha因子的挖掘是一个关注度经久不衰的主题。以往的因子研究中,人们一般从市场可见的规律和投资经验入手,进行因子挖掘和改进,即“先有逻辑、后有公式”的方法,常见的因子如估值、成长、财务质量、波动率等都是通过这种方法研究得出的。随着市场可用数据的增多和机器学习等先进技术的发展,我们可以借助计算机在海量数据中进行探索,通过“进化”的方式得出一些经过检验有效的选股因子,再试图去解释这些因子的内涵,即“先有公式、后有逻辑”的方法。以上两种方式对应于选股因子研究方法中的“演绎法”与“归纳法”,都有一定的存在基础。而后者的优势在于可以充分利用计算机的强大算力进行启发式搜索,同时突破人类的思维局限,挖掘出某些隐藏的、难以通过人脑构建的因子,为因子研究提供更多的可能性。 2. 本文贡献 本文提出了一种新的进化算法AutoAlpha,用于从海量股票数据集中自动生成有效的Alpha因子。将进化算法直接引入通常会面临一下几个问题: 如何快速定位有希望的搜索空间,通常有效的Alpha因子在整个搜索空间中是非常稀疏的,普通的遗传算法的搜索效率会非常低;引导搜索远离已探索的搜索空间。通常我们希望可以找到相关性低的各种Alpha因子,然而普通遗传算法通常会收敛到相同的局部极小值。防止过早收敛问题。当某些类型的有效基因支配整个种群并破坏种群的多样性时,遗传算法会出现早熟收敛问题。当早熟收敛发生时,种群会陷入次优状态,无法再产生性能更高的后代。 AutoAlpha提出了下面的改进以解决上述问题:、 通过设计了一个层次结构来快速定位有希望的搜索空间; 提出了一种新的基于主成分分析(PCA-QD)的质量差异搜索(Quality Di-versity search),以引导搜索远离充分探索的空间,获得更理想的结果; 利用热启动方法和重定位方法来防止早熟收敛问题。 基于上述改进的AutoAlpha算法,本文提出了一个集成学习排名模型来预测股票排名并制定有效的股票交易策略。通过对中国股票市场的不同持有期进行了反向测试。回溯测试结果表明,本文的方法始终优于几个基线和市场指数。 3. 算法分析3.1 问题定义 因子挖掘可以看作是一个特征提取问题。从一组初始的基本特征(如开盘、收盘、成交量等)和运算符(如+-*/、最小值、标准差等)开始,然后构建满足特定绩效衡量标准的因子,以揭示股市的一些内在模式。 股票回报 股票的回报率通常由股票的收盘价和持有期决定。对于给定的股票s、给定的日期t和给定的持有期h,股票收益率可以计算为: close_t,s是股票s在第t时刻后的收盘价。 因子评价标准 对于给定的公式化α_i。通过使用IC(信息系数)来评估α的有效性。对于给定的公式化α_i和给定的持有期h,IC的计算公式: corr通常使用皮尔逊相关系数。IC表示因子和股票回报之间的相关性。通常相关性越高,因子越有效。 因子相似性 不同因子之间的相关性也可以通过相关系数进行计算: 我们希望能挖掘出尽可能多的不一样的因子,如果因子的相关性低于0.7,则假设两个因子是不一样的。 3.2 AutoAlpha算法 AutoAlpha是一个基于遗传算法的框架。遗传算法是一种元启发式优化算法,其灵感来自于产生新后代和进化物种的生物过程。遗传算法使用诸如繁殖、交叉、变异和选择等机制来产生新的后代。在再生的每个步骤中,它使用适应度函数来选择最适合繁殖的个体。通过交叉和移动操作生下新的后代后,用新的个体替换种群中最不合适的个体,以实现竞争淘汰机制。 为了使用遗传算法挖掘Alpha因子,首先需要定义因子的公式化遗传表示。如图3最左边的树所示基于遗传算法的随机优化搜索,公式化Alpha可以表示为公式化树。通常对树木进行交叉和繁殖会比较容易。图3显示了深度为2的两个公式化因子之间的交叉。在相同的深度级别执行交叉,以防止深度增加。也就是说,图3中gene1和gene3之间的交叉是不允许的。gene2和gene3被称为根基因,它们直接连接到它们的根操作符,而gene1则不是。 层次结构 通常树的搜索空间是巨大的,有效的因子是非常稀少和稀疏。在实验中发现,标准的遗传算法(例如,在python包中实现的遗传算法 gplearn)在初始化群体和探索搜索空间方面通常效率不高。为了解决这个问题,本文提出遗传算法的一种新的分层搜索策略。该策略在初始化和搜索空间的排除方面明显更有效率。 根据实验本文提出了一个关于因子有效性固有模式的假设,即大多数有效因子至少有一个有效的根基因。直觉上,如果想要获得更高深度的因子,应该在较低深度的有效因子附近搜索。本文通过实验证明了该假设是成立的。 根据分析,如果维持一个具有反向和有效根基因的种群,交叉操作将试图搜索附近深度较低的有效公式,从而提高获得多样有效因子的效率。为了建立一个多样化和有效的基因库来初始化群体,本文使用层次结构作为AutoAlpha的框架,并从较低的深度到较高的深度迭代生成Alpha。 引导搜索 现在问题已经转向如何生成每种深度的因子。与许多优化和搜索问题不同的是,我们的目标是寻找尽可能多的具有高IC和低相关性的因子。如果已经获得了一组因子,我们希望引导搜索进入更多的未探索空间。然而,遗传算法通常会收敛到相同的局部极小值。在遗传算法界,解决此类问题的一种方法是质量多样性(QD)搜索,该搜索旨在找到最大多样性的个体集合,其中每个个体都有理想的表现。如果可以计算个体之间的相似性(或距离),那么可以通过惩罚来指导搜索。例如,如果新因子与记录中任何因子之间的相似性超过某个阈值,则新因子的适合度将被惩罚为0(最小适合度)。但是随着因子增多,因子相似性的计算将变慢,假设记录的大小为p,则计算新因子和记录中因子之间的相似度的时间复杂度将为O(npT),其中T是交易天数,n是股票数量。 为了降低时间复杂度,本文找到了一种更简单的近似相似度的方法,并设计了PCA-QD搜索。首先使用第一主成分向量来表示因子的信息。具体而言,因子的值可以表示为样本矩阵a(i)=(a(i)t,s)t×n,其中每列可以视为特征,每行可以视为样本。然后可以计算样本矩阵的第一主成分。接下来使用两个因子的第一个主成分之间的皮尔逊相关性,称之为PCA相似度,来近似两个因子之间的相似度。用幂法计算的第一主成分为O(nT+n2)。通过这种方式将计算相似性的计算复杂性从O(npT)降低到O(pT)。 防止过早收敛 早熟收敛问题一直是遗传算法中的一个关键问题。如果总是用更适合的新个体来取代最不适合的个体,那么很可能某些类型的有效基因会支配整个群体并破坏。当早熟发生时,整个种群过早陷入一个糟糕的局部极小值。有许多方法可以解决早熟收敛问题,本文从中选择了两种方法。 热启动。在初始化步骤中不是随机生成种群大小的个体,而是生成种群大小K倍的个体,然后根据IC将排名前1K的个体选择到种群中作为初始化。通过这种方式提高了初始化个体的平均有效性,从而加速了进化。温启动方法帮助筛选出那些在构建更深入的因子方面没有用处的基因。更换方法。在繁殖步骤中不是将新个体与群体中最不合适的个体进行比较,而是将新个体与其父母进行比较。一对父母在交叉后有两个子女,当它们的最佳适应度大于它们的父母时,这两个子女可以代替它们的父母。这样,种群中的所有基因在繁殖后只有一个拷贝,这有助于防止过早收敛问题。 使用挖掘出的因子作为输入特征,并使用LightGBM和XGBoost作为学习算法来学习股票排名。然后将结果进行整合,并在测试期间将其用于股票投资。 5. 实验结果 实验设置 分别独立进行了为期1天和5天的实验。首先使用AutoAlpha为给定的持有期生成一组有效的公式化Alpha。然后使用集成模型来学习对股票进行排序。最后使用预测的排名构建每天的股票投资组合,并提供回溯测试来评估生成的Alpha的有效性。 实验数据 在挖掘Alpha因子时,使用CSI 300指数(hs300)5中的300只股票作为股票池进行训练。对沪深800指数的股票池进行了回测。整体测试周期为20170901至20190731,培训周期为20100101至20170831。 评价标准 使用年化回报和夏普率作为评价指标。 比较基准 Alpha101 因子库 gplearn遗传算法 SFM算法 Market基准 6. 总结展望 本文提出了AutoAlpha算法用于因子自动挖掘。实验结果回溯测试和与几个基线的比较表明本文的方法是有效的。AutoAlpha也可以被看作是一种自动特征排除的方法。随着市场变得更加有效,因子挖掘变得更加困难,自动提取和排除有效特征是未来量化投资的一个很有前景的方向。 7. 参考文献 [1] 基于遗传规划的选股因子挖掘——华泰人工智能系列之二十一 [2] 再探基于遗传规划的选股因子挖掘——华泰人工智能系列之二十三 [3] Quant工具箱:基于因子挖掘的策略研发 [4] 交易型量价因子挖掘与有效性研究 [5] AlphaEvolve: A Learning Framework to Discover Novel Alphas in Quantitative Investment (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |