在前一篇文章中,我们对某只基金的超额收益来源进行了分解,分解成了择时、择股与交互作用三个部分。详情请见:【基金量化研究系列】基金绩效归因模型(一)——Brinson多期归因模型简介。然而,Brinson多期归因模型在使用时需要使用每一个子周期的具体持仓信息(在各行业或各类资产之间资金的流入流出和仓位数据),因此该模型的应用对象更偏向于自有的持仓组合。然而,对于一般的公募基金而言,我们是无法及时通过公开渠道获取其持仓信息的:市场上一般的公募基金只能获取其每日的净值数据以及日收益率数据,因此我们需要使用适用范围更广泛的归因模型。那么,我们能不能仅根据收益率数据和净值数据对一只公募基金的基金管理人的业绩进行归因呢?本文就来探讨一下这个问题。
在建立模型之前,我们先对一些可能用到的指标进行说明:
指标 | 含义 |
---|---|
rp | 投资组合收益率 |
rm | 市场组合(基准)收益率 |
rf | 无风险利率 |
rpex | 投资组合超额收益 (rp - rf) |
rmex | 市场组合超额收益 (rp - rm) |
资本资产定价模型(Capital Asset Pricing Model,CAPM) 是由威廉·夏普(William Sharpe)等人构建的单因子模型。利用CAPM模型,我们可以将组合的超额收益分解为来自于市场风险敞口的收益 β 和组合特异性收益(非市场收益) α :
r p − r f = α + β ( r m − r f ) + ϵ r_p - r_f= \alpha + \beta(r_m - r_f) + \epsilon rp−rf=α+β(rm−rf)+ϵ
其中,β 表示组合在市场中暴露的风险敞口;
α 表示组合无法由市场风险解释的,或者说由个股选择带来的超额收益。
因此,若某只组合或基金的 α 显著大于0,则意味着基金管理人具有正向的择股能力。
T-M模型(Treynor-Mauzy Model) 是由特雷诺(Treynor) 和 玛泽(Mauzy)两人在CAPM模型框架的基础上增加了市场超额收益的二阶项,模型表达式如下:
r p − r f = α + β 1 ( r m − r f ) + β 2 ( r m − r f ) 2 + ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f) + \beta_2(r_m - r_f)^2 + \epsilon rp−rf=α+β1(rm−rf)+β2(rm−rf)2+ϵ
可以看出:若 α 显著大于0,则说明基金管理人具有正向的择券能力;若 β2 显著大于0,则说明基金管理人具有正向的择时能力。
H-M模型(Henriksson-Merton Model) 是由亨利克逊(Henriksson) 和 莫顿(Merton)两人在1981年提出的归因模型,该模型是在T-M模型的基础上进行了改进,模型表达式如下:
r p − r f = α + β 1 ( r m − r f ) + β 2 ( r m − r f ) I r m > r f + ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f) + \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon rp−rf=α+β1(rm−rf)+β2(rm−rf)Irm>rf+ϵ
其中:
I r m > r f = { 1 如果 r m > r f 0 其他 I_{r_m > r_f} = \begin{cases} 1 &\text{如果 } r_m > r_f \\ 0 &\text{其他} \end{cases} Irm>rf={10如果 rm>rf其他
为一示性函数。
可以看出:若 α > 0,则说明基金管理人具有正向的择券能力;若 β2 > 0,则说明基金管理人具有正向的择时能力。
H-M模型(Chang-Lewellen Model) 是由畅(Chang) 和 乐维伦( Lewellen)两人在1984年提出的归因模型。模型表达式如下:
r p − r f = α + β 1 ( r m − r f ) I r m < r f + + β 2 ( r m − r f ) I r m > r f + ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f)I_{r_m < r_f} + + \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon rp−rf=α+β1(rm−rf)Irm<rf++β2(rm−rf)Irm>rf+ϵ
可以看出:若 α > 0,则说明基金管理人具有正向的择券能力;若 β2 > β1,则说明基金管理人具有正向的择时能力。
首先,我们对C-L模型做转化:
r p − r f = α + β 1 ( r m − r f ) I r m < r f + + β 2 ( r m − r f ) I r m > r f + ϵ r_p - r_f= \alpha + \beta_1(r_m - r_f)I_{r_m < r_f} + + \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon rp−rf=α+β1(rm−rf)Irm<rf++β2(rm−rf)Irm>rf+ϵ = α + β 1 ( r m − r f ) ( 1 − I r m > r f ) + β 2 ( r m − r f ) I r m > r f + ϵ = \alpha + \beta_1(r_m - r_f) (1 - I_{r_m > r_f} )+ \beta_2(r_m - r_f)I_{r_m > r_f} + \epsilon =α+β1(rm−rf)(1−Irm>rf)+β2(rm−rf)Irm>rf+ϵ = α + β 1 ( r m − r f ) + ( β 2 − β 1 ) ( r m − r f ) I r m > r f + ϵ = \alpha + \beta_1(r_m - r_f) + (\beta_2 - \beta_1)(r_m - r_f)I_{r_m > r_f} + \epsilon =α+β1(rm−rf)+(β2−β1)(rm−rf)Irm>rf+ϵ
因此,我们发现C-L模型中的 β2 - β1 实际上与H-M模型的 β2是等价的,这与我们在模型中对择时能力的定义是一致的。因此,从这个角度来说H-M模型和C-L模型是等价的。
本文选用作者的某一只持仓,时间跨度为2020年2月4日-2020年5月12日共42个交易日的持仓数据。基准为沪深300ETF日收益率,无风险利率选用沪市七天逆回购利率R-007。具体数据如下图所示:
图1 日收益率、无风险利率与基准利率数据一览表
本文使用python的statsmodels包进行模型拟合。
除statsmodel包以外,也可以选择使用sklearn包进行模型训练,本文已在代码块中以注释的形式给出了基于sklearn包中LearRegression的使用方法。
# -*- coding: utf-8 -*-
# author: Mikey_Sun time: 5/30/2020
# all copyright belongs to the author. NO COPY ALLOWED.
import pandas as pd
import statsmodels.api as sm
# Step 1: 导入rp, rf和rm的收益率序列(已做数据清洗)
path = '你的数据存储地址' # 输入你的数据存储地址
data = pd.read_excel(path) #读取数据
pd.set_option('mode.chained_assignment', None)
# Step 2:构造所需要的模型
data['Ex_Rm'] = data['Rm'] - data['Rf']
data['Ex_Rp'] = data['Rp'] - data['Rf']
data['sqr_Ex_Rm'] = data['Ex_Rm']**2
data['Ex_Rm+'], data['Ex_Rm-'] = data['Ex_Rm'].copy(), data['Ex_Rm'].copy()
for i in data.index:
if data['Ex_Rm'][i] >= 0:
data['Ex_Rm+'][i] = data['Ex_Rm'][i]
data['Ex_Rm-'][i] = 0
else:
data['Ex_Rm-'][i] = data['Ex_Rm'][i]
data['Ex_Rm+'][i] = 0
print(data.head())
# Step 3: 模型输入-输出变量准备
y = data[['Ex_Rp']] # 模型输出变量矩阵
X_CAPM = sm.add_constant(data[['Ex_Rm']]) # CAPM模型输入变量矩阵
X_TM = sm.add_constant(data[['Ex_Rm', 'sqr_Ex_Rm']]) # T-M模型输入变量矩阵
X_HM = sm.add_constant(data[['Ex_Rm', 'Ex_Rm+']]) # H-M模型输入变量矩阵
X_CL = sm.add_constant(data[['Ex_Rm-', 'Ex_Rm+']]) # C-L模型输入变量矩阵
# Step 4: 模型训练
CAPM = sm.OLS(y, X_CAPM).fit() # CAPM拟合模型
TM = sm.OLS(y, X_TM).fit() # T-M拟合模型
HM = sm.OLS(y, X_HM).fit() # H-M拟合模型
CL = sm.OLS(y, X_CL).fit() # C-L拟合模型
# Step 5: 输出结果
print(CAPM.summary())
print(TM.summary())
print(HM.summary())
print(CL.summary())
'''
########################
########## 注 ##########
########################
# 也可以使用Sklearn包进行归因分析。代码如下:
from sklearn.linear_model import LinearRegression as LR
CAPM, TM, HM, CL = LR(), LR(), LR(), LR()
# 模型训练
CAPM.fit( data[['Ex_Rm']], data[['Ex_Rp']] )
TM.fit( data[['Ex_Rm', 'sqr_Ex_Rm']], data[['Ex_Rp']] )
HM.fit( data[['Ex_Rm', 'Ex_Rm+']], data[['Ex_Rp']] )
CL.fit( data[['Ex_Rm-', 'Ex_Rm+']], data[['Ex_Rp']] )
'''
模型的输出结果如表1所示:
表1 四种模型对某持仓净值的参数估计量汇总表
模型名称 | α | pα | β1 | pβ1 | β2 | pβ2 | R2 |
---|---|---|---|---|---|---|---|
CAPM | 0.0010 | 0.00 | 0.9488 | 0.05 | - | - | 0.85 |
T-M | 0.0019 | 0.03 | 0.9420 | 0.00 | -3.8873 | 0.03 | 0.86 |
H-M | 0.0028 | 0.01 | 1.1166 | 0.00 | -0.3275 | 0.02 | 0.86 |
C-L | 0.0028 | 0.01 | 1.1166 | 0.00 | 0.7891 | 0.00 | 0.86 |
从表1可以看出,不论是使用何种模型,都可以得出:该组合管理人在上述68个收益日中具有正向的择股能力(α > 0)和负向的择时能力。因此择股能力是该基金管理人的强项,但是择时能力是该基金管理人的短板。因此,该基金管理人应该再择时能力上再做进一步提升。
若想查阅本系列全部文章,请参见目录页:系列文章目录索引。
欢迎感兴趣的小伙伴来跟作者一起挑刺儿~ 包括但不限于语言上的、排版上的和内容上的不足和疏漏~ 一起进步呀!
有任何问题,欢迎在本文下方留言,或者将问题发送至勘误邮箱: [email protected]
谢谢大家!