3、因子暴露计算:从定义到实战
因子暴露,说白了就是你的组合在某个风险因子上的「敏感度」。我刚开始做统计套利时,总觉得这玩意儿就是个数学概念,直到有一次回测跑出来收益曲线漂亮得不像话,结果实盘一个月就崩了——后来一查,原来是因子暴露没算对,组合在某个隐藏风险上敞口太大。
嗯,今天我们就来把这个东西彻底讲清楚。
3.1 因子暴露的定义
先给个严谨的说法:因子暴露(Factor Exposure)衡量的是资产收益率对某个风险因子的敏感程度。数学上,它其实就是因子模型中的回归系数。
举个例子,在CAPM模型中:
R_i - R_f = β_i * (R_m - R_f) + ε_i
这里的β_i就是股票i对市场因子的暴露。β=1.2意味着市场涨1%,这只股票平均涨1.2%。
但在统计套利中,我们面对的因子远不止市场因子。常见的包括:
- 动量因子:过去收益率的延续性
- 价值因子:估值指标的差异
- 波动率因子:低波动异象
- 流动性因子:交易成本的补偿
- 行业因子:行业间的系统性差异
每个因子都有一个暴露值,组合的因子暴露就是各成分股暴露的加权平均。
核心要点:因子暴露不是「有」或「没有」,而是「多少」的问题。任何组合都有因子暴露,区别在于你是否意识到它。
3.2 标准化方法:让因子可比较
你想想看,市盈率的范围可能是5-100,而换手率的范围可能是0.1%-10%。这两个量纲完全不同的指标,怎么放在一起比较?
标准化就是解决这个问题的。我个人习惯用两种方法:
3.2.1 Z-Score标准化
这是最常用的方法:
Z_i = (X_i - μ) / σ
其中μ是因子值的均值,σ是标准差。标准化后,因子暴露的均值为0,标准差为1。
优点:保留了异常值的信息,适合正态分布的数据。
缺点:对异常值敏感。我在项目中遇到过一只妖股,市盈率是负的2000多倍,Z-Score直接干到-15,整个组合的因子暴露都被它带偏了。
3.2.2 排序标准化(Rank标准化)
把因子值从小到大排序,然后映射到[0,1]区间:
Rank_i = (排序位置 - 1) / (总样本数 - 1)
或者映射到[-1,1]:
Rank_i = 2 * (排序位置 - 1) / (总样本数 - 1) - 1
优点:对异常值鲁棒,不管极端值多大,都不会影响其他样本的相对位置。
缺点:丢失了因子值之间的绝对距离信息。
我的建议:如果因子值分布比较干净(没有太多异常值),用Z-Score;如果数据噪声大,用Rank标准化。实盘中我倾向于Rank标准化,因为更稳健。
3.3 市值加权与等权处理
算好了个股的因子暴露,接下来就是合成组合层面的暴露。这里有两个主流做法。
3.3.1 市值加权
按市值大小分配权重:
组合因子暴露 = Σ (w_i * 个股因子暴露_i)
其中 w_i = 市值_i / Σ 市值_j
这符合「大公司影响大」的直觉。但有个坑——市值加权会让组合的因子暴露被几只大盘股主导。
我曾经做过一个回测,组合里茅台占了15%的权重,结果茅台的因子暴露直接决定了整个组合的暴露方向。后来换了等权,结论完全不一样。
3.3.2 等权处理
每只股票权重相同:
组合因子暴露 = (1/N) * Σ 个股因子暴露_i
等权的好处是更「民主」,能反映中小盘股的信息。但缺点也很明显——小盘股流动性差,交易成本高,实盘时可能跑不赢回测。
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 市值加权 | 贴近市场真实结构,流动性好 | 被大盘股主导,可能掩盖小盘股信号 | 大盘股策略、指数增强 |
| 等权处理 | 信息更全面,小盘股信号不被淹没 | 交易成本高,流动性风险大 | 多因子选股、统计套利 |
注意:不要只看回测结果选加权方式。等权在回测中往往表现更好(因为小盘股有超额收益),但实盘时交易成本会吃掉这部分收益。我建议用市值加权做基准,等权做敏感性分析。
3.4 行业哑变量处理
行业因子是统计套利中最重要的风险因子之一。为什么?因为同行业的股票往往有相似的驱动因素——油价涨了,航空股一起跌;政策利好,新能源板块一起涨。
处理行业因子,最常用的方法就是哑变量(Dummy Variable)。
3.4.1 基本做法
假设有K个行业,就创建K-1个哑变量(避免多重共线性):
行业哑变量_j = 1 如果股票属于行业j,否则0
举个例子,申万一级行业有31个,我们就创建30个哑变量。每个哑变量代表「是否属于该行业」。
3.4.2 行业分类的选择
这里有个实际问题:用哪种行业分类?
- 申万行业:国内最常用,分一级、二级、三级
- 中信行业:和申万类似,但分类标准略有不同
- GICS行业:全球标准,适合跨市场分析
- 自定义行业:根据策略需求自己聚类
我个人习惯用申万一级行业,因为覆盖面广,更新及时。但要注意——有些股票的业务横跨多个行业,这时候需要做「行业归属」的判断。
避坑指南:我曾经遇到过一个案例,某公司主营业务是白酒,但旗下还有房地产子公司。申万把它归为「食品饮料」,但它的走势和房地产板块高度相关。这种情况下,单纯用哑变量可能不够,需要结合主营业务收入占比做加权处理。
3.4.3 行业中性化
在统计套利中,我们经常要做「行业中性化」——让组合在各个行业上的暴露为0。做法很简单:
调整后的因子暴露 = 原始因子暴露 - 行业平均因子暴露
这样处理后,组合的收益就剔除了行业因素的影响,纯粹来自个股选择。
嗯,这里要注意:行业中性化不是万能的。如果某个行业的股票数量太少(比如只有3只),中性化后的结果可能不稳定。我一般会要求每个行业至少有10只股票,否则就合并到「其他」类别。
3.5 知识体系总览
说了这么多,我们来画个图总结一下因子暴露计算的完整流程:
这个流程图展示了因子暴露计算的完整链路。从原始数据出发,先做标准化(Z-Score或Rank),然后做加权处理(市值加权或等权),中间还要穿插行业哑变量的处理。
实际项目中,我一般会先做行业中性化,再做标准化,最后加权。顺序很重要——先中性化再标准化,能避免行业差异对标准化结果的影响。
实战技巧:写代码时,建议把因子暴露计算封装成一个函数,输入是因子数据和权重,输出是组合暴露。这样回测和实盘用同一套逻辑,避免「回测时用等权,实盘时用市值加权」这种低级错误。
好了,因子暴露计算的核心内容就这些。记住一句话:因子暴露不是算出来的,是设计出来的。你选择什么标准化方法、什么加权方式、什么行业分类,本质上都是在表达你对市场的理解。
公众号:蓝海资料掘金营,微信deep3321