调研论文中,看到datafun的一篇agent文章"智能不够,知识来凑"------知识驱动的金融决策智能体,里面提到了自动因子挖掘,感觉可以用来做机器学习的"特征工程"。
第一部分介绍如何"构造特征",第二部分介绍如何"分析特征重要度"。第二部分,有一些经济学中的内容,可以忽略。
1.构造特征
1.1自动因子挖掘领域概述
自动因子挖掘,也常被称为"AI因子挖掘"或"算法化Alpha发现",是指利用机器学习、特别是遗传规划(Genetic Programming)和深度学习等算法,来自动地、系统性地在海量数据中搜索、发现能够预测金融资产未来收益的有效信号(即"因子"或"Alpha")的过程。
这与传统的因子研究方法形成了鲜明对比:
- 传统方法 :由量化研究员基于金融理论、市场经验或直觉,提出一个经济学假设(例如:"低市盈率的公司长期来看会跑赢大盘"),然后手动地将这个假设编写成数学公式(如
rank(1 / PE_ratio)
),最后进行严格的回测验证。这个过程高度依赖研究员的智慧和经验。 - 自动方法:由算法程序充当研究员的角色。程序在一个巨大的"搜索空间"中,通过类似"进化"或"学习"的方式,自动地组合基础数据和数学算子,生成成千上万个候选因子表达式,并通过适应度函数(如夏普比率、信息系数IC)进行筛选,最终找到新颖且有效的因子。
核心目标:在经典因子(如价值、动量、规模)日益拥挤、Alpha收益衰减的背景下,寻找新的、低相关性的、能带来超额收益的Alpha来源。
1.2核心技术与方法
自动因子挖掘主要依赖以下几种核心技术:
-
遗传规划 (Genetic Programming, GP)
这是最经典、最主流的自动因子挖掘技术。它模拟生物进化论中的"优胜劣汰,适者生存"原则来"进化"出优秀的因子表达式。
- 基本元素 :
- 终端集 (Terminal Set) :因子的"原材料",即各种基础数据,如
开盘价(open)
、收盘价(close)
、成交量(volume)
、市盈率(pe_ratio)
等。 - 函数集 (Function Set) :用于组合原材料的"工具",即各种数学算子,如
+
,-
,*
,/
,log()
,rank()
(横截面排序),ts_corr()
(时间序列相关性),delay()
(过去N期的数据) 等。
- 终端集 (Terminal Set) :因子的"原材料",即各种基础数据,如
- 进化过程 :
- 初始化:随机生成一大批(比如1000个)由基本元素组成的初始因子表达式"种群"。
- 适应度评估:对每一个因子进行历史数据回测,计算其"适应度分数"(例如,信息系数IC的均值、夏普比率等)。分数越高,代表因子越优秀。
- 选择:根据适应度分数,以"优胜劣汰"的原则选择优秀的因子进入"下一代"。
- 交叉与变异 :模仿生物进化,对被选中的因子进行:
- 交叉 (Crossover):将两个"父代"因子的表达式树的一部分进行交换,生成新的"子代"因子。
- 变异 (Mutation) :随机改变一个因子表达式树的某个节点(比如把
+
换成-
,或把close
换成vwap
)。
- 循环:重复步骤2-4,经过成百上千代的"进化"后,最终存活下来的就是表现最好的因子。
- 基本元素 :
-
深度学习 (Deep Learning)
这是一种较新的方法,尤其以AlphaNet为代表。它不直接生成人类可读的因子表达式。
- 工作原理:构建一个深度神经网络(如LSTM、CNN或Transformer),将大量的市场数据(价格、成交量、技术指标等)作为输入,将未来的收益作为输出标签进行训练。
- "因子"是什么:模型学习到的复杂非线性关系本身就是"因子"。这个因子是隐藏在网络权重中的一个"黑箱",解释性较差,但可能捕捉到比GP更复杂的模式。
1.3自动因子挖掘的示例
为了更具体地理解这个过程,我们来看一个完整的示例。
1. 准备"原材料"(终端集)
数据类别 | 示例数据(Terminal) | 说明 |
---|---|---|
价格/量价 | open , close , high , low , vwap , volume , returns |
每日的开、高、低、收、成交均价、成交量、回报率 |
技术指标 | sma(close, 10) , rsi(14) |
10日移动平均线,14日相对强弱指数 |
基本面数据 | pe_ratio , pb_ratio , market_cap |
市盈率、市净率、总市值 |
另类数据 | sentiment_score , satellite_image_data |
新闻情绪分、卫星图像数据(如停车场车辆数) |
2. 准备"工具箱"(函数集)
算子类别 | 示例算子(Function) | 说明 |
---|---|---|
算术运算 | +, -, *, / |
基本四则运算 |
数学函数 | log() , abs() , sign() |
对数、绝对值、符号函数 |
横截面运算 | rank(x) , scale(x) |
rank(x) 返回x在所有股票中的百分位排名;scale(x) 将x标准化 |
时间序列运算 | delay(x, n) , delta(x, n) , ts_corr(x, y, n) |
delay(x, n) 取n天前的x值;delta(x, n) 计算x的n日变化;ts_corr 计算x和y在过去n日的相关性 |
逻辑运算 | if(cond, a, b) |
如果条件cond成立,返回a,否则返回b |
3. 算法"烹饪"出的因子表达式
遗传规划算法可能会生成以下几种不同复杂度的因子:
-
简单且可解释的因子 (Simple & Interpretable)
- 表达式 :
rank(close / delay(close, 10))
- 解读 : 这实际上就是一个经典的10日动量(Momentum)因子。它计算了过去10天的收盘价变化率,并在所有股票中进行排名。排名高的股票代表近期涨势更强。
- 表达式 :
-
中等复杂度的因子 (Moderately Complex)
- 表达式 :
ts_corr(rank(volume), rank(high - low), 5)
- 解读 : 这个因子试图捕捉一种量价关系的模式。它计算的是"过去5天里,一只股票的成交量排名与其当日振幅(最高价-最低价)排名之间的相关性"。一个正值可能意味着"放量上涨/下跌"的股票动能更强。这种组合是人类研究员不太容易直接想到的。
- 表达式 :
-
高度复杂、类似机器生成的因子 (Complex & Machine-like)
- 表达式 :
-1 * rank(delta(log(vwap), 2)) * (ts_corr(rank(close), rank(sma(volume, 60)), 10))
- 解读 : 这个表达式非常复杂,可解释性很差,但它可能是有效的。
- 第一部分
delta(log(vwap), 2)
衡量了加权平均价在过去2天的对数变化(近似于加速度)。 - 第二部分
ts_corr(...)
衡量了收盘价排名和60日平均成交量排名在过去10天的相关性。 - 整个因子将这两个看似无关的部分相乘,并取负排名。它可能发现了一个非常细微的市场异象(anomaly),即"股价加速下跌,且近期价量相关性高的股票,未来可能会反弹"。
- 第一部分
- 表达式 :
1.4知名平台与工具
- WorldQuant (Brave new anpha platform) :全球最知名的量化对冲基金之一,其成功很大程度上就建立在自动因子挖掘之上。它通过其在线平台 WebSim 和内部的 Global Factor Weaver (GFW) 系统,让全球数万名"研究顾问"提交他们发现的Alpha因子(很多就是利用类似GP的思路),形成了一个巨大的因子工厂。
- Qraft Technologies:一家韩国的金融科技公司,专注于使用AI和深度学习技术来自动发现因子,并基于此发行主动型ETF基金。
- 开源工具 :
- Qlib (by Microsoft):一个面向AI的量化投资综合平台,提供了数据处理、模型训练和回测的全套框架,可以用于因子挖掘。
- AlphaNet: 一个专门用于深度学习因子挖掘的开源框架。
- gplearn: Python中的一个通用遗传规划库,可以被量化研究员定制用于金融因子的挖掘。
2.筛选特征
筛选流程:一个多层次的"漏斗"
一个"好"的因子,通常需要具备有效性、稳健性、独立性、可交易性 和可解释性。筛选过程就是围绕这些特性展开的。
2.1 第一层:初步有效性检验 (Is it Predictive at All?)
这是漏斗最宽的一层,目的是快速剔除大量明显无效的因子。核心指标是信息系数(Information Coefficient, IC)。
- 什么是IC?
IC衡量的是因子值与资产未来收益率之间的相关性。简单来说,就是**"这个因子到底有没有预测能力?"**- 计算方式:通常计算当期因子值与下一期股票收益率的Spearman秩相关系数(Rank IC),因为它对异常值不敏感。
- IC值 (IC Mean) :IC时间序列的均值。一个好的因子,其IC均值应显著大于0(正向预测)或小于0(反向预测)。通常,
|IC Mean| > 0.02
是一个最基础的门槛。 - ICIR (Information Ratio, 信息比率) :
ICIR = IC均值 / IC标准差
。这是对IC进行风险调整后的指标,衡量了因子预测能力的稳定性和强度。它是筛选中最核心的指标之一。通常,ICIR > 0.5
被认为是一个比较好的水平。 - IC标准差 (IC Std. Dev.):衡量IC值的波动性。标准差越小,说明因子的预测能力越稳定。
在这一层,我们会剔除所有|IC Mean|
过低或ICIR
不达标的因子。
2.2 第二层:统计显著性与稳健性分析 (Is the Predictiveness Real and Robust?)
通过了第一层的因子只是"看起来有效",但这种有效性可能是由随机运气造成的。这一层要检验其统计上的意义和在不同情况下的表现。
-
IC的t检验 (t-test of IC Series)
- 目的:检验IC均值是否在统计上显著不为零。
- 方法 :对IC的时间序列数据进行t检验,计算其t值和p值。通常要求**
|t-value| > 2
** 或p-value < 0.05
。
-
分层回测 (Quantile Backtesting)
- 目的:这是最直观的检验方法,观察因子是否具有良好的单调性。
- 方法 :
- 在每个调仓周期,根据因子值对所有股票进行排序。
- 将股票等分为5组或10组(Quantiles)。
- 分别计算每组股票在下一期的平均收益率。
- 观察从第一组(因子值最高)到最后一组(因子值最低)的收益率是否呈现单调递减(或递增)的趋势。
- 好的表现:收益率曲线平滑单调,如下图所示。这说明因子值越高,未来收益确实越好(或越差)。
-
多空组合净值曲线 (Long-Short Portfolio Curve)
- 方法:构建一个"做多"因子值最高的组合,同时"做空"因子值最低的组合。
- 好的表现:这个多空组合的累计净值曲线应该长期、稳定地向上增长,回撤要小。
在这一层,我们会剔除t值不显著、分层回测没有单调性、或者多空组合表现不佳的因子。
2.3 第三层:独立性分析 (Is it a New Source of Alpha?)
一个因子即使有效且稳健,但如果它和我们已有的因子高度相关,那么它的附加价值就很小。我们希望找到的是新颖的、低相关性的Alpha来源。
-
与常见风格因子(Style Factors)的相关性
- 目的:确保新因子不是某个已知风格(如规模、价值、动量)的简单代理。
- 方法:计算新因子与Fama-French三因子、五因子模型中的**市值因子(SMB)、账面市值比因子(HML)、动量因子(MOM)**等的相关性。
-
与行业因子(Industry Factors)的相关性
- 目的:确保因子的有效性不是来源于它在某个特定行业的暴露。
- 方法:将因子在行业虚拟变量上做回归,看其残差(即剔除行业影响后)是否依然有效。
-
与自有Alpha因子库的相关性
- 目的:这是最重要的一步。确保新因子与你策略中已经使用的其他Alpha因子低相关。
- 方法 :计算新因子与因子库中所有因子的相关系数矩阵。通常要求**
|相关系数| < 0.3
**。
在这一层,我们会剔除与已知因子高度相关的因子,以保证因子库的多样性。
2.4 第四层:可交易性分析 (Can it be Profitably Traded?)
理论上有效的因子,在现实交易中可能因为成本过高而无法盈利。
- 因子换手率 (Factor Turnover)
- 目的:衡量因子的稳定性,以及它所导致的交易成本。
- 方法:计算在相邻两个调仓周期之间,多空组合中股票成分的变化比例。
- 考量:换手率越高,意味着交易越频繁,交易成本(佣金、冲击成本、滑点)就越高。一个ICIR为0.7但换手率极高的因子,实际表现可能不如一个ICIR为0.5但换手率很低的因子。
在这一层,我们会对因子进行"成本调整后"的评估,倾向于选择换手率更低的因子。
2.5 第五层:综合评估与经济学意义解释 (Final Verdict)
这是漏斗的最后一层,带有一定的主观判断。
-
因子评分卡 (Factor Scorecard)
- 将通过以上所有考验的因子,按照ICIR、t值、换手率、最大相关性等多个维度进行打分,形成一个综合排名。
-
寻找经济学/行为金融学解释 (Economic Intuition)
- 对于最终胜出的顶级因子,尝试去理解它为什么会有效。它捕捉了市场的何种无效性?是某种投资者行为偏差(如处置效应、注意力有限)?还是某种风险溢价?
- 一个拥有合理解释的因子,我们更有信心它能在未来持续有效,而不是一个由数据挖掘产生的、可能很快失效的统计假象。
总结
筛选"好的"因子是一个严谨的科学流程,而非单一维度的比较。一个最终被纳入实盘策略的因子,应该是在预测能力、稳定性、独立性和交易可行性等多个维度上都表现优异的"全能选手"。
筛选层次 | 核心问题 | 关键指标/方法 |
---|---|---|
第一层 | 有预测能力吗? | IC均值, ICIR |
第二层 | 预测能力是真实的、稳健的吗? | IC的t检验, 分层回测, 多空组合净值 |
第三层 | 这是新的Alpha来源吗? | 与风格/行业/已有Alpha因子的相关性分析 |
第四层 | 交易成本高吗?能盈利吗? | 因子换手率 (Turnover) |
第五层 | 综合来看表现如何?能理解吗? | 综合评分卡, 经济学解释, 压力测试 |