【特征工程】机器学习的特征构造和筛选

调研论文中,看到datafun的一篇agent文章"智能不够,知识来凑"------知识驱动的金融决策智能体,里面提到了自动因子挖掘,感觉可以用来做机器学习的"特征工程"。

第一部分介绍如何"构造特征",第二部分介绍如何"分析特征重要度"。第二部分,有一些经济学中的内容,可以忽略。

1.构造特征

1.1自动因子挖掘领域概述

自动因子挖掘,也常被称为"AI因子挖掘"或"算法化Alpha发现",是指利用机器学习、特别是遗传规划(Genetic Programming)和深度学习等算法,来自动地、系统性地在海量数据中搜索、发现能够预测金融资产未来收益的有效信号(即"因子"或"Alpha")的过程。

这与传统的因子研究方法形成了鲜明对比:

  • 传统方法 :由量化研究员基于金融理论、市场经验或直觉,提出一个经济学假设(例如:"低市盈率的公司长期来看会跑赢大盘"),然后手动地将这个假设编写成数学公式(如 rank(1 / PE_ratio)),最后进行严格的回测验证。这个过程高度依赖研究员的智慧和经验。
  • 自动方法:由算法程序充当研究员的角色。程序在一个巨大的"搜索空间"中,通过类似"进化"或"学习"的方式,自动地组合基础数据和数学算子,生成成千上万个候选因子表达式,并通过适应度函数(如夏普比率、信息系数IC)进行筛选,最终找到新颖且有效的因子。

核心目标:在经典因子(如价值、动量、规模)日益拥挤、Alpha收益衰减的背景下,寻找新的、低相关性的、能带来超额收益的Alpha来源。

1.2核心技术与方法

自动因子挖掘主要依赖以下几种核心技术:

  1. 遗传规划 (Genetic Programming, GP)

    这是最经典、最主流的自动因子挖掘技术。它模拟生物进化论中的"优胜劣汰,适者生存"原则来"进化"出优秀的因子表达式。

    • 基本元素
      • 终端集 (Terminal Set) :因子的"原材料",即各种基础数据,如 开盘价(open)收盘价(close)成交量(volume)市盈率(pe_ratio) 等。
      • 函数集 (Function Set) :用于组合原材料的"工具",即各种数学算子,如 +, -, *, /, log(), rank() (横截面排序), ts_corr() (时间序列相关性), delay() (过去N期的数据) 等。
    • 进化过程
      1. 初始化:随机生成一大批(比如1000个)由基本元素组成的初始因子表达式"种群"。
      2. 适应度评估:对每一个因子进行历史数据回测,计算其"适应度分数"(例如,信息系数IC的均值、夏普比率等)。分数越高,代表因子越优秀。
      3. 选择:根据适应度分数,以"优胜劣汰"的原则选择优秀的因子进入"下一代"。
      4. 交叉与变异 :模仿生物进化,对被选中的因子进行:
        • 交叉 (Crossover):将两个"父代"因子的表达式树的一部分进行交换,生成新的"子代"因子。
        • 变异 (Mutation) :随机改变一个因子表达式树的某个节点(比如把 + 换成 -,或把 close 换成 vwap)。
      5. 循环:重复步骤2-4,经过成百上千代的"进化"后,最终存活下来的就是表现最好的因子。
  2. 深度学习 (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?)

通过了第一层的因子只是"看起来有效",但这种有效性可能是由随机运气造成的。这一层要检验其统计上的意义和在不同情况下的表现。

  1. IC的t检验 (t-test of IC Series)

    • 目的:检验IC均值是否在统计上显著不为零。
    • 方法 :对IC的时间序列数据进行t检验,计算其t值和p值。通常要求**|t-value| > 2** 或 p-value < 0.05
  2. 分层回测 (Quantile Backtesting)

    • 目的:这是最直观的检验方法,观察因子是否具有良好的单调性。
    • 方法
      1. 在每个调仓周期,根据因子值对所有股票进行排序。
      2. 将股票等分为5组或10组(Quantiles)。
      3. 分别计算每组股票在下一期的平均收益率。
      4. 观察从第一组(因子值最高)到最后一组(因子值最低)的收益率是否呈现单调递减(或递增)的趋势。
    • 好的表现:收益率曲线平滑单调,如下图所示。这说明因子值越高,未来收益确实越好(或越差)。
  3. 多空组合净值曲线 (Long-Short Portfolio Curve)

    • 方法:构建一个"做多"因子值最高的组合,同时"做空"因子值最低的组合。
    • 好的表现:这个多空组合的累计净值曲线应该长期、稳定地向上增长,回撤要小。

