Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单因子测试(上)——因子中性化

单因子测试(上)——因子中性化

作者头像
量化小白
发布于 2019-01-22 07:23:51
发布于 2019-01-22 07:23:51
12.6K00
代码可运行
举报
运行总次数:0
代码可运行

之前做了很多因子测试的工作,但一直没有总结,感觉很凌乱,决定花时间把这部分东西写一写,温故知新,也为后续学习打基础。首先写一下单因子测试部分,分三篇,数据预处理一篇, 回归法一篇,分层测试法一篇。本篇首先说明多因子模型是什么,随后着重于单因子测试流程及数据预处理的细节,附代码。

01

因子模型概述

均值方差模型

马科维茨的均值方差组合模型是金融学中最著名的投资组合模型,模型想回答的问题是,当投资者需要进行投资决策时,对于市场上存在的证券,他该如何在这些证券上分配资金,简要叙述如下:

为市场上的n个证券,各证券期望收益率分别为

,投资者在各证券上的投资权重为

,收益率的协方差矩阵为

。则组合的期望收益率为

各资产的风险可以用资产收益的标准差衡量,则组合的风险可以表示为

从而投资者的最优决策可以为在一定风险水平下,最大化期望收益,或者在一定的期望收益水平下, 最小化风险,即

理论上来说,这个最优化问题是有解析解的,但实际应用中存在很多问题。 首先,实际情况下,预期收益率是不可知的,因此只能采用历史收益率代替期望收益率,每一期需要进行投资时,利用上一期的各证券收益率估计组合风险,求解优化问题得到最优组合的权重,进行当期投资,这样做的误差很大,因为用历史数据直接求协方差阵作为未来组合风险的估计量很不准确。 其次,模型中投资组合的风险计算需要估计组合中每个股票的波动率和两两相关系数,假设股票个数为N,那么都估计的参数个数为

,A股市场有超过3000只股票,如果用这种方法去算,需要估计的参数非常多,计算速度很慢,最终结果精度很低。 因此需要新的方法来优化这一模型。

结构化风险因子模型

对于均值方差模型的优化有多种方法,最广为人知的是结构化风险因子模型,简称多因子模型,多因子模型利用一组共同因子和一个特质因子解释各股票收益率的波动,共同因子对各个股票都有影响,特质因子只对特定股票有影响。 多因子模型将因子收益率分解为各因子收益率的线性组合:

其中r是股票j的收益率,u是股票j的特质因子收益率,

是K个共同因子的因子收益率,

是各共同因子在股票j上的因子暴露(因子值)。此外,因子值为第t期时,收益率值为t+1期,通过因子当期值,预测因子下一期的收益率。将上述因子收益率分解式带入均值方差模型中,可以得到,组合收益率为

假设各特质因子收益率不相关,特质因子收益率与共同因子收益率也不相关,组合协方差可以表示为

其中,X为n只股票在K个因子上的因子暴露矩阵(因子载荷阵),F为共同因子收益率的协方差阵,\Delta为特质因子收益率协方差阵,在上述假设下,特质因子收益率协方差阵为对角阵。 综上,就可以把对股票收益率协方差阵的计算转化到了对因子协方差阵的计算上。

为什么要做单因子测试

通过前面的分析,我们建立了从因子协方差阵到组合协方差阵的模型,只要选取的因子数目较小,就可以大大减少计算次数,提高计算速度,但并不是说随便选几个因子,做一个估计就可以效果很好。要提高计算精度,一方面在于对协方差阵的估计方法(这个后面学会了再写),另一方面在于因子的选择,garbage in ,garbage out,必须要选择可以准确刻画股票收益率的因子。因此,我们需要一套方法来评价因子,这就是做单因子测试的原因。

02

单因子测试方法综述

什么样的因子是好因子?

要评价因子好不好,我们要从因子定义和用法上出发。多因子模型中,将股票收益率解释为因子收益率的线性组合,组合的权重就是因子值,认为股票收益率受因子影响,那么一个好的因子就应该能较好解释股票收益率。模型上来说,较好解释股票收益率即就是模型的拟合程度高,因子显著性高。从这一角度出发,就引出了单因子测试的回归方法

这种方法侧重于对于已经得到的股票收益,分析它和因子值的相关性,用因子解释收益,但这样考虑是不够的,相关性并不是因果性,而且即使过去有相关性,并不代表未来也有相关性,预测性不强。如果一个因子是好因子,那么基于因子值筛选出来的股票,也应该表现良好,这样更能说明因子可以解释股票收益,从这一角度出发,就得到了单因子测试的分层测试法

