人生若只如初见,何事秋风悲画扇。等闲变却故人心,却道故人心易变。
--《木兰花》 纳兰容若
多因子模型的介绍文章汗牛充栋,但系统性的归纳整理首推石川博士的多因子系列文章,看完绝对让人有醍醐灌顶的感觉。其次大部分多因子文章都是聚焦于方法论层面的探讨,却很少有深入到代码实现层面的讲解,这对于大部分初次接触多因子模型的用户来说似乎总隔着一层窗户纸。秉着Talk is cheap,show me the code的理念,这里来和大家一起复现一下各券商金工研报中经常会提到的纯因子收益率的实现逻辑。由于是个人的理解,纰漏在所难免,欢迎指正。
那什么是纯因子收益率呢?它和我们通常谈论的多空组合因子收益率又有什么差异?
对于任意投资组合,如果该组合对于某个指定因子的暴露度为 1,而对其他因子的暴露度为 0,则称该投资组合为指定因子的纯因子组合。纯因子收益率的实现不同于我们常说的高低分组,因为高低分组求出的多空收益率并不能完全保证投资组合在其他因子上的暴露度恰好为0,比如高低估值分组求估值因子的收益率便会面临着其在市值因子上也存在着明显暴露,因为通常而言,高估值组对应小市值,低估值组对应大市值。
为了解决投资组合在其他因子上存在风格暴露的问题,一般是通过使用基于截面回归的加权最小二乘法(Weigthed Least Square, WLS)来计算投资组合不同因子下对应的股票权重。在复现之前,我们来简单回顾一下BARRA CNE5中的多因子模型框架。
考虑一个包含
只股票的投资组合,其可以用
个因子进行解释,
个因子中包括
个国家因子,
个行业因子,
个风格因子,即
。一般表达式如下:
为了便于理解,通常转换成矩阵的表现形式: