pandas_市值中性化(例子)

本文介绍了市值中性化处理在因子选股回测中的重要性,旨在消除因子与市值之间的相关性,防止选股集中。通过回归法去除市值影响,对2021-01-04的PB数据进行去极值、标准化处理,建立市值与市净率的回归方程,并计算出新的因子值。这种方法有助于得到更公正的选股结果。
摘要由CSDN通过智能技术生成

题目:

1. 对2021-01-04的PB数据做市值中性化处理

概念:

1. 为什么需要中性化处理?什么时候用?

市值中性化是为了在因子选股回测的时候,防止选到的股票集中在固定的某些股票当中

1.1 市值影响

默认大部分因子当中都包含了市值的影响,所以当我们通过一些指标选择股票的时候,每个因子都会提供市值的因素,选择的股票比较集中,也就是选股的标准不太好
比如:市净率会与市值有很高的相关性,这时如果我们使用未进行市值中性化的市净率,选股的结果会比较集中

2. 怎么去除市值影响

回归法
x为市值因子,y为某因子
通过拟合找到x,y的关系公式,预测的时候会出现偏差?这个偏差是什么?
这个偏差即为保留下来的某因子去除市值影响的部分
from sklearn.linear_model import LinearRegression
把市值设置成特征,市值不进行任何处理
将其他因子设置成目标值

开始对2021-01-04的PB数据做市值中性化处理

步骤:

1). 获取两个因子数据
2). 对目标值因子-市净率进行去极值、标准化处理
3). 建立市值与市净率回归方程
4). 通过回归系数,预测新的因子结果y_predict
5). 求出市净率与y_predict的偏差即为新的因子值

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
df_pb_20210104 = pd.read_csv('./pe_20210104.csv',encoding='utf-8')
df_pb_20210104 = df_pb_20210104.loc[:,['secID','tradeDate','marketValue','PB']]
df_pb_20210104.head()

# 自实现3倍中位数绝对偏差去极值
def mad(factor):
    me = np.median(factor)
    mad = np.median(abs(factor-me))
    # 求出3倍中位数的上下限制
    up = me + (3*1.4826*mad)
    down = me - (3*1.4826*mad)
    # 利用3倍中位数的值去极值
    factor = np.where(factor>up,up,factor)
    factor = np.where(factor<down,down,factor)
    return factor
# 自实现标准化
def stand(factor):
	mean = factor.mean()
	std = factor.std()
	return (factor-mean)/std
# 去极值、标准化处理
df_pb_20210104['PB'] = mad(df_pb_20210104['PB'])
df_pb_20210104['PB'] = stand(df_pb_20210104['PB'])
df_pb_20210104.head()

x = df_pb_20210104['marketValue'].to_frame()
y = df_pb_20210104['PB']
lr = LinearRegression()
lr.fit(x,y)
# 系数
lr.coef_
# out: array([1.10081294e-12])
lr.intercept_
# out: -0.023430808229169507
y_predict = lr.predict(x)
y_predict

# 得出每个预测值,让因子的真实值-预测值得出的误差,就为我们中性化处理之后的结果
df_pb_20210104['pb_00'] = df_pb_20210104['PB']-y_predict
df_pb_20210104.head()

 PS:

所使用的数据

链接:https://pan.baidu.com/s/11GubyLR2ZkuiXhyk5n6MzA 
提取码:n14t

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值