实际应用中,两种方法各有优劣,有不同侧重点,配合使用比较好。具体流程在之后两篇文章中细讲,本文着重于单因子测试的第一步:因子预处理

03

因子预处理

因子预处理的过程即就是清洗数据的过程,一方面,因子中可能存在缺失值、异常值,不进行处理的话,单因子测试的结果是不准确的,需要进行因子标准化

以PB因子为例,取2018年7月10日A股市场所以股票的PB因子作图:

第一张图纵轴为PB值,横轴为股票编号,第二张图为PB的直方图和密度曲线。可以看出,绝大部分PB因子的值在0附近,但小部分取值十分异常,甚至上千,导致密度曲线严重拖尾。

另一方面,类似于计量经济学中所说的遗漏变量问题,当我们分析单个因子对于股票收益率的影响时,得到的结果里可能包含我们没有考虑到的因素造成的影响,这样得到的结果是有偏的。股票市场中不同市值、不同行业、不同风格的股票,对于因子的响应性不同,因此,在进行因子测试前,我们必须对因子进行处理,剔除掉因子中可能包含的其他因素,处理方法也与计量中的方法类似——加控制变量,这里叫做因子中性化,实际操作中,我们一般只考虑市值和行业造成的影响,对这两方面的处理分别称为市值中性化行业中性化

因子标准化

1. 缺失值处理 因子测试时,一般直接删掉缺失值,但在后续建模时,有时需考虑对缺失值进行填补,这里不必考虑。

2. 去极值 去极值一般有三种方法: 均值方差去极值:求出因子的均和标准,把位于

以外的值用边界值代替。 中位数去极值:计算因子的中位数med,定义因子的绝对中位数

即因子值减去中位数后的中位数。将位于med+3*1.4826MAD和med-3*1.4826MAD以外的数字用边界值代替

分位数去极值法:取因子序列的上下分位数,比如5%分位数和95%分位数,把位于分位数以外的数据用分位数代替。

3. 标准化 标准化一般采用zscore方法

因子中性化

1. 行业中性化 行业中性化有两种方法,一种是之前所说类似计量中加控制变量的方法,用因子值做因变量,用所属行业(申万行业、中信行业)虚拟变量做自变量进行OLS回归,用回归之后的残差值代替因子值。 另一种方法是对因子分行业进行标准化,即减去行业均值之后再除以行业标准差,可以证明,两种方法得到的结果是完全一样的。第一种方法的代码相对简单,并且可以和市值中性化一起进行,因此一般采用第一种方法。

2. 市值中性化 用因子值做因变量,市值做自变量(有时也取市值对数),进行回归,取残差。

一般将行业虚拟变量和市值同时放在自变量上进行回归,同时进行市值中性化和行业中性化,理论上可以证明,回归后的残差序列与自变量序列均正交,因此可以认为回归后的残差是因子剔除了行业和市值影响后的纯净的因子

这里附上用回归的方法做中性化的python代码,python的pandas包里有可以直接生成虚拟变量的函数,回归statsmodels包中也有函数,因此整个过程就变得非常简单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 是否行业中性
    if if_neutral_industry:
        indname = industry.unique()      # 获取行业名            
        class_var = pd.get_dummies(industry['industry'],columns=['industry'],prefix=['industry'],
                                   prefix_sep="_", dummy_na=False, drop_first=False)  
        class_var[indname[-1]] = 0

    # 是否市值中性
    if if_neutral_mktcap:

        # 提取总市值

        class_var['logmktcap'] = np.log(mktcap)

    data = pd.concat([data,class_var], axis=1)   
    if if_neutral_industry | if_neutral_mktcap:
        for j in data.columns:
            x = np.hstack((np.ones((len(data),1)),class_var.values))
            y = data.iloc[:,j].values
            model = sml.OLS(y,x)
            result=model.fit()
            data.iloc[:,j] = y -result.fittedvalues

结合前两幅图,对比pb因子标准化、中性化之后的分布图

可以看出,经过标准化和中心化之后,因子序列的分布已经正常了许多。

以上就是因子预处理的整个过程,但是经过上述处理的股票依然不能直接进行单因子测试,还需要对股票的范围进行限定,并非所有的股票都用来测试,需要删除停牌的股票,ST股新股,这些股票不剔除也会对测试结果造成影响。

做完上面的所有处理之后,就可以对因子进行单因子测试了,因子测试的两种方法之后两篇文章来写,同时也会把进行中性化和不进行中性化的测试结果进行对比。

