2. 风险因子基础
在组合风险管理中,我们很少直接对“组合”本身建模,而是先把组合的损益拆解为若干可观测、可解释的驱动变量,这些变量就是风险因子。风险因子是连接“市场/信用/流动性等外部环境”与“组合价值变化”的桥梁。理解风险因子的定义、分类与识别方法,是后续做因子映射与风险分解的前提。
一、核心原理:风险因子是什么
风险因子(Risk Factor)是指能够引起组合价值发生变化的、可被独立度量或观测的变量。它通常具备三个特征:可观测性(有市场报价或可计算)、可解释性(能对应到具体风险来源)、可聚合性(能通过敏感度或敞口把组合价值映射到因子上)。
从数学上看,组合价值 V 可近似表示为因子向量 f 的函数:V ≈ V₀ + Σ(∂V/∂fᵢ)·Δfᵢ。这里的 ∂V/∂fᵢ 就是敏感度(如久期、Delta、Beta),Δfᵢ 是因子变动。风险分解的本质,就是把组合波动或损失归因到这些 Δfᵢ 上。
二、风险因子的分类体系
实务中通常按风险来源把因子分为四大类,每类下再细分具体因子。下表给出常见分类与典型因子示例:
| 因子大类 | 典型因子 | 常见敏感度指标 | 数据来源 |
|---|---|---|---|
| 市场因子 | 利率曲线、汇率、股票指数、商品价格、波动率 | 久期、Delta、Beta、Vega | 行情系统、交易所 |
| 信用因子 | 信用利差、违约概率PD、违约损失率LGD、评级迁移 | CS01、信用Beta | 评级机构、内部模型 |
| 流动性因子 | 买卖价差、成交量、换手率、融资利差 | 流动性调整久期、冲击成本系数 | 交易系统、订单簿 |
| 其他因子 | 通胀、GDP、政策利率、相关性 | 因子载荷、情景弹性 | 宏观数据库 |
需要注意,同一笔资产可能同时暴露于多类因子。例如一只公司债,既有利率因子暴露,又有信用利差因子暴露,还可能因流动性差而承担流动性因子暴露。风险分解时要避免“只归一类”的简化。
三、常见风险因子体系与识别方法
识别风险因子通常遵循“从组合到因子”的拆解流程,常见方法包括:
- 头寸穿透法:把组合逐层拆到最底层资产,再按资产类型匹配因子。适合结构清晰的组合。
- 敏感度回归法:用历史损益对候选因子做回归,筛选显著因子。适合因子关系不明确的场景。
- 主成分分析法(PCA):对利率曲线、股票收益等高维相关变量降维,提取主要因子(如水平、斜率、曲率)。
- 专家映射法:结合业务经验,把产品条款映射到因子,如可转债映射到股票、利率、信用、波动率。
下面是一段用 Python 对候选因子做显著性筛选的示例代码,可作为识别环节的参考:
import numpy as np
import statsmodels.api as sm
# X: 候选因子日变动矩阵 (T x N)
# y: 组合日损益向量 (T,)
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
# 输出各因子t值与p值,筛选显著因子
for i, name in enumerate(factor_names):
print(f"{name}: t={model.tvalues[i+1]:.2f}, p={model.pvalues[i+1]:.4f}")
# 保留 p < 0.05 的因子进入后续映射
significant = [n for n, p in zip(factor_names, model.pvalues[1:]) if p < 0.05]
print("显著因子:", significant)
四、案例与常见误区复盘
案例场景:某固收+组合包含国债、信用债、可转债和少量股票。若只按“债券/股票”两类做风险分解,会漏掉信用利差和可转债的波动率因子。正确做法是:国债→利率因子;信用债→利率+信用利差;可转债→利率+信用+股票+波动率;股票→股票因子。这样分解后,组合波动来源才完整。
- 把因子当风险类型,导致分类混乱、重复计算。
- 因子过多导致共线性,回归系数不稳定,归因结果不可信。
- 忽略流动性因子,在压力情景下低估实际损失。
- 只用历史数据识别因子,遗漏结构性变化带来的新因子。
复盘时建议检查三点:因子是否覆盖全部主要损益来源;因子之间是否高度相关;因子变动能否被稳定观测。只有因子体系干净、可解释,后续的映射与分解才有意义。
综上,风险因子基础工作的核心是:明确因子的定义边界,建立分类体系,并用多种识别方法交叉验证。只有因子体系既完整又干净,组合风险因子映射与风险分解才能得到可信、可解释的结果。