多因子模型归因分析
目录
简介
多因子模型归因方法
基于净值的归因方法
基于持仓的归因方法
简介
本文主要详细介绍怎么使用多因子模型对组合资产进行归因分析,归因分析的内容为收益归因和风险归因。
多因子模型归因方法
上图列出了由马克维茨均值方差理论引出的三条路,其一为资产配置,我们本文不涉及,其二为资本资产定价(CAMP)的一条路,其三为套利定价理论(APT)的第三条路。第二条路和第三条路为本文讨论重点。
第二条和第三条路都是属于多因子分析的范畴,第二条路是知道因子收益的时间序列,通过时间序列上的回归去求因子暴露,为的是解释个券收益的组成部分。第三条路是知道截面因子暴露去回归截面上的因子收益,为的是挖掘有效因子,找到这个因子带来的超额收益。
使用多因子模型进行投资组合的归因分析,也主要包括基于净值的归因方法和基于持仓的归因方法两大类。基于净值的归因方法是走的第二条路,比较简单。基于持仓的归因方法走的是第三条路,比较复杂。
两者的区别主要表现在三个方面:
1、基于净值的归因方法是时间序列回归,基于持仓的归因方法是截面回归;
2、基于净值的归因方法主要来自CAMP(资本资产定价)模型,基于持仓的归因方法主要来自APT(套利定价)理论。
3、基于净值的归因方法要求比较简单,数据较少且较容易获取,仅需要组合的净值数据以及因子收益序列即可进行分析。而基于持仓的归因方法需要知道具体的组合权重、个股因子暴露等数据,来确定组合的因子暴露。
下面详细介绍两大类方法。
在介绍两个方法前,我们下面给出项目的框架如下图:
基于净值的归因方法
基于净值的归因方法,逻辑上很简单,它来自资本资产定价模型,用所有因子收益的时间序列去回归组合收益的时间序列。这样做的目的是,是把组合的收益分解在各个特定的因子上,认为组合或者个股的收益都可以被给定的特定因子收益加个股特质收益来解释,解释不了的部分直接扔给残差。这里要特别注意,此时特定因子收益在一个时间截面上是一个常数,对多所有股票都一样,这与另一种方法基于持仓的归因方法有本质的区别。
基于这种方法,人们开发出的模型很多,如下:
1、Fama-French三因子模型
2、Carhart四因子
在 FF 三因子模型的基础上,引入动量因子 UMD (高收益率股票组合与低收益率股票组合 收益率之差)
3、Fama五因子模型如下:
我们这里以Fama五因子模型为例,详细介绍这种方法的实现。
Fama五因子模型如下:
因为本文主要是项目实施前的参考文档,所以在此不介绍Fama五因子模型怎么得来的。只需要知道Fama五因子模型是上面公式。
其中,
表示资产 i 在时间 t 的收益率,
表示时间 t 的无风险收益率,
表示时间 t 的市场收益率,
即为时间 t 的风险溢价,
为时间 t 的市值因子的模拟组合收 益率(Small minus Big),
为时间 t 的账面市值比因子的模拟组合收益率(High minus Low),
为时间 t 的盈利因子的模拟组合收益率(Robust minus Weak),
为时间 t 的投资因子的模拟组合收益率(Conservative minus Aggressive),
为经过正交化 调整的估值因子模拟组合收益率,其余各变量含义与三因子模型相同。
均为回归待拟合系数,_{} 为残差项。
有了模型,下面我们具体去实现。
Fama五因子模型归因分析
我们遵循机器学习项目的步骤,将Fama五因子模型归因分析的实现,归结为以下流程。
数据准备>>数据预处理>>构造Fama五因子>>数据分析>>回归分析>>归因分析
数据准备
(1) 股票池:全A股,在每个时刻t均剔除ST、PT股票,剔除停牌及上市未满一个月的股票,剔除 BP 值为负的股票;
(2) 时间参数:2010年1月至2018年1月;
(3) 因子对应指标:
a) 市场因子指标:上证 指数;
b) 规模因子指标:总市值 = 每股股价 × 发行总股数;
c) 估值因子指标:账面市值比 BP,即市净率的倒数;
d) 盈利因子指标:扣除非经常性损益、摊薄的 ROE;
e) 投资因子指标:当期总资产相对上期总资产变化率;
f) 无风险利率设为零,个股收益率用 Wind 后复权收盘价核算;
g) 以自然月为频率,计算因子值并重新分层计算对应五因子收益率。
数据预处理
1、所有数据按同一时间,同一股票对齐,注意这里的财报指标相关的时间要使用财报公布时间不能使用财报报告期。
2、第一步产生的NA值,用前一个值去填充(因为这里回归的方式是时间序列回归)。
构造Fama五因子
Fama 和 French(2015)原始的方法,是沿着某两个因子维度将股票分成 2x3=6 个组合(图表 2,3)。在这 2 个因子维度中,其中一个固定为规模,按照中位数分为两层, 另外一个为 BP、盈利或者投资因子,按照 30%,70%分位数分成 3 层(图表 3)。这样, 我们将得到 3 个 2x3 的股票资产组合(规模与 BP 两维度分组、规模与盈利两维度分组、 规模与投资两维度分组)。
因子的构造方法以及计算细节见下面表 1 和 2。在图表 2 中,我 们用 2 个字母来标记股票的分组,第一个字母表示规模大(B)或小(S),第二个字母在 BP 分层中,表示 BP 高(H)、中(N)、低(L);在盈利分组中表示强(R)、中(N)、弱(W);在投资 分组中,表示投资保守(C)、中(N)或者强(A)。
表1
表2
最后我们得到除了市场因子以外的 4 个因子 收益率为:
(1) SMB (small minus big):小市值组股票减大市值组股票平均月收益率;
(2) HML(highminuslowBP):高BP组股票减低BP组股票平均月收益率;
(3) RMW(Robustminusweakprofit):高ROE组的股票减低ROE组股票平均月收益率;
(4) CMA(conservativeminusaggressiveinv):总资产增长率低组股票减总资产增长率高组股票平均月收益率。
数据分析
数据分析部分主要分析五因子组成数据的特性。其主要分析四部分内容:
1、五因子的均值,方差等summary统计。这样能说明那个因子在市场的收益中起到作用。
2、求均值是否显著异于零的假设检验对应的 t 统计量。目的是检验哪一个因子最能带来超额的收益。
3、五因子累计收益分析,一般是规定一个日期为起始日期,形成五因子的累积净值曲线,目的是用来分析五因子在历史上和现在的表现,和预估未来的表现。后面归因分析中会用到这里的累积。
4、五因子间的相关性分析。其目的是提出多吃公线性,用作下一步回归用。
这里可以剔除多重共线性,也可以不剔除,因为Fama在原始论文中就发现了了五因子中存在多重公线性,但是Fama并没有处理这个问题。所以这里也可以不处理。
去除多重共线性的方法为:
分别用4个因子对另一个因子进行线性回归,可以找到共线性因子,找到共线性因子后。
用四个因子去回归这个共线性的因子,生成的残差,作为这个因子的新值,这样既做可以去掉共线性,也因为是线性变化,不改变因子的方向。这种去除共线性的方法,使用与所有的多因子模型。包括APT多因子模型。
回归分析
我们有了Fama五因子,将组合的收益时间序列作为因变量,直接进行回归,即可求出模型:
在求出模型的同时,求出回归的可决系数,检验模型的因子解释的有效性。
收益归因分析
我们由五因子的累积净值走势图,可以分析出历史和当前那个因子起到主要作用,通过上面方差的回归系数,我们可以发现我们组合的收益来源,如果组合的主要收益来源和当前五因子收益表现最好的不一致,就要考虑进行调仓,高配表现好的因子。这就是基于净值的收益归因。
风险归因分析
既然这里目标变量是组合的收益率,那么有上面模型,我们可以由因子的风险矩阵求出组合的总风险,且每一个因子的风险贡献都可以求出,道理和风险预算模型一致。这就是基于净值的风险归因。
Fama多因子选股
额外的,在这个模型可以用来选股,我们选择很小的股票和资产,因为这种股票和资产收益和风险可以被五因子所解释,风险小,大的说明还有很多不能被五因子解释的部分,风险也大。
所以,我们使用Fama多因子选股的时候,只需用五因子回归市场上每一个股票,对生成的残差有小到大排序,选择残差小的股票。
基于持仓的归因方法
基于持仓的归因方法,逻辑上比基于净值的归因方法要复杂的多,它来自套利定价模型(APT),用所有所有股票截面的因子的暴露序列去回归所有股票的收益序列。这种做法的目的是找到个股收益和因子收益之间的关系,寻找有效因子,通过有效因子来选择好的股票。
这种做法把重点放在了因子挖掘和最后资产的打分模型的选择上。
最后的模型打分,最后主要开发出来以下模型:
分层打分法、简单线性回归、随机森林、逻辑回归、支持向量机回归。
本文以简单线性回归为例,详细介绍这种方法归因分析的实现。
线性回归多因子模型归因分析
我们还是遵循机器学习的项目流程,来进行实现:
数据准备>>数据预处理>>单因子有效性检验>>数据分析>>回归分析>>归因分析
数据准备:
(1) 股票池:全A股,在每个时刻t均剔除ST、PT股票,剔除停牌及上市未满一个月的股票,剔除 BP 值为负的股票;
(2) 时间参数:2010年1月至2018年1月;
(3) 因子对应指标:
a) 市场因子指标:上证 指数;
b) 行业因子指标:申万一级行业指数。
c) 风格因子指标:市值size,PE,EBITA.(这里以这三个因子为例,APT框架的优势就是因子可以随便加)
数据预处理
1、所有数据按同一时间,同一股票对齐,注意这里的财报指标相关的时间要使用财报公布时间不能使用财报报告期。虽然这种方法是截面回归,但是要研究每个因子的有效性,所以必须列出各个因子的历史时间序列数据。
2、第一步产生的NA值,用截面该因子的均值填充。(这与上面的做法不一样)。
3、若因子NA比率超过30%,则舍弃该因子。
4、对每个因子的暴露(就是因子值)分布分析,剔除3-sigma以外的公司。(最后回归用,因为回归对极值敏感)
5、z-score标准化所有因子。(最后回归用,去量纲)
因子中性化处理
通常我们总认为行业和市值两个因子对股票的收益影响较大,所以在单独分析其他因子时,要把这两个因子暴露引起的收益剔除掉,也就是所谓的因子中性化。经常使用的方法是,用因子暴露作为因变量,用行业因子和市值因子去回归因子暴露,得到的残差就是中性化后的因子。
在这个过程中,因为行业是类别变量,不能直接进行回归,要引入哑变量的方式进行回归。
注意:因子暴露此时已经变成中心化的,所以一下处理全在中性化因子的基础上。
单因子有效性检验
整个模型最麻烦的一步,也是最琐碎的一步。
在剔除了极端公司和填充了因子NA值后,我们对每个单因子进行有效性检验。做法有以下几种:
1、IC值检验
2、RIC值检验
3、IR检验
4、方差分析(ANOVA)给出p-value
5、随机森林
IC值检验
这里我们要先再确认下因子收益和因子暴露的概念:
因子暴露是因子具体的值,例如60000.sh(浦发银行)的PE(因子)值为5.62.纳闷普法银行在因子PE上的暴露就是5.62。
因子收益是用截面因子暴露去回归个股收益时产生的各项因子的回归系数。
为什么这样定义,其实原因来自上面的基于CAMP模型多因子分析。
我们有各个因子的暴露值后,可以对各个因子进行单因子检验,我们求当期(t期)的因子暴露值和下一期(t+1期)的个股收益的相关性数,得到当期(t期)的该因子的IC值:
其中:
这样求出来的IC值的绝对值越大越好,求出所有因子历史一段时间的IC值走势。因子IC的绝对值长时间处于很大的值,说明这个因子长期有效性很强,若偶尔绝对值很大,说明因子偶尔有效,也要保留,我们剔除那些IC长期很小的因子。认为这些因子有效性不强。
RIC值检验
RIC的用法与IC的用法完全一致,只有RIC的定义不一样,我们求当期(t期)的因子暴露值和下一期(t+1期)的个股收益的秩相关性数,得到当期(t期)的该因子的RIC值:
其中:
RIC使用方式和IC一致。
IR检验
从上面使用IC和RIC时,不是很方便,我们要看IC和RIC长期表现,这种表现是定性看的,我们需要构造一个量,定量的去衡量因子的长期表现。我们很简单的一个想法是:用IC的均值来衡量IC的长期表现好坏,用IC的标准差来衡量表现的稳定性。
于是我们综合两个在一起,构造IR如下:
这里的符号IR与信息比率是一样的,因为两者是一个东西,可以通过数学推导得到。
我们选取IR高的因子,丢弃IR低的因子。
方差分析(ANOVA)给出p-value
方差分析是用来分析多组数据之间均值是否一样的统计分析方法,当检验的p值大与0.05是,说明多组之前的均值没有差异,当p值小于0,05 时,说明各组之间存在差异。对于选因子来说,我们希望每组之前有差异。所以p-value需要小于0.05.
P值的计算方式很复杂,其思想是用组内方差处于组间方差构造统计量,进行F检验。可直接调用python方差分析函数。
数据分析
本步主要查看上一步选出的各个因子之间相关系数,为解决下面回归中的两两共线性问题,我们要合并部分因子,我们设置阀值0.6.认为相关系数在0.6 以上的因子看作同一组因子。
对同一组的因子,我们采用IC_IR加权的方式合并这些因子,将其合成一个因子。
其具体加权方式为:。
这样我们就得到了组合因子。但是这一步虽然剔除了两两间的共线性,但是未能剔除多重共线性。
回归分析
本步对上面筛选出的因子,以个股收益为因变量惊喜建模,常用模型为多元线性回归,获得如下回归方程:
其中:是股票n在因子k 上的暴露。为因子k的因子收益,为股票n的残差收益,既股票特有收益率。
由这个回归方程,用最小二乘发,我们可以得到因子k的收益。
收益归因分析
进一步的,若现有一组合P,则这个组合P的收益率为:
其中:为组合P中股票n的权重。
所以组合在因子k上的暴露设为为:
所以此时,我们知道了组合的因子暴露,各因子的收益,所以可以得到组合里面个因子的收益贡献:
所以,此时的多因子模型收益归因归因。
风险归因分析
这里的风险归因分析和Barra一模一样:
由上面回归模型得到(将其向量化表示):
其中:r为股票的收益向量,X因子的暴露矩阵,f为股票的因子收益向量,u为股票的特质收益。
则我们的组合P的波动率为:
其中:为所有因子收益学列的协方差矩阵,为股票特质收益序列的协方差矩阵。w为持仓权重。具体推导详见马克维茨均值方差理论。
有了组合的风险(既波动率),就可以得到以下三个量:
组合的系统风险:
组合的特质风险:
因子对总风险的贡献比例为(推导详见风险预算):
以上就是多因子模型在风险归因上的应用。
传统多因子选股
传统的这一版多因子,另一大作用是用来选股的,我们得到以下回归方程的时候。
最简单的,可以把最新一期的因子带入到回归方程,计算出的个股的的未来收益,将其线性映射到1到100,可以直接作为分数,我们选择分数高的股票即可。一般都是直接做前10%,做空后10%获得超额收益。