一个时期的基金收益可以分为四个部分:资产配置收益、个股选择收益、交互收益和基准组合收益。先构建4个概念性的组合:
Q1、Q4:基准收益组合和实际投资组合;
Q2:积极资产配置组合。这表示基金经理能自主选择资产配置的比例,但是每个资产类别内部则完全按照其业绩基准配置,即每个资产i的收益等于在基准中资产i的收益;
Q3:积极股票选择组合。这表示基金经理完全按照业绩基准的比例进行资产类别的配置,但是每个资产内部能够自主选择个股,即组合中每个资产i的权重等于基准中资产i的权重。
它们的计算公式如下图:
资产配置收益,即仅改变资产权重:
个股选择收益,即仅改变资产类别:
交互收益,即由资产配置和个股选择的交互带来的:
总超额收益=Q4-Q1=AR+SR+IR。根据权重之和为1,AR也可以写成如下形式,其中基准组合收益rb=Q1:
尽管新定义的加入了基准收益,但由于权重之和都为1,所以更改后的资产配置收益和原结果在总和上是相等的。这两者的差异在于,原定义强调超额资产配置的收益来源于对收益更高的资产i的超配,或对收益低的资产j的低配,比如在普涨行情中,AR要求对所有上涨行业都进行超配,但这显然是做不到的,因为一定会以对另一个行业的低配为代价。而新定义强调对表现优于基准总收益的类别i超配,或劣于基准总收益的类别j低配,这种更符合实际。
另外,绩效评价者也可以根据自身需要对超额收益进行重新划分,比如FRM考试中将交互收益也归于个股选择收益中去。
考虑一个投资于11个资产大类的基准投资组合以及与该基准组合投资资产类别相同的投资组合p,具体类别和各类别投资权重见代码。试对该组合的收益率表现进行业绩归因:
import pandas as pd
name = ['现金','能源','原材料','非必需消费品','必需消费品','医疗保健','金融','信息技术','电信服务','公共服务','工业']
w1 = [0.3406,0.0599,0.0173,0.0837,0.0000,0.0444,0.1678,0.0000,0.0000,0.0000,0.2863]
w2 = [0.0000,0.0279,0.0672,0.1136,0.0678,0.0443,0.4150,0.0776,0.0104,0.0000,0.1762]
r1 = [0.0000,0.6824,5.4289,0.6665,0.0000,5.8276,1.4278,0.0000,0.0000,0.0000,1.1677]
r2 = [0.0000,0.0132,0.0760,0.1019,0.2125,0.1364,0.0256,0.0681,0.0649,0.0000,-0.0033]
df = pd.DataFrame({'wp_i': w1,'wb_i': w2,'rp_i': r1,'rb_i': r2},index = name)
df
Out[1]:
wp_i wb_i rp_i rb_i
现金 0.3406 0.0000 0.0000 0.0000
能源 0.0599 0.0279 0.6824 0.0132
原材料 0.0173 0.0672 5.4289 0.0760
非必需消费品 0.0837 0.1136 0.6665 0.1019
必需消费品 0.0000 0.0678 0.0000 0.2125
医疗保健 0.0444 0.0443 5.8276 0.1364
金融 0.1678 0.4150 1.4278 0.0256
信息技术 0.0000 0.0776 0.0000 0.0681
电信服务 0.0000 0.0104 0.0000 0.0649
公共服务 0.0000 0.0000 0.0000 0.0000
工业 0.2863 0.1762 1.1677 -0.0033
计算各版块的Q1、Q2、Q3和Q4:
df['Q1'] = df['rb_i']*df['wb_i']
df['Q2'] = df['rb_i']*df['wp_i']
df['Q3'] = df['rp_i']*df['wb_i']
df['Q4'] = df['rp_i']*df['wp_i']
df
Out[3]:
wp_i wb_i rp_i rb_i Q1 Q2 Q3 Q4
现金 0.3406 0.0000 0.0000 0.0000 0.000000 0.000000 0.000000 0.000000
能源 0.0599 0.0279 0.6824 0.0132 0.000368 0.000791 0.019039 0.040876
原材料 0.0173 0.0672 5.4289 0.0760 0.005107 0.001315 0.364822 0.093920
非必需消费品 0.0837 0.1136 0.6665 0.1019 0.011576 0.008529 0.075714 0.055786
必需消费品 0.0000 0.0678 0.0000 0.2125 0.014408 0.000000 0.000000 0.000000
医疗保健 0.0444 0.0443 5.8276 0.1364 0.006043 0.006056 0.258163 0.258745
金融 0.1678 0.4150 1.4278 0.0256 0.010624 0.004296 0.592537 0.239585
信息技术 0.0000 0.0776 0.0000 0.0681 0.005285 0.000000 0.000000 0.000000
电信服务 0.0000 0.0104 0.0000 0.0649 0.000675 0.000000 0.000000 0.000000
公共服务 0.0000 0.0000 0.0000 0.0000 0.000000 0.000000 0.000000 0.000000
工业 0.2863 0.1762 1.1677 -0.0033 -0.000581 -0.000945 0.205749 0.334313
进行业绩归因。注意这里的板块配置用的是AR’,而且各行业的基准收益率被规定为常数∑df[‘Q1’],即包含该11类资产的基准组合收益时才能做到求和后等于AR’:
result = pd.DataFrame()
result['板块配置'] = df['Q2']-df['Q1']-(df['wp_i']-df['wb_i'])*sum(df['Q1'])
result['板块内选股'] = df['Q3']-df['Q1']
result['交互收益'] = df['Q4']-df['Q3']-df['Q2']+df['Q1']
result['总超额收益'] = df['Q4']-df['Q1']
result.loc['合计'] = result.apply(lambda x:x.sum(),axis=0)
result
Out[4]:
板块配置 板块内选股 交互收益 总超额收益
现金 -0.018223 0.000000 0.000000 0.000000
能源 -0.001290 0.018671 0.021414 0.040507
原材料 -0.001123 0.359715 -0.267110 0.088813
非必需消费品 -0.001447 0.064139 -0.016882 0.044210
必需消费品 -0.010780 -0.014408 0.014408 -0.014408
医疗保健 0.000008 0.252120 0.000569 0.252703
金融 0.006898 0.581913 -0.346624 0.228961
信息技术 -0.001133 -0.005285 0.005285 -0.005285
电信服务 -0.000119 -0.000675 0.000675 -0.000675
公共服务 0.000000 0.000000 0.000000 0.000000
工业 -0.006254 0.206330 0.128927 0.334894
合计 -0.033462 1.462520 -0.459337 0.969721
也就是说在资产组合p的总超额收益96.97%中,板块配置(择时能力)贡献了-3.35%,个股选择(选股能力,包含交互收益)贡献了100.32%。
https://www.ricequant.com/community/topic/4204?page=1