多因子模型 —— 因子正交化处理

多因子模型 —— 因子正交化处理Whydothis 传统的多因子模型处理共线性的方法 如 IC 加权 IR 加权 ICIR 加权等 都以 IC 值为基础确定各因子在模型中的权重 而 IC 是当期因子暴露与下一期收益间的相关系数 传统方法的缺陷是 如果因子间存在较强的相关性 通过上述加权方式 最终会导致因子对于某种风格的因子重复暴露 使得整个组合的表现严重偏向于该因子 削弱其他因子的效果 具体来说 当因子表现好时 组合会获得更高的

Why do this?

传统的多因子模型处理共线性的方法,如IC加权、IR加权,ICIR加权等,都以IC值为基础确定各因子在模型中的权重。而IC是当期因子暴露与下一期收益间的相关系数。

传统方法的缺陷是:如果因子间存在较强的相关性,通过上述加权方式,最终会导致因子对于某种风格的因子重复暴露。使得整个组合的表现严重偏向于该因子,削弱其他因子的效果。

具体来说,当因子表现好时,组合会获得更高的超额收益,当因子表现不好时,会出现更大幅的回撤。

这个时候,便需要采取因子正交处理的方式解决此问题。

What is 正交化?

正交化目的是消除因子间的相关性,并保持因子对于收益的解释度不变。

How?

1.import package

from atrader import * import numpy as np import pandas as pd import matplotlib.pyplot as plt import math import statsmodels.api as sm import datetime as dt import scipy.stats as stats import seaborn as sns

2.因子标准化

# Z-Score标准化 def standardize_z(dt): mean = dt.mean() # 截面数据均值 std = dt.std() # 截面数据标准差 return (dt - mean)/std # 获取截面因子数据,单日多标的多因子 names = ['REVS60','REVS120','BIAS60','CCI20','PVT','MA10Close','DEA','RC20','RSTR63','DDI'] factors = get_factor_by_day(factor_list= names, target_list=list(get_code_list('hs300').code), date='2019-05-31') factors = factors.set_index('code').fillna(0)

3. 计算过渡矩阵

factors_standardize = standardize_z(factors) # 标准化 M = (factors_standardize.shape[0]-1)* np.cov(factors_standardize.T.astype(float)) # 矩阵M D,U = np.linalg.eig(M) # 获取特征值和特征向量 U = np.mat(U) # 转换为np中的矩阵 d = np.mat(np.diag(D(-0.5))) # 对特征根元素开(-0.5)指数 S = U * d * U.T # 获取过度矩阵S

4.获取对称正交矩阵

factors_orthogonal_mat = np.mat(factors_standardize) * S # 获取对称正交矩阵 factors_orthogonal= pd.DataFrame(factors_orthogonal_mat,columns = names,index=factors_standardize.index) # 矩阵转为dataframe

5.正交化前后因子相关性检验

# 因子相关性 F_o = factors_orthogonal.fillna(0).corr() # 正交化后的因子相关性 F = factors.fillna(0).corr() # 正交化前的因子相关性 # 相关性画图 fig = plt.figure() plt.subplots(figsize=(8, 6.4)) # 设置画面大小 sns.heatmap(F, annot=True, vmax=1, vmin=-1, square=True, cmap="CMRmap_r",) plt.show() plt.subplots(figsize=(8, 6.4)) # 设置画面大小 sns.heatmap(F_o, annot=True, vmax=1, vmin=-1, square=True, cmap="CMRmap_r",) plt.show()

多因子模型 —— 因子正交化处理

多因子模型 —— 因子正交化处理

6.正交化前后因子相关性

# 正交化前后的因子相关性 corr = list() for i in range(factors.shape[1]): c = factors_standardize.iloc[:,i].astype(float).corr(factors_orthogonal.iloc[:,i].astype(float)) corr.append(c) # 获取正交前后因子的相关性 corr_df = pd.DataFrame(np.asarray(corr).T,index=names,columns=['corr']) # 转为DataFrame corr_mean = corr_df.mean() print(corr_df)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218219.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午7:47
下一篇 2026年3月18日 上午7:47


相关推荐

  • fastclick.js

    fastclick.js;(function(){‘usestrict’;/***@preserveFastClick:polyfilltoremoveclickdelaysonbrowserswithtouchUIs.**@codingstandardftlabs-jsv2*@copyrightTheFinancia

    2022年6月19日
    26
  • 响应式久草编程基础教程:久草Spring Boot 与 Lettuce 在线整合「建议收藏」

    响应式久草编程基础教程:久草Spring Boot 与 Lettuce 在线整合「建议收藏」本文主要介绍响应式编程访问Redis,以及SpringBoot与Lettuce的整合使用。Lettuce是可扩展性线程安全的Redis客户端,用于同步、异步和响应式使用。如果多个线程避免阻塞和事务性操作(例如BLPOP和MULTI/EXEC),则它们可以共享一个连接。Lettuce是基于Netty构建的。支持很多高级的Redis特性。根据SpringDataRedis2.0的更新的消息显示,SpringDataRedis不再支持JRedis的驱动,

    2022年10月19日
    2
  • Redis过期键的删除策略[通俗易懂]

    文章目录立即删除惰性删除定时删除Redis使用的策略Redis中有个设置时间过期的功能,即对存储在redis数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的token或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。我们setkey的时候,都可以给一个expir…

    2022年4月10日
    60
  • poetry下载_烘手器安装

    poetry下载_烘手器安装介绍Poetry是Python中的依赖管理和打包工具,当然它也可以配置虚拟环境。它允许您声明项目所依赖的库,并为您管理(安装/更新)它们。之前一直使用virtualenvwrapper管理虚拟

    2022年7月30日
    8
  • linux tty0_linuxtty中文

    linux tty0_linuxtty中文创建iso目录作为制作LiveCD的根的目录,并在其中创建grub所需的目录#mkdir-pviso/{ttylinux,boot}#mkdir–pviso/boot/grub#cp-rv/usr/share/grub/i386-redhat/*iso/boot/grub将下载到的ttylinuxiso镜像文件挂载至某目录,并复制文件#mount-oloop/root/…

    2022年8月12日
    9
  • serv-u搭建ftp服务器心得_U服务

    serv-u搭建ftp服务器心得_U服务1、先安装好Serv-U,并作为系统服务安装2、打开Serv-U,新建一个域3、添加用户4、解决阿里云专有网络的一个问题遇到一个情景:需要使用Serv-U进行FTP更新软件,其中使用PASV的连接方式,这种方式客户要求连接FTP的时候,Serv-U会随机产生一个端口发送给客户端,告诉客户端通过这个端口来发送文件;而阿里云专有网…

    2025年10月31日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号