作者: 窥市寻真
因子挖掘完整框架:从数据到Alpha的工程化方法论
量化因子工程全景 · 深度拆解
昨天去券商谈业务,还和大佬聊到因子。这不,就有了这一篇。
虽说有了Ai的加持,很多人可以获取很多之前未曾接触过的知识。但是还有很多东西,得亲身经历感受,它们才可能成为智慧。
之前群里也有人问量化这六年,关于因子认知变化是什么。
我会说:因子挖掘不是找规律,而是一套工程体系!因为规律遍地都是,找规律的叫数据分析师!因子挖掘是把规律编码成信号,把信号嵌入风险预算,把风险预算映射到仓位。So,它是一套工程体系,不是一个统计问题。
市面上讲因子挖掘的文章不少,但大多停留在"IC要大于0.02"、“分层回测要单调"这种检查清单层面。
真正做过的人知道,因子挖掘真正的难点从来不在单因子检验上,那个门槛太低了,随便一个统计学本科生都能跑出漂亮的IC。真正的难点在工程化:怎么不让因子库变成一锅粥?怎么判断一个新因子不是旧因子的线性组合?怎么在因子衰减之前就闻到味道?怎么让多个研究员协同挖因子而不是互相踩脚?
这篇文章,我把自己六年积累的因子挖掘工程体系完整拆开写出来。从因子的哲学定义到数据管道到表达式引擎到检验框架到正交化到衰减监控,每一个环节都配有实际跑通的案例。抛砖引玉用,我觉得是足够了的。
全文约一万五千字,文章内容比较齐全,阅读需要大半个小时。
如果你想用这篇文章当团队的因子工程SOP模板,尽管拿去。这行里藏着掖着的人太多了,反正我既然写出来了,也就无所谓咯,有需要讨论的,也可以找我讨论。
第一章:因子挖掘的哲学地基
先问一个看似幼稚的问题:什么是因子?
专业点的解释:因子是解释资产收益横截面差异的系统性变量。这个定义没错,但这只是一个统计学视角的定义。从工程视角看,因子有三个更深层的特征,理解这三点,你就能区分"挖因子的"和"搞统计的”。
因子的三重工程定义:
第一,因子是信息压缩:把高维原始数据压缩成一维信号,压缩质量决定因子质量。
第二,因子是预测器而非解释器。好的因子不需要经济学含义优美,它只需要样本外预测稳定。
第三,因子是风险预算的载体,每个因子分配的风险预算,比因子本身的IC更重要。
很多新人一上来就问"怎么挖出IC大于0.05的因子",这个提问本身就是错的。IC是因子质量的必要不充分条件。高IC因子如果跟你库里已有因子高度共线,加进来只会恶化组合的风险结构。我见过太多人拿着IC 0.08的新因子兴奋地跑来,结果一跑共线性检测,全是冗余。
因子挖掘真正回答的是三个问题:能不能从数据里提炼出别人没看到的信号?这个信号跟库里已有信号是什么关系?这个信号分配到多少风险预算?如果你脑子里只有第一个问题,你挖出来的东西大概率是一堆高IC的冗余品。
第二章:因子分类学,一个不会乱的标签体系
团队做到第三年的时候,我们经历了一次"因子大爆炸"。三个研究员同时在不经沟通的情况下各挖了一批因子,因子库从200个膨胀到600个。然后出事了,回测跑不动了。不是因为算力不够,是因为因子之间的依赖关系已经完全理不清。一个因子改了定义,它下游的复合因子全崩。
那次之后我下定决心设计了一套因子分类标签体系。不是教科书式的"基本面因子/技术面因子"这种粗分类,而是一个多维标签矩阵,每个因子入库时必须打上至少六个维度的标签。
因子六维标签体系:
维度一:数据源类型(行情切片/分钟线/日频财务/另类文本/卫星图像/供应链/舆情/资金流向/期权隐含)
维度二:信号频率(Tick/分钟/日频/周频/月频/季频)
维度三:因子家族(动量/反转/波动率/价值/质量/成长/情绪/流动性/拥挤度/非线性组合)
维度四:变换方式(原始/截面标准化/时序标准化/正交化/行业中性化/市值中性化/非线性变换)
维度五:预测目标(次日收益/周度收益/月度收益/波动率/偏度/尾部风险)
维度六:成熟度(实验阶段/样本外验证中/实盘观察中/已纳入组合/已退役)
六个维度,每个维度3到10个可选值,理论上可以区分上万种因子类型。有了这套标签体系,因子的检索、比对、去重才有了工程基础。
这里重点讲两个在实际工作中最有区分度的维度。
2.1 因子家族:一个避免重复造轮子的分类
十大家族是我推行了三年的分类标准。每个新因子入库时,必须归入至少一个家族,且必须说明它与家族内已有因子的差异化贡献。
动量家族:所有基于"过去N期表现好,未来也表现好"逻辑的因子。包括传统价格动量、行业动量、盈利动量、分析师预期修正动量。这个家族最大的坑是同质化,90%的动量因子互相之间的IC相关性超过0.6。我们团队有一条硬规则:新动量因子必须与库里前10个动量因子的最大IC相关性低于0.3,否则直接拒绝入库。
反转家族:动量家族的反面,但不要以为只是把符号反过来。反转因子的衰减速度比动量因子快3-5倍,这决定了它的持仓周期和风险预算必须独立设置。我们习惯把反转因子单独管理,不给它设止损线,而是设衰减监控,IC跌破阈值且持续超过5个交易日则自动降权。
波动率家族:隐含波动率、历史波动率、已实现波动率、波动率曲面偏度。这个家族的难点在于数据质量。期权市场流动性参差不齐,虚值合约的隐含波动率经常是噪音。我们的处理方式是用OTM程度加权插值,也只保留流动性前30%的合约做计算。
流动性家族:换手率、买卖价差、Amihud非流动性指标、订单簿深度、大单占比。这个家族在A股尤其重要。A股的流动性分布极不均匀,市值最小的那一半股票日均成交可能只有几百万。设计流动性因子时必须做好市值中性化,否则拿到的只是一个市值因子。
价值家族:市盈率、市净率、股息率、企业价值倍数的各种变体。价值因子是量化圈最古老的因子,但它仍然有效,前提是你的定义跟别人不一样。我的经验是,单纯的低PE因子A股已经失效超过五年了,但"低PE+盈利质量过滤+行业相对估值"的复合版本在样本外仍然有显著的超额收益。
质量家族:ROE、ROA、毛利率、经营现金流/利润、应计项目。这个家族的坑在于财务数据的滞后性。你拿到的最新季报数据其实是三个月前的情况了。必须做前向调整,用分析师一致预期或高频另类数据(如卫星图像、招聘数据)做proxy更新。
情绪家族:新闻情感、社交媒体热度、分析师覆盖变化、融资融券余额、龙虎榜数据。情绪因子是近五年增长最快的因子类别,但也最容易被过度拟合。因为情绪数据的维度极高(一篇新闻可以提取上百个特征),如果不做严格的样本外时间序列验证,情绪因子几乎100%过拟合。
拥挤度家族:一个我花了三年时间才真正理解的家族。拥挤度因子衡量的是"有多少人已经在这个因子上做了同样的交易"。包括因子估值价差、机构持仓集中度、因子内相关性。拥挤度因子是防御性的,它的价值不是预测收益,而是预测尾部风险。当拥挤度超过阈值时,你的策略表现不会马上变差,但崩起来会比平时快两倍。
非线性组合家族:这是我们团队最近两年投入最多的方向。不是人手工定义一个"PE除以PB加ROE"的线性组合,而是用树模型、神经网络或遗传规划自动搜索因子组合规则。这个方向潜力巨大,但需要配套的过拟合控制机制。
第三章:数据管道,因子挖掘的血液循环系统
因子挖掘的起点不是数学公式,是数据管道。一个设计良好的数据管道可以让你一天试一百个因子想法,一个糟糕的数据管道会让你在一个数据对齐问题上卡三个小时。
3.1 数据源全景
我们的数据源分为四个层级:
L1核心数据:日频行情(OHLCV、复权因子、停牌标记)、日频财务(三大报表衍生指标)、指数成分股及权重。这些数据必须经过"三校验"才入库:完整性校验(缺失率低于0.01%)、一致性校验(同一标的跨源数据偏差小于1bp)、时效性校验(T日收盘数据必须在T+1日8:00前就绪)。
L2扩展数据:分钟线(1/5/15/30/60分钟)、Tick级数据、龙虎榜、融资融券、限售解禁、股东增减持、分析师预测、龙虎榜席位特征。L2数据的特点是容量大、处理慢,必须建立分区存储和增量更新机制。
L3另类数据:新闻文本(标题+正文+发布时间)、社交媒体情绪(微博热搜/股吧帖子/雪球讨论)、卫星图像(工厂货车流量/港口集装箱密度)、供应链关系图谱、招聘数据、专利数据。另类数据的核心挑战是结构化,把非结构化文本变成数值向量,这个过程每一步都可能引入偏差。
L4衍生数据:基于L1-L3计算的各种中间指标,各种周期的收益率、各种窗口的统计量、行业分类映射、因子暴露估计。L4数据不直接存储(因为可以随时重算),但需要维护计算依赖图,确保上游数据变更时能触发下游重算。
3.2 数据质量防火墙
我经历过的最贵的一次教训,是因为停牌股票的价格没有做前向填充,导致价值因子在停牌日产生了巨大偏差,整个组合在那天跑出了-3%的异常收益。事后复盘,只是少了一行fillna(method=‘ffill’)。
从那以后我们建立了一套数据质量防火墙,包含五个自动化检查点:
检查点一:交易日历对齐。所有时间序列必须锚定同一个交易日历。非交易日的数据(周日的分钟线?周一早上的日频数据?)直接拒绝入库。
检查点二:停牌/退市处理。停牌期间的价格保持不变,复牌首日需标记为特殊事件日。退市股票在退市日前正常保留,退市日后标记为NaN而非0。这个0和NaN的区别,在计算横截面均值时会产生巨大的差异。
检查点三:除权除息调整。复权因子必须逐日验证。A股的分红、送转、配股事件需要在前复权和后复权之间做交叉检验。如果前复权和后复权反推的价格偏差超过1%,说明复权因子有误。
检查点四:极值/异常值过滤。每天对每个截面做MAD(中位数绝对偏差)检测,超过5倍MAD的值标记为异常。但不直接删除,先人工抽查一批,判断是真实的市场异常(如单日涨停)还是数据错误。
检查点五:跨源一致性。同一字段从不同数据源获取的值,偏差超过阈值时自动报警。这个检查点帮我们发现过数次数据供应商的bug。
来源: 微信公众号