因子数据预处理-去极值和标准化

news2024/10/7 16:15:06
一. 去极值

因子数据中过大或过小的值会影响分析结果,特别是在回归时,离群值会严重影响因子和收益率之间的相关性估计结果。

因子去极值的处理方法:

  1. 确定上下限
  2. 将上下限外的数据修改为上下限值

常见的去极值方法有三种,分别是MAD法,3 σ \sigma σ法,百分位法

1. MAD法

处理步骤:

  1. 找出所有因子的中位数 F m e d i a n F_{median} Fmedian
  2. 得到每个因子与中位数的绝对偏差值 ∣ F i − F m e d i a n ∣ |F_i - F_{median}| FiFmedian
  3. 得到绝对偏差值的中位数 M A D MAD MAD
  4. 确定阈值参数 n n n,对超出范围 [ F m e d i a n − n ∗ M A D , F m e d i a n + n ∗ M A D ] [F_{median} - n * MAD, F_{median} + n * MAD] [FmediannMAD,Fmedian+nMAD]的因子值做调整
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import baostock as bs

def get_hs300_stocks():
    lg = bs.login()
    
    # 获取沪深300成分股
    rs = bs.query_hs300_stocks()
    hs300_stocks = []
    while (rs.error_code == '0') & rs.next():
        hs300_stocks.append(rs.get_row_data())
    
    # 获取沪深300成分股数据
    result = pd.DataFrame()
    for element in hs300_stocks:
        print(element[1])
        rs = bs.query_history_k_data_plus(element[1], "code,peTTM, pbMRQ",
    start_date='2024-03-29', end_date='2024-03-29',frequency="d", adjustflag="3")

        #### 打印结果集 ####
        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
    
        result = result.append(pd.DataFrame(data_list), ignore_index=True)
        
    result.columns = ['code','pe', 'pb']
    result['pe'] = result['pe'].astype('float64')
    result['pb'] = result['pb'].astype('float64')
    
    result.set_index('code', inplace=True)
    
    return result
# 获取沪深300所有成分股2024-02-29的市盈率和市净率
factor_data = get_hs300_stocks()
# MAD去极值
def extreme_mad(factor, n):
    median = factor.quantile(0.5)
    mad = (factor - median).abs().quantile(0.5)
    upper = median + mad * n
    lower = median - mad * n
    
    return factor.clip(lower = lower, upper = upper, axis = 1)
# 对比用MAD法去极值后与原始数据的数据分布
fig, ax = plt.subplots(figsize = (10, 8))
factor_data['pe'].plot(kind = 'kde',label='pe')
extreme_mad(factor_data, 5)['pe'].plot(kind = 'kde', label = 'pe_mad')
ax.legend()

在这里插入图片描述

2. 3 σ \sigma σ

处理步骤:

  1. 计算出因子的平均值 m e a n mean mean与标准差 δ \delta δ
  2. 确定阈值参数 n n n(默认为3),对超出范围 [ m e a n − n δ , m e a n + n δ ] [mean - n\delta, mean + n\delta] [meannδ,mean+nδ]的因子值做调整
# 3 sigma法
def extreme_nsigma(factor, n):
    mean = factor.mean()
    std = factor.std()
    
    upper = mean + n * std
    lower = mean - n * std
    
    return factor.clip(lower = lower, upper = upper, axis = 1)
# 对比用3 sigma法去极值后与原始数据的数据分布
fig, ax = plt.subplots(figsize = (10, 8))
factor_data['pe'].plot(kind = 'kde',label='pe')
extreme_nsigma(factor_data, 3)['pe'].plot(kind = 'kde', label = '3sigma_pe')
ax.legend()

在这里插入图片描述

3. 百分位法

处理步骤:

  1. 找出因子值的上限分位数和下限分位数(一般为97.5%和2.5%)
  2. 对大于上限分位数和小于下限分位数的因子值进行调整
