多因子模型系列2-多因子模型的步骤梳理

在量化交易中,多因子策略是一种常被提及且应用广泛的选股策略。我们会经常使用某种指标或者多种指标来对股票池进行筛选,这些用于选股的指标一般被称为因子。顾名思义,多因子模型是指使用多个因子,综合考量各因素而建立的选股模型,其假设股票收益率能被一组共同因子和个股特异因素所解释。

多因子模型的优点在于,它能通过有限共同因子来有效地筛选数量庞大的个股,在大幅度降低问题难度的同时,也通过合理预测做出了判断。本篇将对如何构建多因子模型做详细介绍,同时在各步骤附上相关帖~

1:多因子模型流程

一、数据预处理

在构建多因子模型之前,我们首先要准备好待检验的原始因子池以及它们的数据,并根据要求对它们进行初步的整理。

1.1    基础数据采集

作为建立模型最开始的第一步,确保使用数据的全面性和合理性是很重要的。我们首先需要归纳出不同风格的因子种类,再在各个风格大类下细分相关因子,并综合经济含义以及相关参数来确定因子的计算方法。

风格因子是指该种类因子具有一种独特的总体表现,根据Barra的定义可以分为9类,分别是Beta,动量,规模,盈利性,波动性,成长性,价值,杠杆率和流动性。每个大类因子里面还有细分的因子。除此之外,还有各种被探索出来的新因子,以期能更好的分析不同市场时期所展示的特征表现。

在我们平台可以通过get_fundamentals拿到股票的财务数据,目前的提供的财务数据可以在财务数据文档中找到相应字段。我们的财务数据来源于国内最好的金融数据供应商之一的恒生聚源,从而极好地保证了策略输出结果的准确性。

1:部分初始因子池示例

大类因子 因子简称 因子解释
估值因子 pe_ratio 市盈率
pb_ratio 市净率
pcf_ratio 市现率
ps_ratio 市销率
peg_ratio 市盈率相对盈利增长率
EBIT/EV 息税前利润/企业价值
波动率因子 idio_vol_FF 基于Fama的特质波动率
idio_vol_CAPM 基于CAPM的特质波动率
idio_vol_Carhart 基于Carhart的特质波动率
downside_idio_vol_FF 基于Fama的特质下行波动率
杠杆因子 debt_to_equity_ratio 负债权益比
debt_to_asset_ratio 资产负债比
tangible_asset_to_debt 有形资产负债比
current_ratio 现金比率
quick_ratio 流动比率

1.2   离群值处理

对数据进行标准化之前,我们需要先对离群值进行处理。因为过大或过小的数据可能会影响到分析结果,尤其是在做回归的时候,离群值会严重影响因子和收益率之间的相关性估计结果。

离群值的处理方法是将其调整至上下限,其中上下限由离群值判断的标准给出。离群值的判断标准有三种,分别为 MAD、 、百分位法,主要思路是先界定上下限,再将超过界限的离群值调整至上下限。比较常用的是MAD法。

1.3    数据标准化

即使同属于一种风格因子,各个细分因子间的量级和单位也可能会有很大的差别。为了更好地对因子们进行比较和回归,我们需要对因子进行标准化处理。

标准化(standardization)在统计学中有一系列含义,一般使用z-score的方法。处理后的数据从有量纲转化为无量纲,从而使得数据更加集中,或者使得不同的指标能够进行比较和回归。

对因子进行标准化处理的方法主要有以下两种:

1、对原始因子值进行标准化;

2、用因子的排序值进行标准化。

实际上方法一更加常用,因为可以保留更多的因子分布信息,但是需要去掉极端值,否则会影响到回归结果。回归的方法一般使用z-score,将因子值的均值调整为0,标准差调整为1 

1.2 1.3的详细方法介绍和相关代码可见帖子《数据预处理(上)之离群值处理、标准化》

2:标准化处理后因子分布图

二、单因子检验

我们在最开始采集数据时所初步构建的因子池,在逻辑上与收益率是有着一定经济意义上的联系,接下来我们需要对它们进行实证分析,筛选掉与收益率相关性不高的因子,从而得到真正有效的因子池。

此部分可见帖子《波动率因子分析》

2.1    特征分析

首先,初步分析因子之间的相关性,判断因子们的表现是否大致类似。

其次,用 pearson 或 spearman 方法计算因子的自相关系数,并观察因子的衰退速率是否有显著区别。

2.2    中性化处理

在使用这些因子进行选股时,有时会因为其它因子的影响,而导致选出来的股票具有一些我们不希望看到的偏向。比如说,市净率会与市值有很高的相关性,这时如果我们使用未进行市值中性化的市净率,选股的结果会比较集中。所以我们在使用这些因子之前,需要对它们是否对市值和行业有偏好进行检验和处理。

实际上中性化的含义不止对因子的中性化,详细和下文相关代码可以见《数据预处理(下)之中性化》

    2.2.1 市值分析

