pandas_市值中性化(例子)

2023-11-24 17:20
文章标签 例子 pandas 市值 中性化

本文主要是介绍pandas_市值中性化(例子),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

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

这篇关于pandas_市值中性化(例子)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422290

相关文章

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

JavaFX环境的搭建和一个简单的例子

之前在网上搜了很多与javaFX相关的资料,都说要在Eclepse上要安装sdk插件什么的,反正就是乱七八糟的一大片,最后还是没搞成功,所以我在这里写下我搭建javaFX成功的环境给大家做一个参考吧。希望能帮助到你们! 1.首先要保证你的jdk版本能够支持JavaFX的开发,jdk-7u25版本以上的都能支持,最好安装jdk8吧,因为jdk8对支持JavaFX有新的特性了,比如:3D等;