# 百分位数去极值
def extreme_percentage(factor, lower_pencentage, upper_percentage):
    lower = factor.quantile(lower_pencentage)
    upper = factor.quantile(upper_percentage)
    
    return factor.clip(upper = upper, lower = lower, axis = 1)
# 对比用百分位法去极值后与原始数据的数据分布
fig, ax = plt.subplots(figsize = (10, 8))
factor_data['pe'].plot(kind = 'kde',label='pe')
extreme_percentage(factor_data, 0.025, 0.975)['pe'].plot(kind = 'kde', label = 'percent_pe')
ax.legend()

在这里插入图片描述

二. 标准化

一般不同因子数据的量纲和数量级可能会存在较大的差别,比如市盈率和成交量这两个因子之间会差好几个数量级,这样会放大数值大的因子,削弱数值小的因子。因此需要对因子数据进行标准化处理。

经过标准化处理后,因子数据会出现如下变化

  • 原始数据从有量纲数据转换为无量纲数据,
  • 各指标数据处于同一数量级上,数据更加集中
  • 不同的指标能够进行比较和回归,可以进行综合测评分析
1. Z-score法

处理步骤:

  1. 计算因子的均值和标准差
  2. 因子值减去均值后再除以标准差得到的值即是标准化后的因子值
def standlize_z(factor):
    mean, std = factor.mean(), factor.std()
    
    return (factor - mean) / std
fig, ax = plt.subplots(figsize = (10, 8))
extreme_mad(factor_data, 5)['pe'].plot(kind = 'kde',label='pe_mad')
standlize_z(extreme_mad(factor_data, 5))['pe'].plot(kind = 'kde', label = 'pe_standlize')
ax.legend()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT使用数据库

数据库就是保存数据的文件。可以存储大量数据,包括插入数据、更新数据、截取数据等。用专业术语来说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。 什么时候需要数据库?在嵌入式里,存储大量数据,或者记录数…

【已解决】Out of memory interning an attribute name

问题描述:pycharm运行程序时报错 Out of memory interning an attribute name 原因分析:pycharm预设内存不足 解决办法:打开pycharm文件所在位置,打开pycharm64.exe.vmoptions配置文件,调整Xmx的大小。

关系(二)利用python绘制热图

关系(二)利用python绘制热图 热图 (Heatmap)简介 热图适用于显示多个变量之间的差异,通过颜色判断彼此之间是否存在相关性。 快速绘制 基于seaborn import seaborn as sns import pandas as pd import numpy as np i…

【JavaSE】解密 继承和多态(下)

前言 紧接着上篇 解密继承和多态(上)~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 protected关键字 在同一包下同一类可以访问 代码理解 在同一包下不同类可以访问 代码理解 …

【性能测试】接口测试各知识第1篇:接口测试,学习目标【附代码文档】

接口测试完整教程(附代码资料)主要内容讲述:接口测试,学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标,RESTFUL1. 理解接口的概念,2.什么是接口测试…

ZYNQ学习之Ubuntu下Linux文件系统、用户权限与磁盘管理

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Linux 文件系统 1.1 Linux 文件系统简介以及类型 操作系统的基本功能之一就是文件管…

JS详解-fetch核心语法