为了确定市值因子是否影响待分析因子的暴露度,我们将全市场股票的市值取对数后由小至大分成5组宽度相等的市值区间,构造待分析因子的市值分布差异表。若因子暴露度表现出与市值有着明显相关性,则使用因子时需要对其进行市值中性化处理。

除了暴露度的市值分析,我们也可以对因子的IC值进行市值分析,查看在不同市值区间中因子的IC值是否有显著变化。

    2.2.2 行业分析

与市值分析类似,我们需要对因子暴露度和IC值做行业分析,并观察其行业分布结果。如果表现出明显行业分布差异,则使用该因子进行选股时,可以采取行业中性化处理。

3:行业、市值中性化处理对比图

2.3    回归法分析

回归法是最常用于检验因子有效性的方法,具体来说它是将T期因子的暴露度与T+1的股票收益率进行回归,所得的回归系数即为T期的因子收益率。回归模型中包含行业哑变量,若因子在前面的行业分析中发现与行业有明显相关性,则该模型能够排除行业差异影响。模型具体如下:

在进行回归法分析中,我们需要对数据进一步处理。除了在对数据进行标准化及离群值处理,我们还需要对因子的缺失值进行填补,从而提升回归结果的可信度。同时,由于可能存在小盘股的影响以及回归的异方差性,我们采用加权最小二乘回归(WLS),权重为个股流通市值的平方根。

如果因为出现缺失值就将该个股删除,可能会导致不同因子回归的股票池差距较大,或者导致股票池大大缩水。对于缺失值的填补比较常用的方法是设为0、均值、上下数据、插值法,和算法拟合进行填充。

由此我们可以得到回归时间段中的因子收益率序列,以及相应的因子收益率t值序列。我们通过分析t值,能够判断出对应回归系数的显著性,从而得出该因子是否的确对下期的股票收益率有解释作用。

评价方法:

a.    t值绝对值均值:判断显著性

b.    因子收益率大于0的占比:判断该因子对股票收益率的正向影响是否明显

c.    t值绝对值中大于2的占比:判断显著性是否稳定

d.    因子收益率零假设的t值:判断该因子的收益率序列是否显著不为零。

此部分内容的具体代码和分析将在下次帖子更新先开个坑~

2.4    IC法辅助分析

因子有效性是指因子是否可以获得持续、稳定的alpha收益。本部分主要使用IC分析及其衍生的指标对因子的有效性进行评估。

IC(信息系数)定义为每个时间截点上因子在各个股票的暴露度和股票下期收益的 pearson 或 spearman 相关系数,IC值越高意味着该因子的暴露度与未来收益率存在较明显的相关关系。

第一步,进行IC统计分析。

为了观察各因子与收益率是否有明显相关性,我们将比较IC值序列的均值大小(因子显著性)、标准差(因子稳定性)、IR比率(因子有效性),以及累积曲线(随时间变化效果是否稳定)这几方面对因子进行定性评价。其中,IR(信息比)是指残差收益率的年化预测值与其年化波动率之比,这里我们将之简化定义为因子在测试期间内IC的均值与IC的标准差的比值。

第二步,进行IC特征分析。

由于市场风格是会轮动的,IC值可能会切换正负号,所以在选择因子时会计算相关系数的正负比例,并选择比例高的方向。 作为假如同向显著比例占上风,则意味着该段时间内因子的风格延续性较强,可以使用动态权重来调整因子的权重;若状态切换比例占上风,对于因子的赋权应该使用静态权重。

衡量因子方向的指标一般有正相关显著比例、负相关显著比例、同向比例和状态切换比例。

第三步,IC时间序列分析

通过使用移动平均线,对各因子在一定时间内的趋势进行横向比较,同时参考当时的重大市场行情变化。

2.5    分层回测

按照因子大小对股票排序,将股票池均分为N个组合,或者对每个行业内进行均分。个股权重一般选择等权,行业间权重一般与基准(例如沪深300)的行业配比相同,此时的组合为行业中性。

通过分组累计收益图,就可以简单的知道因子是否和收益率有着单调递增或递减的关系。回测结果有很多评价标准,例如年化收益率、夏普比率、信息比率、最大回撤等。

三、大类因子合成

在经过前面的分析之后,我们已经筛选出与收益率有着显著关系的因子池。然而此时的因子们仍然是由我们主观定义的,它们互相之间可能存在着很强的相关性。如果不作处理,投资组合将在同种因子上暴露过多的风险,并且多重共线性会造成多元线性回归的结果偏差。

此部分内容可见帖子《多因子权重优化方法比较》

3.1    细分因子间相关性分析

因子相关性可由 pearson 和 spearman方法计算得出。除了普通的相关性分析之外,因子的IC值整体变化方向的表现对相关性也具有一定的说明性。

