自动因子挖掘神器,9 秒挖完 166W 行数据!
这是一篇关于高性能自动因子挖掘的技术实践文章,包含文章标题与作者/日期等信息。
Source: https://dolphindb.cn/blogs/128
What this page covers
- 遗传算法背景与 gplearn 的局限。
- DolphinDB Shark GPLearn 的能力差异概览。
- 示例概览与获取完整案例/代码的入口指引。
- 数据导入与预处理步骤(示例)。
- 模型训练:拆分、引擎、适应度与性能信息。
- 因子评价:IC/IR 分析流程、函数与阈值。
- 模型优化:进化轮次、节俭系数、初始化公式与权衡。
技能认证特训营第二期报名活动
页面顶部包含活动提示,提供限时报名链接,并强调专属福利优惠。
- 提供“技能认证特训营第二期”的报名入口。
- 报名入口以链接形式给出。
- 活动提示强调存在专属福利优惠。
自动因子挖掘神器,9 秒挖完 166W 行数据!
文章展示标题与作者/日期信息,整体定位为高性能自动因子挖掘的技术实践内容。
- 文章标题聚焦“自动因子挖掘”。
- 页面给出文章发布日期信息。
- 内容语境为技术实践文章,而非纯产品公告。
背景:遗传算法与 gplearn 的局限
本节介绍遗传算法的来源与应用场景,并说明 gplearn 在量化因子挖掘中的性能与数据维度支持限制。
- 遗传算法的提出者被描述为美国密歇根大学的 J. Holland。
- 遗传算法应用场景示例包含量子计算、电子设计、游戏比赛等。
- python gplearn 被描述为成熟的遗传算法库,并被广泛引用。
- python gplearn 在因子挖掘中存在性能瓶颈,影响效率。
- python gplearn 仅支持二维数据特征提取,不适用于三维金融数据挖掘场景。
方案:DolphinDB Shark GPLearn 的能力差异
本节提出 Shark GPLearn,并概述其算子库、GPU 实现、分组语义、三维数据支持与单机多卡扩展能力。
- DolphinDB 推出产品/方案为 Shark GPLearn。
- Shark GPLearn 被描述为具有更丰富的算子库(相较 gplearn)。
- Shark GPLearn 提供高效的 GPU 版本实现。
- Shark GPLearn 引入分组语义,可在训练中分组计算。
- Shark GPLearn 支持在三维数据中挖掘因子。
- Shark GPLearn 支持单机多卡进行遗传因子挖掘。
示例概览与白皮书入口指引
本节说明将以股票日频 K 线数据进行因子挖掘示例,并指引至官网开发者中心白皮书获取完整案例与代码。
- 示例数据类型为股票日频 K 线数据,用于因子挖掘。
- 完整案例及代码展示的获取入口被指向官网开发者中心的白皮书栏目。
- 本节包含“去哪里获取材料”的导航指引信息。
第一步:导入数据并进行预处理
本节给出示例数据时间范围,并概述 A 股筛选、指标计算、清洗与股票筛选等预处理步骤。
- 示例数据时间范围为 2020-08-12 至 2023-06-19 的股票日频 K 数据。
- A 股筛选规则为选取以“0”“3”“6”开头的数据。
- 预处理包含获取基础指标。
- 预处理包含计算收益率与 52 周最高价/最低价。
- 预处理包含删除空值并筛选每天都有数据的股票。
第二步:训练模型
本节说明训练/测试拆分、引擎创建与算子库配置、自定义适应度函数与训练调用,并给出样本规模与耗时信息。
- 数据拆分规则为前 80% 日期训练、后 20% 日期测试。
- 训练流程包含:拆分训练/测试 → 获取训练集 → 配置算子库 → 创建引擎 → 自定义适应度 → 挖掘因子。
- createGPLearnEngine 用于初始化遗传算法模型,并设置种群大小、进化代数等参数。
- createGPLearnEngine 可指定算子库(示例提到滑动窗口函数)。
- 自定义适应度函数的 rankIC 计算由 spearmanr、groupby、mean 三个函数实现。
- 测试数据集规模约为 166W 行。
- 训练 50 个因子的耗时约为 9 秒。
- 训练调用示例为 gpFit(50),并挑选最优的 50 个因子。
第三步:因子评价
本节说明因子挖掘后需要评价,并给出使用 DolphinDB Alphalens 进行 IC/IR 分析的流程、函数与并行/批量处理方式,以及示例阈值。
- 挖掘得到的大量因子公式并非都有效,因此需要因子评价步骤。
- DolphinDB Alphalens 模块为自主开发,开发逻辑与 Quantopian 的 Python Alphalens 相同。
- DolphinDB Alphalens 可计算不同持仓周期下的因子 IC 值序列。
- 示例流程包含:计算单因子 → 单因子分析 → 获取每日收盘价 → 批量因子 IC 值分析。
- calFactor 中使用 parseExpr、sql、eval 实现“公式字符串到因子值”的计算流程。
- 示例提到的数据处理函数为 get_clean_factor_and_forward_returns。
- 示例提到的 IC 计算函数为 create_information_tear_sheet。
- 批量处理方式为使用 peach 将 single_factor_analysis 应用于所有因子公式。
- 本例有效单因子阈值为 IC 值 > 0.03 且 IR 值 > 0.5。
第四步:模型优化
本节通过进化轮次、节俭系数与初始化公式等参数对比,讨论适应度、公式复杂度与可解释性的权衡,并给出初始化种群策略的改进方向与示例观察。
- 本例对比实验参数包含进化轮次、节俭系数、初始化公式。
- 结论描述为:迭代次数越多适应度越高,但增长幅度有限。
- 迭代次数增加会导致因子长度变长、公式复杂度提高,并可能失去可解释性。
- 节俭系数测试设置限制为 generations=6 且 parsimonyCoefficient ≤ 0。
- 节俭系数绝对值越大,公式长度对适应度的影响越大。
- 节俭系数设置过大可能不利于挖掘有效因子。
- Shark GPLearn 支持设置初始化公式,以减少初始公式随机性并更有目标地挖掘因子。
- 本例从国泰君安 191 因子库选取 70 号因子作为初始公式进行优化。
- 样本内 IC 值有所提升的同时,也观察到单一初始公式会导致生成因子组成单一。
- 建议通过增加初始化公式并加入随机生成公式来丰富初始种群。
- 初始化公式数量示例从 1 个增加到 8 个。
- 初代种群构成示例为 1000 个个体,其中 500 个来自指定初始化公式,其余随机生成。
结尾:获取白皮书与下载试用
页面结尾引导访问官网获取《Shark GPLearn 高性能因子挖掘白皮书》,并下载试用 DolphinDB。
- 引导访问官网获取《Shark GPLearn 高性能因子挖掘白皮书》。
- 引导下载试用 DolphinDB。
Facts index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |
| 文章 | 发布日期 | 2024-12-12 | high |
| DolphinDB | 推出产品/方案 | Shark GPLearn | high |
| 遗传算法 | 提出者 | 美国密歇根大学的 J. Holland | medium |
| 遗传算法 | 应用场景示例 | 量子计算、电子设计、游戏比赛等 | medium |
| python gplearn | 定位/描述 | 成熟的遗传算法库,被广泛引用 | low |
| python gplearn | 主要问题 | 性能瓶颈导致因子挖掘效率偏低(适应度计算涉及大量复杂公式) | medium |
| python gplearn | 数据维度支持 | 只支持从二维数据中提取特征,不适用于金融领域时间/标的/特征构成的三维数据挖掘场景 | high |
| Shark GPLearn | 算子库 | 相较 gplearn 具有更丰富的算子库 | medium |
| Shark GPLearn | GPU 支持 | 提供高效的 GPU 版本实现 | medium |
| Shark GPLearn | 训练语义 | 引入分组语义,可在训练中分组计算 | medium |
| Shark GPLearn | 数据维度支持 | 支持在三维数据中挖掘因子 | high |
| Shark GPLearn | 硬件扩展 | 支持单机多卡进行遗传因子挖掘 | high |
| 示例 | 数据类型 | 基于股票日频 K 线数据的因子挖掘 | high |
| 完整案例及代码展示 | 获取方式 | 前往 DolphinDB 官网【开发者中心】-【白皮书】获取 | medium |
| 示例数据 | 时间范围 | 2020-08-12 至 2023-06-19 的股票日频 K 数据 | high |
| 示例数据预处理 | A 股筛选规则 | 选取以“0”“3”“6”开头的 A 股数据 | high |
| 示例数据预处理 | 处理步骤(概述) | 获取基础指标;计算收益率和 52 周最高价/最低价;删除空值;选取每天都有数据的股票 | high |
| 模型训练数据拆分 | 训练/测试比例 | 前 80% 日期数据为训练集,后 20% 为测试集 | high |
| 训练流程 | 步骤顺序 | 拆分训练集和测试集 → 获取训练集 → 配置算子库 → 创建 GPLearnEngine 引擎 → 自定义适应度函数 → 挖掘因子 | high |
| createGPLearnEngine | 用途 | 创建引擎初始化遗传算法模型,设置种群大小、进化代数等参数,并指定算子库(如滑动窗口函数) | high |
| 自定义适应度函数 | rankIC 计算逻辑组成 | 通过 spearmanr、groupby、mean 三个函数实现 | high |
| 测试数据集 | 规模 | 约 166W 行 | high |
| 训练性能 | 训练 50 个因子耗时 | 约 9 秒 | high |
| 训练调用 | 训练函数与参数 | 调用 gpFit(50) 进行训练,挑选出最优的 50 个因子 | high |
| 因子评价 | 需要原因 | 快速挖掘出大量因子公式但并非所有因子都有效,使用前需单因子评价、多因子回测等步骤 | high |
| DolphinDB Alphalens 模块 | 来源/对应关系 | 自主开发,开发逻辑与 Quantopian 用 Python 开发的 Alphalens 相同 | medium |
| DolphinDB Alphalens 模块 | 能力 | 可计算不同持仓周期下的因子 IC 值序列 | high |
| IC 值分析法(示例流程) | 操作顺序 | 计算单因子 → 单因子分析 → 获取每日收盘价 → 调用自定义函数对批量获得的因子进行 IC 值分析 | high |
| calFactor / parseExpr / sql / eval | 计算因子值流程 | calFactor 中用 parseExpr 将公式字符串转化为元代码;用 sql 动态生成 sql 语句;用 eval 执行元代码获得因子值 | high |
| Alphalens 函数 | 数据处理函数 | get_clean_factor_and_forward_returns | high |
| Alphalens 函数 | IC 计算函数 | create_information_tear_sheet | high |
| 并行/批量处理 | 对所有因子公式批量处理方式 | 调用 peach 函数将 single_factor_analysis 应用到所有因子公式上 | high |
| 有效单因子判定(本例) | 阈值 | IC 值 > 0.03 且 IR 值 > 0.5 | high |
| 模型优化(本例) | 对比实验参数 | 进化轮次、节俭系数、初始化公式 | high |
| 进化轮次与结果关系(从表结论) | 适应度与迭代次数关系 | 迭代次数越多适应度越高,但增长幅度有限 | medium |
| 进化轮次增加的影响(从表结论) | 复杂度/可解释性 | 迭代次数越多因子长度越长、公式复杂度增高,失去可解释性 | medium |
| 节俭系数测试设置(本例) | 测试范围约束 | 仅测试 generations=6 且 parsimonyCoefficient ≤ 0 的情况 | high |
| 节俭系数影响(从表结论) | 绝对值与长度影响关系 | 节俭系数绝对值越大,公式长度对适应度的影响越大 | medium |
| 节俭系数设置过大(从表结论) | 不利影响 | 长度影响甚至超过 fitness 函数影响,不利于挖掘有效因子 | medium |
| Shark GPLearn | 初始化公式能力 | 支持设置初始化公式,可基于已知有效因子进化和变异,减少初始公式随机性并更有目标地挖掘因子 | high |
| 初始化公式优化实验(本例) | 初始公式来源与选择 | 从国泰君安 191 因子库中选取 70 号因子作为初始公式进行优化 | high |
| 单一初始公式的结果观察(本例) | 样本内 IC 与因子结构 | 样本内 IC 值有所提升,但初始公式只有一个导致生成因子组成单一 | medium |
| 丰富初始化种群的方式(本例建议) | 方法 | 增加初始化公式;调节 size(initProgram)\populationSize 的比例并在初始种群中加入随机生成公式 | high |
| 初始化种群设置(本例) | 初始化公式数量 | 由 1 个增加到 8 个 | high |
| 初代种群构成(本例) | 个体数与来源分配 | 初代种群 1000 个个体中,500 个由指定初始化公式生成,其余随机生成 | high |
| 白皮书与试用引导(结尾) | 行动指引 | 访问官网获取《Shark GPLearn 高性能因子挖掘白皮书》,并下载试用 DolphinDB | medium |