document.querySelector(.btn).addEventListener(click,async () > {const p new URLSearchParams({pname:浙江省,cname:杭州市})//1、如何请求&#xff1f;默认为get&#xff0c;参数1 url地址&#xff0c;返回promiseconst res await fetch(http://hmajax.itheima.net/…

AI提速 OpenAI 新模型GPT-5今年上线?

这两天&#xff0c;有关OpenAI新模型 GPT-5的消息又多了起来。有知情人士称&#xff0c;OpenAI将在今年年中的某个时候发布GPT-5&#xff0c;很可能是在今年夏天期间。OpenAI CEO 萨姆奥特曼在一次播客采访中透露“GPT-5的智能水平得到提升”。 有趣的是&#xff0c;播客的主理…

JavaScript库,编写$()和getElementsByClassName()方法

背景: JavaScript库是一组预先编写好的JavaScript代码集合&#xff0c;旨在简化常见的网页开发任务。这些库通常包含了许多函数和方法&#xff0c;可以帮助开发人员处理各种任务&#xff0c;比如DOM操作、事件处理、动画效果、AJAX请求等等。使用JavaScript库可以节省开发时间…

如何借助AI工具轻松绘制思维导图

前言 思维导图是一种将思维可视化的工具&#xff0c;它可以帮助我们理清思路、提高效率、促进记忆。传统的思维导图绘制方法需要一定的时间和技巧&#xff0c;而借助AI工具&#xff0c;我们可以轻松绘制思维导图&#xff0c;并将更多时间和精力集中在内容本身。 借助AI工具把…

网络以太网之(2)VLAN协议

网络以太网之(1)VLAN协议 Author: Once Day Date: 2024年4月1日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day…

输出100~200之间的素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现素数判断函数&#xff1b; int Prime(int number) {//初始化变量值&#xff1b;int divided 2;int JudgementCondition 0;//循环判断素数&#xff1b;wh…

基于SpringBoot+微信小程序的外卖跑腿点餐(订餐)系统设计与实现+毕业论文(12000字)

介绍 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot致力于在蓬勃发展的快速应…

美联储,非必要,不降息

美联储“没必要、没空间、没动力”降息&#xff0c;也会尽量避免货币政策干扰大选&#xff0c;用“口头降息”代替实际调整是现实选择&#xff0c;市场降息预期将继续推迟和下调。 前言&#xff1a; 当前美国经济从各个方面看均并未表现出疲态——新增就业持续修复&#xff0c;…

俄罗斯Yandex广告推广如何开户及费用?

作为俄罗斯首屈一指的搜索引擎&#xff0c;Yandex凭借其超过60%的市场份额&#xff0c;成为企业进入俄罗斯、触及俄语消费者的关键入口。然而&#xff0c;对于不熟悉当地市场环境与网络营销规则的企业而言&#xff0c;成功开户并高效运营Yandex广告并非易事。云衔科技凭借专业的…

大模型量化技术-AWQ

大模型量化技术-AWQ 在2023年6月,Ji Lin等人发表了论文AWQ:Activation-aware Weight Quantization for LLM Compression and Acceleration。 这篇论文详细介绍了一种激活感知权重量化算法,可以用于压缩任何基于 Transformer 的语言模型,同时只有微小的性能下降。关于 AWQ 算…

2024 年云繁荣:驾驭人工智能驱动转型浪潮

在人工智能革命的核心&#xff0c;2024 年见证了云计算应用的空前激增。云计算的繁荣不仅仅是异地存储数据&#xff0c;而是创建动态的智能基础设施&#xff0c;推动人工智能的指数级增长。让我们深入探讨推动这一现象的关键因素和趋势。 01 人工智能和云&#xff1a;共生关系…

Mac上怎么合并多张图片?

Mac上怎么合并多张图片&#xff1f;上班过的小伙伴都应该知道&#xff0c;合并拼接图片是一件非常重要且经常需要使用到的图片处理技术&#xff0c;将多张图片合并拼成一张之后能够展现出更多的图片内容。在Mac电脑上&#xff0c;合并多张图片是一项常见的任务&#xff0c;无论…

鸿蒙OS开发实例:【ArkTS类库多线程@Concurrent装饰器校验并发函数】

在使用TaskPool时&#xff0c;执行的并发函数需要使用该装饰器修饰&#xff0c;否则无法通过相关校验。从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 装饰器说明 Concurrent并发装饰器说明装饰器参数无。使用场景仅支持在Stage模型的工程中使用。装饰的函…

2024最新软件测试【测试理论+ 接口测试】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; …