2. 因子分类体系:基本面因子、技术因子、另类因子、宏观因子的划分与特点

做多因子模型这些年,我最大的感触就是——因子分类搞不清楚,后面全是糊涂账

你想想看,市面上有成百上千个因子,怎么管?怎么选?怎么组合?

我个人习惯,先把因子分成四大类:基本面因子、技术因子、另类因子、宏观因子。这四类各有各的脾气,也各有各的坑。

2.1 基本面因子:最老牌,也最稳

基本面因子,说白了就是看公司本身好不好。估值、盈利、成长、财务质量,这些都算。

我记得刚入行那会儿,带我的老工程师说了一句话,我一直记着:「基本面因子是慢变量,但也是长变量」。什么意思?就是它不会天天变,但一旦变了,影响是长期的。

常见基本面因子举例:
  • 估值类:PE、PB、PS、PCF
  • 盈利类:ROE、ROA、毛利率、净利率
  • 成长类:营收增速、利润增速、EPS增速
  • 财务质量:资产负债率、现金流覆盖率、存货周转率

这里有个坑,我踩过。基本面因子有个致命弱点——数据频率低。季报一出,数据才更新一次。你想想看,三个月才刷新一次,中间市场早就变了好几轮了。

避坑指南: 我曾经在2018年做过一个纯基本面因子的策略,回测漂亮得不行,年化20%+。结果实盘一跑,连续三个月跑输基准。后来复盘发现,问题就出在数据滞后——季报发布前一个月,因子信号已经失效了。

所以我现在做基本面因子,一定会做一件事:做预期调整。用分析师一致预期替代历史数据,能提前1-2个月捕捉信号。

2.2 技术因子:短频快,但容易过拟合

技术因子,就是看价格和成交量。动量、反转、波动率、换手率,这些都属于技术因子。

这类因子有个特点:信号频率高。日线、分钟线,甚至tick级数据都能用。适合做短线策略。

但问题也很明显——过拟合风险极高。你随便调几个参数,就能在历史数据上跑出漂亮的曲线。但一到实盘,立马现原形。

我的经验: 技术因子一定要做样本外测试。我习惯把数据分成三段:训练集(60%)、验证集(20%)、测试集(20%)。只在测试集上跑一次,跑完就封存,不再调参。

举个例子,动量因子。很多人直接用过去N天的收益率。但N取多少?20天?60天?120天?

我建议你试试这个思路:不要只用一个窗口,用多窗口加权

# 多窗口动量因子示例
def multi_window_momentum(close, windows=[5, 20, 60]):
    """
    多窗口动量因子
    windows: 短、中、长三个窗口
    返回:加权动量得分
    """
    import pandas as pd
    import numpy as np
    
    # 计算各窗口收益率
    rets = {}
    for w in windows:
        rets[f'mom_{w}d'] = close.pct_change(w)
    
    # 加权合成(短窗口权重低,长窗口权重高)
    weights = [0.2, 0.3, 0.5]
    mom_score = sum(rets[f'mom_{w}d'] * w for w, weight in zip(windows, weights))
    
    return mom_score

这样做的好处是:既保留了短期动量的敏感性,又兼顾了长期趋势的稳定性。我在实盘中用这个方法,夏普比率比单窗口提升了约0.3。

2.3 另类因子:信息差的最大来源

另类因子,是最近几年最火的方向。为什么?因为传统因子已经卷得差不多了,超额收益越来越薄。

另类数据包括:

  • 舆情数据:新闻情感、社交媒体热度、股吧评论
  • 供应链数据:上下游关系、供应商集中度
  • 卫星数据:停车场车流量、工厂烟囱排放
  • 支付数据:信用卡消费、电商交易
  • 招聘数据:岗位数量、薪资变化
核心优势: 另类因子与传统因子的相关性低,能提供真正的增量信息。说白了,就是别人没看到的东西,你看到了。

但另类因子也有个大问题——数据清洗成本极高。我做过一个舆情因子项目,光数据清洗就占了60%的时间。原始数据里全是噪声:广告、水军、重复内容……

避坑指南: 我曾经拿微博数据做情感因子,回测效果很好。结果发现,是因为某只股票在微博上被水军刷了三个月正面评论。后来我加了一道过滤:剔除粉丝数低于1000的账号,效果才正常。

做另类因子,我建议你记住一句话:数据质量 > 数据数量。宁可少用几个数据源,也要保证每个数据源的质量可控。

2.4 宏观因子:大方向对了,细节才重要

宏观因子,看的是整个经济环境。利率、汇率、通胀、GDP、PMI,这些都属于宏观因子。

这类因子有个特点:影响范围广,但信号频率低。一个月甚至一个季度才更新一次。

很多人觉得宏观因子没用,因为信号太慢了。但我不这么看。宏观因子决定了资产配置的大方向。你想想看,如果利率进入上升周期,成长股的压力就大;如果PMI持续扩张,周期股就有机会。

我的用法: 宏观因子我不直接用来选股,而是用来做行业配置权重调整。比如,当PMI连续三个月上升时,我会超配周期行业;当利率上升时,我会低配高估值行业。

举个例子,利率因子怎么用?

# 利率因子对行业配置的影响
def rate_sensitivity_adjustment(rate_change, industry_betas):
    """
    根据利率变化调整行业权重
    rate_change: 利率变化(bp)
    industry_betas: 各行业对利率的敏感度
    """
    # 利率上升,降低高敏感度行业权重
    adjustment = -rate_change * industry_betas / 100
    # 归一化
    adjustment = adjustment / adjustment.sum()
    return adjustment

这里要注意:宏观因子不能单独用。它的信号太粗,必须结合其他因子一起用。我习惯把宏观因子作为条件变量,用来调整其他因子的权重。

2.5 四类因子的对比与协同

说了这么多,我们来总结一下这四类因子的特点:

因子类型 数据频率 信号周期 相关性 主要风险
基本面因子 低(季度) 长(3-12个月) 中等 数据滞后
技术因子 高(日/分钟) 短(1-60天) 过拟合
另类因子 中(日/周) 中(1-6个月) 极低 数据质量
宏观因子 低(月/季) 长(6-24个月) 信号粗糙

你看,这四类因子其实是互补的:

  • 基本面因子提供长期价值锚
  • 技术因子捕捉短期交易机会
  • 另类因子提供信息差优势
  • 宏观因子决定大方向

我个人习惯,一个完整的因子组合,至少包含这四类中的三类。只靠一类因子,很难持续跑赢市场。

核心观点: 因子分类不是目的,目的是理解每个因子的「脾气」——它什么时候有效,什么时候失效,什么时候会拖后腿。只有摸清了这些,你才能搭出真正稳健的多因子组合。

嗯,因子分类这块,今天就聊到这儿。下一节我们聊聊因子数据的获取与清洗,那又是另一番天地了。


专注资料整理