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

相关文章

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等;

javaScript日期相加减例子

当前时间加上2天 var d = new Date(“2015-7-31”); d.setDate(d.getDate()+2); var addTwo=d.getFullYear()+”年”+(d.getMonth()+1)+”月”+d.getDate()+”日”; “控制台输出===============”+”当前日期加2天:”+addTwo; 使用这种方法,月份也会给你计算.

【Python从入门到进阶】64、Pandas如何实现数据的Concat合并

接上篇《63.Pandas如何实现数据的Merge》 上一篇我们学习了Pandas如何实现数据的Merge,本篇我们来继续学习Pandas如何实现数据的Concat合并。 一、引言 在数据处理过程中,经常需要将多个数据集合并为一个统一的数据集,以便进行进一步的分析或建模。这种需求在多种场景下都非常常见,比如合并不同来源的数据集以获取更全面的信息、将时间序列数据按时间顺序拼接起来以观察长期趋势等

设计模式大全和详解,含Python代码例子

若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 下面是设计模式的简要介绍和 Python 代码示例,涵盖主要的创建型、结构型和行为型模式。 一、创建型模式 1. 单例模式 (Singleton

JSP 简单表单显示例子

<html><!--http://localhost:8080/test_jsp/input.html --><head><meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"><title>input页面</title></head><body><form action="input.jsp" method