3.2    同种因子下的细分因子合成

提取细分因子的有效信息,并进行合成的方式主要三种:等权细分因子、利用PCA对高相关性因子进行降维、利用逐步回归筛选细分因子。不同的因子适合不同的合成方法,一般而言PCA适用于具有较强相关性的细分因子,但所得合成因子的经济意义可能不明显。

3.3    合成因子间相关性检验

在得到合成的大类因子之后,需要对它们进行相关性检验。由于此时的因子之间不再具有相似经济含义,如果出现明显相关性,则考虑对合成因子进行取舍,从而保证多因子模型不仅是经济含义方面或收益效果都能达到最优。

四、构造模型

经过一系列的筛选和分析后,现在已经得到最终的因子集。本篇在此部分以打分法为例,回归法的步骤将在之后的文章更新。在打分法中,我们将赋予各因子权重,以期符合选股预期或经济逻辑。此部分可参考《多因子权重优化方法比较》

4.1    确定因子权重

确定权重的方法有四种:

a.    各因子等权处理。缺点是未考虑各因子的有效性和稳定性差异。

b.    因子IC均值加权。此方法考虑到了因子有效性的差异,将在表现更显著的因子上分配更好的权重。

c.    IR_IC法加权。此方法根据收益风险这一基本准则,综合考虑到了因子有效性和稳定性。

d.    最大化复合因子IR。通过最大化多因子模型的IR来获得各因子的最优权重,并利用求解构造最佳多因子模型。此处可使用普通的协方差矩阵或者Ledoit-Wolf压缩方法得到协方差矩阵。

通常而言,方法四即使用压缩矩阵最大化复合IR的权重配置方式的选股结果表现最佳。

4.2    个股打分并筛选

在最开始的数据预处理中,已将各因子暴露度标准化,故可以通过权重算出个股的分值。根据打分后的结果,通常是按照一个比例(例如前30%),或者一个分值门槛作为筛选标准,买入评分高的股票。

此时可以通过简单的分配权重完成多因子模型构建,个股间的权重分配一般是等权,或者是按照市值大小进行加权得出。

五、组合优化

我们已经得到了打分法会使用到的基础数据,但这样很可能会出现我们不希望的情况,例如风险过多暴露在某一行业,所以需要对模型进行优化。

5.1    添加约束条件

如果单纯地采取等权买入,风险可能会过多地暴露在某一不被希望的方面。常见的约束条件如下:

a.    行业权重约束

b.    因子暴露约束

c.    个股上下限

d.    收益目标

e.    风险目标

其中最后两项一般用于回归法的多因子模型构建中。

5.2    二次规划求解权重

一般二次规划问题可以表示成如下形式:

其中:

H:需要求解的目标向量

Q:为最优化问题的二次项系数的对称半正定矩阵

c:为与线性目标方程有关的系数向量

A:为约束等式与非等式的系数矩阵

b:为约束值的向量矩阵

二次与线性最优化的问题都可以通过一般二次规划最优化程序来解决。对于线性最优化问题,只要令Q = 0,则问题变成一个线性规划问题。

由此,我们已经得到了添加各种约束后的个股权重,可以由此建立相应的多因子模型。

结语:

通过上文的五个步骤,我们建立了以打分法实现的多因子模型,而实际上大部分的工作量主要集中于确定有效因子这一步。多因子策略也可以配合卖空对应的股指期货进行套保。

我们有多种指标来衡量多因子模型的绩效结果,例如2.5中提到的最大回撤等。在我们米筐平台中提供了绩效分析入口,其展现了Brinson分析、风格分析、净值回归以及绩效指标的结果。我们可以通过此报告进一步分析模型的结果和表现,进行业绩归因。

注意,多因子模型的构建与测试时间有关,如其他模型一样,此模型需要定期进行验证检查,以达到理想效果。

参考文献:

《东方证券_20150909_因子选股系列研究之二:低特质波动,高超额收益》

《华泰单因子测试之波动率类因子》

《东方证券_20150626_因子选股系列研究之一:单因子有效性检验》

《华泰多因子系列之一:华泰多因子模型体系初探》

 

多因子模型系列目录

1.多因子模型系列1-数据预处理之离群值处理
当前阅读> 2. 多因子模型系列2-多因子模型的步骤梳理
3. 多因子模型系列3-Fama Franch三因子及其拓展五因子模型
4. 多因子模型系列4-验证Fama French三因子分解的有效性
5. 多因子模型系列5-套利定价模型的应用
6. 多因子模型系列6-沪深300指数的风格因子暴露度分析
7. 多因子模型系列7-多因子模型水平测试题试答
8. 多因子模型系列8-基于组合权重优化的风格中性多因子选股策略框架
9. 多因子模型系列9-阿里巴巴与101个alpha
10. 多因子模型系列10-因子分析
11. 多因子模型系列11-绩效分析之Brinson模型