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时间数据处理指南

《从基础到进阶详解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

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型