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