4、因子暴露的定义与度量
聊因子暴露之前,我先说个事儿。
几年前我帮一家私募做归因分析,发现他们的组合明明配了很多价值股,但收益表现却跟成长因子高度相关。客户一脸懵:「我买的都是低市盈率的票啊,怎么会这样?」
后来一查,问题出在因子暴露的度量上。他们以为「买了价值股」就等于「有价值因子暴露」,但实际算出来的因子载荷完全不是那么回事。
嗯,这就是我们今天要聊的核心——因子暴露到底是什么,以及怎么算才靠谱。
4.1 因子暴露的概念
说白了,因子暴露就是你的组合对某个风险因子的敏感程度。
你想想看,一个组合的收益可以拆解成两部分:一部分来自市场整体涨跌,另一部分来自你主动承担的各种风险因子。因子暴露衡量的就是后面这部分——你主动暴露了多少在某个因子上。
因子暴露的数学定义
对于资产 i 在因子 k 上的暴露 βi,k,它表示因子 k 每变动 1 个单位,资产 i 的预期收益变动多少。
公式:Ri = αi + βi,1·F1 + βi,2·F2 + ... + εi
举个例子你就明白了。假设某只股票的市值因子暴露是 0.8,这意味着小盘股因子每涨 1%,这只股票平均涨 0.8%。反过来,如果暴露是负数,比如 -0.3,那就说明它跟因子走势相反。
我在项目中遇到过一种常见误解:有人把「持仓特征」直接等同于「因子暴露」。比如持仓里全是小盘股,就觉得小盘因子暴露一定很高。其实不一定——特征只是表象,暴露是统计结果,两者有本质区别。
4.2 因子载荷的计算方法
因子载荷,就是因子暴露的具体数值。怎么算?主流方法有三种。
4.2.1 时间序列回归法
这是最经典的方法。拿资产的历史收益率,对因子收益率做回归。
# Python 示例:时间序列回归计算因子载荷
import statsmodels.api as sm
import pandas as pd
# 假设 asset_returns 是资产日收益率序列
# factor_returns 是因子收益率数据框
X = sm.add_constant(factor_returns)
model = sm.OLS(asset_returns, X).fit()
# 因子载荷就是回归系数
factor_loadings = model.params[1:] # 去掉截距项
print(factor_loadings)
这个方法的好处是直观,容易理解。但有个坑——回归窗口期的选择很关键。我用 60 天滚动窗口算出来的结果,跟用 120 天算的,有时候能差出一倍。
我曾经踩过的坑:
有一次我用 30 天滚动窗口算某只股票的动量因子载荷,结果正负号来回跳。后来发现是因为窗口太短,噪声把信号淹没了。建议至少用 60 个交易日以上的窗口,流动性差的股票甚至要用 120 天以上。
4.2.2 横截面回归法
这个方法在截面数据上做回归,常用于计算个股对某个因子的暴露。
具体做法是:在每个时间点,把所有股票的收益率对它们的特征值(比如市值、账面市值比)做回归,得到的回归系数就是因子收益率,而个股的因子载荷就是它的特征值本身(经过标准化后)。
嗯,这个方法在学术论文里很常见,Fama-French 三因子模型用的就是这种思路。
4.2.3 协方差矩阵法
这个方法更数学化一些。通过计算资产收益率与因子收益率的协方差,再除以因子收益率的方差,得到因子载荷。
# 协方差矩阵法计算因子载荷
import numpy as np
# asset_rets: 资产收益率序列
# factor_rets: 因子收益率序列
cov = np.cov(asset_rets, factor_rets)[0, 1]
var = np.var(factor_rets)
beta = cov / var
这个方法计算简单,但前提是因子收益率要准确。如果因子本身构造有问题,算出来的载荷就是垃圾。
4.3 标准化处理
为什么要做标准化?
你想想看,不同因子的量纲不一样。市值因子的数值可能是几十亿,而动量因子可能是百分比。如果不做标准化,你根本没法比较不同因子之间的暴露大小。
标准化的方法主要有两种:
| 方法 | 公式 | 适用场景 |
|---|---|---|
| Z-score 标准化 | (x - μ) / σ | 因子载荷呈正态分布时 |
| 分位数标准化 | 将数值映射到 [0,1] 或 [-1,1] | 因子载荷有极端值时 |
我的个人习惯:
做组合管理时,我更喜欢用 Z-score 标准化。因为它保留了因子载荷的相对大小信息,而且方便做多空组合的构建。但如果数据里有明显的异常值,我会先用 winsorize 处理一下,再做标准化。
标准化之后,因子载荷就变成了一个无量纲的数值。比如某只股票的价值因子载荷是 1.2,意思就是它比平均水平高 1.2 个标准差——说白了,这是一只深度价值股。
4.4 知识体系总览
下面这张图把因子暴露的核心逻辑串起来了:
从这张图可以看得很清楚:因子暴露是核心,往下分三个方向——概念理解、计算方法、标准化处理。三者缺一不可。
我个人觉得,很多人只关注计算方法,忽略了标准化的重要性。但实际做组合管理时,标准化这一步往往决定了你的风险预算分配是否合理。
举个例子,如果你不标准化,市值因子的暴露数值可能是几千万,而动量因子只有零点几。你根本没法判断哪个因子在你的组合里占主导地位。标准化之后,一切都变得清晰了。
核心要点回顾:
- 因子暴露 = 组合对风险因子的敏感程度
- 三种计算方法各有优劣,时间序列法最常用
- 标准化是跨因子比较的前提,别跳过
- 窗口期选择、异常值处理,都是实操中的关键细节
好了,因子暴露的定义与度量就聊到这儿。记住一句话:算不准暴露,就别谈控制。下一节我们会聊怎么用这些暴露数据来做组合优化,到时候你就知道今天这些东西有多重要了。
公众号:蓝海资料掘金营,微信deep3321