文章为个人理解,有问题请指出,谢谢!

参考文献

1.国泰君安,数量化专题之五十七:基于组合权重优化的风格中性多因子选股策略 2.申万宏源-申万宏源多因子系列报告之一:因子测试框架及批量测试结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化小白躺平记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
是否需要对因子进行『行业中性化』处理?
量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,曾荣获AMMA优秀品牌力、优秀洞察力大奖,连续4年被腾讯云+社区评选为“年度最佳作者”。 来自:Financial Analysts Journal 标题:Is Sector Neutrality in Factor Investing a Mistake? 作者:Sina Ehsani、Campbell R. Harvey、Feifei Li
量化投资与机器学习微信公众号
2024/05/11
3820
是否需要对因子进行『行业中性化』处理?
单因子测试(中)——分层测试法
本文总结单因子测试的分层测试法。与回归法相比,分层测试法相对繁琐,但能展示更多细节。 分层测试法的思路是在统一的规则下, 利用单因子构建投资组合进行回测,然后对投资组合的表现进行全面评价,通过投资组合的表现说明因子的有效性。
量化小白
2019/01/22
9.4K0
101因子新测评,会有哪些新发现?
之前公众号分享过网友自行编写的WorldQuant 101因子源代码,大家有需要可以点击链接进行免费获取。
量化投资与机器学习微信公众号
2019/05/23
2.6K0
101因子新测评,会有哪些新发现?
单因子测试框架
SignalFactorAnalyse单因子测试框架哪些因子可以为组合提供超额收益?这是构建多因子模型的第一步,也是最关键一步。 特征选择非常关键,只有把握关键特征才能对数据达到重要性认识,选择好的因子,才能获取超额收益率。 对于传统交易经验、金融理论、微观市场、机器学习、深度学习等不断挖掘出来的巨量待验因子,一个快速且有效的因子测试框架,将是Multi-factor策略系统中最为关键的一环。 因子模型测试思路 因子有效性的判断与筛选: •备选因子确定: 数学意义、经济意义、统计意义 •预处理: 数据空缺与
企鹅号小编
2018/01/10
2.6K0
单因子测试框架
因子评估全流程详解
首先,这是一篇值得收藏的干货文。基本上覆盖到了因子评估的每个方面每个细节,小白友好型,很长,慢慢看。
量化小白
2023/04/03
5K1
因子评估全流程详解
单因子测试(下)——回归测试法
之前两篇分别总结了因子数据的预处理和单因子测试的分层测试法,本篇总结回归测试法,相较于分层测试法,回归测试法更简洁。
量化小白
2019/01/22
6.1K1
多因子尝试(一):因子加权方法在选股中的应用
之前在A股动量与反转的实证过程中,提到了因子择时和风格轮动的重要性,本篇算是对因子择时的一个小小的尝试,没有什么创新性,只是把现在比较传统的方法都拿来试了一遍,目前没有能力创造方法,只做方法的搬运工。
量化小白
2019/08/29
6.6K0
从零开始学量化(五):用Python做回归
回归作为数据分析中非常重要的一种方法,在量化中的应用也很多,从最简单的因子中性化到估计因子收益率,以及整个Barra框架,都是以回归为基础,本文总结各种回归方法以及python实现的代码。
量化小白
2019/07/10
8.2K0
动量因子30年
自从Jegadeesh和Titman(1993)验证了“买入过去收益较高的股票,卖出收益较低的股票“的交易策略能够带来显著的正收益,动量效应的提出至今已经有30多年。这种动量效应在各种资产类别和全球范围内都很强劲,这可能是对有效市场假说最直接的反驳。对投资者来说,动量是一种稳健、多变且有利可图的投资策略,这种策略已被共同基金、对冲基金和被动ETF广泛采用。对于金融研究来说,动量与Fama(1970)的弱形式有效市场假说存在显著矛盾。
量化投资与机器学习微信公众号
2023/04/20
1.4K0
动量因子30年
Barra系列(二):收益模型
不同国家的市场也是影响个股超额收益的因素之一,需要在收益模型中加入国家因子。为了让收益模型解唯一,约束市值加权的行业因子收益率之和为零。
量化小白
2020/02/25
2.4K0
因子的有效性分析基于7种机器学习算法【系列54】
今天,继续我们的机器学习应用量化投资系列。本期我们介绍一篇研究报告,详细的介绍了7中机器学习算法在因子有效性上的展现。希望给大家在写策略时做一些参考借鉴。 前言 逻辑依旧明了,机器学习并非黑箱 谈到机器学习,大家最忌讳的便是黑箱问题。其实不必,理解机器学习算法,逻辑实则简单,比如相同的因子特征将会有相同的表现。在实战中,我们发现, 该逻辑十分有效,在我们的机器学习选股模型中,该逻辑连续十几年不曾被打破。 Adaboost 最稳定,朴素贝叶斯收益最高 全市场选股,市值中性选股等权加权,行业中性选股等
量化投资与机器学习微信公众号
2018/03/20
2K0
因子的有效性分析基于7种机器学习算法【系列54】
【中国市场】2018第二季度因子表现,我都惊呆了!
Style Analytics是一家面向投资专业人士的独立全球软件提供商。Style Analytics之前被称为Style Research,拥有超过20年的因子分析经验,为30个国家的280多家投资机构提供服务。
量化投资与机器学习微信公众号
2018/10/25
6500
【中国市场】2018第二季度因子表现,我都惊呆了!
中国版四因子模型,加入情绪指标,6不6?
股票投资组合的收益率由何种因素决定?这个经典的问题,驱使着一代又一代的金融大师们,持续地对股票市场进行研究。最早的资本资产定价模型(CAPM模型)其实在1961年就有了雏形。
量化投资与机器学习微信公众号
2019/05/16
2.9K0
中国版四因子模型,加入情绪指标,6不6?
探寻量化Alpha:产业链提纯因子
量化策略中超额收益alpha的来源可以简单分为两部分(不考虑网下打新):pure alpha+风险风格收益。pure alpha,包括量价因子、基本面因子等,能够带来稳定的超额收益;风险风格收益由风险因子贡献,包括市场因子、市值因子、行业因子、成长因子等,收益的波动性非常大。
量化投资与机器学习微信公众号
2023/09/05
6360
探寻量化Alpha:产业链提纯因子
拒绝误杀!更有效的因子测试方法
在测试因子时,一般会对因子进行排序,并使用传统资产定价模型(如Fama因子模型)对Top组与Bottom组的收益差进行回归分析,如果显著产生了Fama模型不可解释的收益,就说明这个因子有效。
量化投资与机器学习微信公众号
2023/12/20
5050
拒绝误杀!更有效的因子测试方法
Man Group最新:动态风险管理在股票投资组合中的应用
今天公众号为大家分享一篇Man Group最新的研究文章,干货满满!重点在第四节~
量化投资与机器学习微信公众号
2020/12/08
1.3K0
Man Group最新:动态风险管理在股票投资组合中的应用
基于 RNN、LSTM 的股票多因子预测模型
前言 在机器学习如何应用到量化投资的系列文章中,今天我们专门来介绍一篇来自国信证券的研究报告,来从券商角度分析这个问题。 对于最直接的问题:能否利用神经网络,要机器自己识别 K 线图,自己做出判断,本篇推文的内容无法给出肯定的答案,但也不能否定其可能性,回答它需要更为深入、更为复杂的神经网络。本篇推文的目的是利用深度神经网络中的 RNN 的一些基本结果,对多因子模型进行尝试,以检验深度神经网络在多因子、投资领域的适用性,使得投资者能够对神经网络有 更为实践的理解,并能够在投资领域有所运用。 RNN简介 R
量化投资与机器学习微信公众号
2018/01/29
8.7K0
基于 RNN、LSTM 的股票多因子预测模型
多因子模型之因子(信号)测试平台----因子值的处理(二)
        我们知道,一个因子值的处理大致分为三个步骤,去极值、标准化、中性化,上次我们对因子值进行了去极值和标准化,这一次,我们主要讲一讲中性化,也就是neut。
钱塘小甲子
2019/01/28
1.4K0
多模型融合权重如何训练_单因子模型
本篇文章有别于传统的多因子研究,我们并未将重点放在阿尔法因子的挖掘上,而是通过对股票组合的权重优化计算,找到了在市值中性、行业中性、风格因子中性约束下的最优投资组合,以及验证得到的组合权重是否满足了约束条件。
全栈程序员站长
2022/11/08
1.1K0
多模型融合权重如何训练_单因子模型
浅谈指数增强
在说指数增强之前,首先要说明什么是指数。指数在各个领域中都广为应用,是一种重要的参考指标,比如衡量经济发展水平的GDP指数、反映消费水平/通胀水平的CPI指数、反映股票市场价格水平的价格指数等等。都是将大量个体的指标通过某种规则进行合成,用来反映整体的情况。
量化小白
2019/05/13
1.7K0
浅谈指数增强
相关推荐
是否需要对因子进行『行业中性化』处理?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验