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数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

pandas DataFrame keys的使用小结

《pandasDataFramekeys的使用小结》pandas.DataFrame.keys()方法返回DataFrame的列名,类似于字典的键,本文主要介绍了pandasDataFrameke... 目录Pandas2.2 DataFrameIndexing, iterationpandas.DataF

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb