高频因子风险识别 (Top-Down and Bottom-Up)

一句话:高频因子里混着一部分「只贡献波动、不贡献收益」的成分;Barra 模型没有为这种成分定义因子,直接用 Barra 估协方差会低估组合风险。兴业金工的办法是两条路一起走——自上而下用高频数据重建 Barra 式的风险因子,自下而上用时序相关性聚类把藏着的共同风险找出来,再逐步剔除。

先把三个词分开

报告特意区分风险、风险因子、因子。设因子时序收益率 \lambda 可分解为

\lambda=\lambda_p+\lambda_r,\qquad E[\lambda_p]>0,\quad E[\lambda_r]=0,\quad D[\lambda_p]<D[\lambda_r]

只看期望 E[\lambda]=E[\lambda_p],看不到 \lambda_r 的存在;但看方差

D[\lambda]=D[\lambda_p]+D[\lambda_r]+2\,\mathrm{cov}(\lambda_p,\lambda_r)

会发现 \lambda_r 抬高了波动,压低了因子的风险收益比。三个概念对应为:

  • 风险 = D[\lambda]。多因子组合给因子 \lambda 配权重 w 时,D[\lambda]\propto w^2 而 E[\lambda]\propto w,承担更大风险才能获得更高收益。
  • 风险因子 = \lambda_r,即不提供收益、只提供时序波动的成分。把它从因子里去掉,因子表现会变好。
  • 因子 = \lambda 整体,收益与风险混在一起。

最小例子:某因子年化收益 8%、年化波动 10%,其中一部分波动来自一个期望为零的共同成分;剔除后收益仍为 8%、波动降到 6%,风险收益比从 0.8 升到 1.33。

两条路线与各自的盲区

自上而下

假设风险类别在高频与低频中是同一套,只是数据源不同。做法是用因子构建若干投资组合——特异性风险在组合中相互抵消,剩下的共性风险就是目标——再用高频数据重建 Barra 的量价风险因子(波动率、流动性、动量等)。盲区:如果高频因子里存在 Barra 定义之外的大类风险,这条路识别不出来。

自下而上

出发点是「含有相同风险因子的高频因子,时序相关性会很高」。可以证明:当 \lambda_2 含有风险因子 \lambda_r 时,

\rho(\lambda_1,\lambda_2+\lambda_r)\approx w_1\rho(\lambda_1,\lambda_2)+w_2\rho(\lambda_1,\lambda_r)

权重 w 与因子收益率的标准差正相关。风险因子的标准差通常大于普通因子,所以它对组合时序相关性的影响更大。落到操作上:对因子库的时序相关性矩阵做聚类,聚集在一起的因子大概率共享某个 \lambda_r;在组内做线性变换,构造一个「收益低、波动大、与组内所有因子相关性高」的因子,它就是风险因子。

盲区:识别效果依赖因子库的大小。某类风险若只存在于两三个因子里,聚类看不出聚集,这类风险就漏掉。

实际采用的三步混合流程

  1. 建大类风险因子:凭已有知识构造适合高频数据的大类风险因子,例如高换手率水平下的动量、波动率、流动性因子。合格标准是三条——收益率水平低、能解释尽量多其他因子的时序波动、与大部分因子时序相关性高。
  2. 聚类与对冲:所有因子按与各大类风险因子的时序相关性聚类,组内做风险对冲。若仍有因子无法归类,对剩余因子做时间序列聚类(同类风险会出现相关性聚集)。回到第 1 步,直到绝大部分因子都归入某个风险类别。
  3. 组内提纯:同一大类内选表现最好的因子作主因子,其余因子与主因子做线性组合,组成底层因子库。

底层因子库应满足:组间时序相关性接近 0;组内时序相关性出现聚集;表现明显好于单个因子。

识别出风险因子之后能做什么

  • 估协方差矩阵:组合优化的关键输入,估得准则多因子组合能规避更多风险。
  • 降低因子间相关性:因子库扩大后相关性自然上升,但两个高相关因子未必真的相似,可能只是共享同一个 \lambda_r。这时应对冲风险而不是砍掉收益。
  • 提升单因子表现:单因子收益里混着许多微小风险,识别并对冲后风险收益比上升。

组合优化:对 MVO 参数敏感性的回应

传统均值方差优化 (MVO) 对样本均值与协方差矩阵十分敏感,参数的一点扰动会显著改变最优权重。报告提出的方向是借鉴机器学习中的 Bootstrapping 思想,构建面向随机变量优化的机器学习模型:投资者输入自己的约束条件,模型给出比经典 MVO 更稳的结果。

这一节只有方向性描述,没有给出目标函数、重采样次数或求解算法,属于原文未展开的部分。

与 wiki 的接口