在这一层,我们会剔除t值不显著、分层回测没有单调性、或者多空组合表现不佳的因子。


2.3 第三层:独立性分析 (Is it a New Source of Alpha?)

一个因子即使有效且稳健,但如果它和我们已有的因子高度相关,那么它的附加价值就很小。我们希望找到的是新颖的、低相关性的Alpha来源。

  1. 与常见风格因子(Style Factors)的相关性

    • 目的:确保新因子不是某个已知风格(如规模、价值、动量)的简单代理。
    • 方法:计算新因子与Fama-French三因子、五因子模型中的**市值因子(SMB)、账面市值比因子(HML)、动量因子(MOM)**等的相关性。
  2. 与行业因子(Industry Factors)的相关性

    • 目的:确保因子的有效性不是来源于它在某个特定行业的暴露。
    • 方法:将因子在行业虚拟变量上做回归,看其残差(即剔除行业影响后)是否依然有效。
  3. 与自有Alpha因子库的相关性

    • 目的:这是最重要的一步。确保新因子与你策略中已经使用的其他Alpha因子低相关。
    • 方法 :计算新因子与因子库中所有因子的相关系数矩阵。通常要求**|相关系数| < 0.3**。

在这一层,我们会剔除与已知因子高度相关的因子,以保证因子库的多样性。


2.4 第四层:可交易性分析 (Can it be Profitably Traded?)

理论上有效的因子,在现实交易中可能因为成本过高而无法盈利。

  1. 因子换手率 (Factor Turnover)
    • 目的:衡量因子的稳定性,以及它所导致的交易成本。
    • 方法:计算在相邻两个调仓周期之间,多空组合中股票成分的变化比例。
    • 考量:换手率越高,意味着交易越频繁,交易成本(佣金、冲击成本、滑点)就越高。一个ICIR为0.7但换手率极高的因子,实际表现可能不如一个ICIR为0.5但换手率很低的因子。

在这一层,我们会对因子进行"成本调整后"的评估,倾向于选择换手率更低的因子。


2.5 第五层:综合评估与经济学意义解释 (Final Verdict)

这是漏斗的最后一层,带有一定的主观判断。

  1. 因子评分卡 (Factor Scorecard)

    • 将通过以上所有考验的因子,按照ICIR、t值、换手率、最大相关性等多个维度进行打分,形成一个综合排名。
  2. 寻找经济学/行为金融学解释 (Economic Intuition)

    • 对于最终胜出的顶级因子,尝试去理解它为什么会有效。它捕捉了市场的何种无效性?是某种投资者行为偏差(如处置效应、注意力有限)?还是某种风险溢价?
    • 一个拥有合理解释的因子,我们更有信心它能在未来持续有效,而不是一个由数据挖掘产生的、可能很快失效的统计假象。

总结

筛选"好的"因子是一个严谨的科学流程,而非单一维度的比较。一个最终被纳入实盘策略的因子,应该是在预测能力、稳定性、独立性和交易可行性等多个维度上都表现优异的"全能选手"。

筛选层次 核心问题 关键指标/方法
第一层 有预测能力吗? IC均值, ICIR
第二层 预测能力是真实的、稳健的吗? IC的t检验, 分层回测, 多空组合净值
第三层 这是新的Alpha来源吗? 与风格/行业/已有Alpha因子的相关性分析
第四层 交易成本高吗?能盈利吗? 因子换手率 (Turnover)
第五层 综合来看表现如何?能理解吗? 综合评分卡, 经济学解释, 压力测试