1974年,美国学者 Barr Rosenberg 提出了采用多因子风险模型对投资组合的风险和收益进行分析的方法。1975 起,Barra成立了自己的公司,针对不同的国家、 不同类型的市场陆续发布并更新了多个Barra 模型版本。期间 Barra 公司被 MSCI 收购, Barra 模型也进一步被推广并广泛应用于各类投资者的实际业务中。
2012 年 6 月,Barra 发布了 CNE5 版本,此版本被中国的机构投资者广泛使用。2018 年 8 月, MSCI 公布了中国权益市场风险模型CNE6。与CNE5 相比,CNE6 模型在因子数量以及因子构成上都进行了一定程度的调整。
基于BarraCNE5构建的各类风格因子,常用于对投资组合收益来源以及投资风格进行分析,如在《私募基金数量化绩效评价体系(13)基于多因子模型的基金风格归因分析》一文中我们介绍了这一方法。
对于一般的个人研究者或者初创期的小型投资机构来说,获取BarraCNE5数据比较困难,要么是费用比较高,要么是自己计算工作量太大尤其是后续每日的数据更新运维工作量更大,为此,本文作者基于兴趣爱好的角度尝试计算BarraCNE5定义的十个风格因子的日收益率,并每日进行原始的因子数据的自动维护,日收益率数据的更新计算等。为了更好地推动完善这一研究,目前项目已经实现了向感兴趣的朋友邮件推送每日数据更新结果,供大家共同研究讨论。本研究纯属个人兴趣爱好,尚有一些不足,欢迎有兴趣的朋友一起讨论。
我们对于因子数据的常见的几个数据处理细节如下:
1、去极值
参考Wind的做法,使用MAD去极值处理法,将偏离中位数5倍去均值中位数的数据拉回。绝对中位差(MAD)较标准差而言对离群值(outlier)也就是异常值更加稳健。在标准差计算中,数据点到其均值的距离要求平方,因此对偏离较为严重的点偏离的影响得以加重,也就是说异常值严重影响着标准差的求解,因此使用中位数极值法能更好的度量和修正异常值。(默认N=5)
2、缺失值的处理
参考Wind的做法,以组合行业中位数代替。在某一时间截面,筛选出组合中和缺少因子数据个股同个行业的股票,计算这些股票该因子序列的中位数,用中位数填充缺失值。
3、标准化
股票的因子数据衡量着股票不同维度的信息,不进行量纲的统一处理,没法真实准确地反映出因子数据里隐藏的信息,有些指标之间也没有可比性。因此在分析之前,需要对数据进行标准化处理,统一量纲。 使用均值标准差标准化(Z-Score),这是最常用的方法,在某一时间截面,将因子序列变为以0为均值,1为标准差的序列。
4、中性化
Barra 在构建风格因子时会要求对一些因子进行市值或 Beta 中性化处理。因子中性化处理的核心目的是减少该因子与市值因子和 Beta 因子的共线性,使得通过回归方式估计的因子回报率更加稳健。
5、因子半衰期的处理
半衰期本意为放射性的原子核有半数发生衰变所需要的时间,半衰期(halflife),随着放射的不断进行,放射强度将按指数曲线下降,放射强度达到原值一半所需要的时间叫做同位素的半衰期。
在BarraCNE5中半衰期的作用是赋予近期观测值更高的权重,随着时间的远离观测值的权重随着时间呈现指数递减趋势,当某个交易日距离当前日期的时间间隔为半衰期个交易日时,该日观测值的权重为当前日期T权重的一半,用公式表示如下:
目前该研究已经完成因子数据的每日更新,因子日收益率的每日更新,并可每日推送数据结果,如有需要获取结果的朋友可在后台回复“好友”二字添加作者好友,并发送个人邮箱,便可自动获得推送,也可以就计算过程以及数据的进一步完善进行讨论。
数据推送邮件示例如下,建议使用QQ邮箱,可在微信端设置邮箱提醒便可第一时间收到邮件到达提醒。
邮件内容如下,包括因子日收益率数据的CSV格式文件以及近一个月的因子收益率的走势(html格式,交互式可视化图片,方便自行选择不同的因子进行观察)。
推送附件1示例:近一月风格因子收益率
推送附件2示例:近一月风格因子日收益率