量化数据预处理:去极值、标准化、中性化

2024-03-30 09:58

本文主要是介绍量化数据预处理:去极值、标准化、中性化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于量化研究而言,拿到一份基础数据,首先需要对数据做预处理,以便于更好的探究数据规律,基于不同目标有不同处理环节,其中去极值、标准化、中性化这三点经常被放在一起讨论。整理网络资料,理解如下。

  • 去极值

    数据(单个因子的时间序列数据)中存在异常值,可能会导致拉大标准差、拉偏统计规律…

    常规处理理念就是确定此数据指标(比如某个因子)的上下限阈值,然后超过(或低于)此限度的数据均设置为阈值,以提高数据结论的准确性。

    上下限的判定方法有三种:MAD、 3 σ 3\sigma 3σ法、百分位法。

    • MAD(Median Absolute Deviation, 绝对值差中位数法)

      MAD,先计算所有因子与平均值之间的距离总和来检测离群值。

      • 计算所有因子的中位数 X m e d i a n X_{median} Xmedian
      • 计算每个因子与中位数的绝对偏差值 X i − X m e d i a n X_i-X_{median} XiXmedian
      • 计算绝对偏差值的中位数 M A D MAD MAD
      • 确定参数 n n n,从而确定合理的范围为 [ X m e d i a n − n ∗ M A D , X m e d i a n + n ∗ M A D ] [X_{median}-n*MAD,X_{median}+n*MAD] [XmediannMAD,Xmedian+nMAD],针对超出合理范围的值做如下调整:

        X i ′ = { X m e d i a n + n ∗ M A D &ThickSpace;&ThickSpace;&ThickSpace; i f &ThickSpace; X i &gt; X m e d i a n + n ∗ M A D X m e d i a n − n ∗ M A D &ThickSpace;&ThickSpace;&ThickSpace; i f &ThickSpace; X i &lt; X m e d i a n − n ∗ M A D X i &ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace; i f &ThickSpace; X m e d i a n − n ∗ M A D &lt; X i &lt; X m e d i a n + n ∗ M A D X_i&#x27;=\begin{cases}X_{median}+n*MAD\;\;\;if \;X_i&gt;X_{median}+n*MAD\\X_{median}-n*MAD\;\;\;if\;X_i&lt;X_{median}-n*MAD \\ X_i\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;if \;X_{median}-n*MAD&lt;X_i&lt;X_{median}+n*MAD \end{cases} Xi=Xmedian+nMADifXi>Xmedian+nMADXmediannMADifXi<XmediannMADXiifXmediannMAD<Xi<Xmedian+nMAD

      # 代码实现
      def mad(series,n):median = series.quantile(0.5)diff_median = ((series - median).abs()).quantile(0.5)max_range = median + n * diff_medianmin_range = median - n * diff_medianreturn np.clip(series, min_range, max_range)
    • 3 σ 3\sigma 3σ

      3 σ 3\sigma 3σ法又称为标准差法。

      标准差本身可以体现因子的离散程度,是基于因子的平均值 X m e a n X_{mean} Xmean而定的。可以通过 X m e a n ± n ∗ σ X_{mean}\pm n*\sigma Xmean±nσ来衡量因子与平均值的距离。

      • 计算出因子的平均值与标准差;

      • 确认参数 n n n;

      • 确认因子值的合理范围为 [ X m e a n − n ∗ σ , X m e a n + n ∗ σ ] [X_{mean}-n*\sigma,X_{mean}+n*\sigma] [Xmeannσ,Xmean+nσ],并对因子值做如下的调整:
        X i ′ = { X m e a n + n ∗ σ &ThickSpace;&ThickSpace;&ThickSpace; i f &ThickSpace; X i &gt; X m e a n + n ∗ σ X m e a n − n ∗ σ &ThickSpace;&ThickSpace;&ThickSpace; i f &ThickSpace; X i &lt; X m e a n − n ∗ σ X i &ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace; i f &ThickSpace; X m e a n − n ∗ σ &lt; X i &lt; X m e a n + n ∗ σ X_i&#x27;=\begin{cases}X_{mean}+n*\sigma\;\;\;if \;X_i&gt;X_{mean}+n*\sigma\\X_{mean}-n*\sigma\;\;\;if\;X_i&lt;X_{mean}-n*\sigma \\ X_i\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;if \;X_{mean}-n*\sigma&lt;X_i&lt;X_{mean}+n*\sigma \end{cases} Xi=Xmean+nσifXi>Xmean+nσXmeannσifXi<XmeannσXiifXmeannσ<Xi<Xmean+nσ

      # 代码实现
      def three_sigma(series,n):mean = series.mean()std = series.std()max_range = mean + n * stdmin_range = mean - n * stdreturn np.clip(series, min_range, max_range)
      
    • 百分位法

      将因子值进行升序排列,对排位百分位高于97.5%或低于2.5%的因子值,进行类似于MAD、 3 σ 3\sigma 3σ的操作。

      # 代码实现
      def percentile(series, min= 0.025, max= 0.975):series = series.sort_values()q = series.quantile([min, max])return np.clip(series, q.iloc[0], q.iloc[-1])
      
  • 标准化

    对于多因子策略,不同因子的量纲和数量级不同,为实现不同指标的可加性,需要对原始指标数据进行标准化处理。

    数据标准化方法分类:

    数据标准化处理主要包括:

    数据标准化原理是将数据按比例缩放,使所有数据落入一个小的特定区间。最常见的就是归一化,将数据统一映射到[0,1]之间。

    归一化是标准化的特例,标准化是特征缩放的特例。

    数据标准化的具体方法:

  • 中性化

    中性化目的:为了在用某一个因子时能剔除其他因素的影响,使得选出的股票更加分散。相比而言,标准化使不同量级指标之间需要互相比较或者数据需要变得集中。

    主要处理方式为:利用回归得到一个与风险因子线性无关的因子。即通过简历线性回归,提取残差作为中性化后的新因子。这样处理后的中性化因子与风险因子之间的相关性严格为零。
    F a c t o r i = β M ∗ l n ( M k t V a l i ) + ∑ j = 1 n β j ∗ I n d u s t r y j , i + ϵ i Factor_i=\beta_M*ln(MktVal_i)+\sum^n_{j=1}\beta_j*Industry_{j,i}+\epsilon_i Factori=βMln(MktVali)+j=1nβjIndustryj,i+ϵi


  • Reference

  1. 1行代码完成去极值、标准化、行业与市值中性化—以pb因子为例
  2. 数据处理专题:去极值、标准化、中性化
  3. Wikipedia Feature scaling
  4. Wikipedia Normalization (statistics)

这篇关于量化数据预处理:去极值、标准化、中性化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本