本文主要是介绍量化数据预处理:去极值、标准化、中性化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对于量化研究而言,拿到一份基础数据,首先需要对数据做预处理,以便于更好的探究数据规律,基于不同目标有不同处理环节,其中去极值、标准化、中性化这三点经常被放在一起讨论。整理网络资料,理解如下。
-
去极值
数据(单个因子的时间序列数据)中存在异常值,可能会导致拉大标准差、拉偏统计规律…
常规处理理念就是确定此数据指标(比如某个因子)的上下限阈值,然后超过(或低于)此限度的数据均设置为阈值,以提高数据结论的准确性。
上下限的判定方法有三种: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} Xi−Xmedian
-
计算绝对偏差值的中位数 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] [Xmedian−n∗MAD,Xmedian+n∗MAD],针对超出合理范围的值做如下调整:
X i ′ = { X m e d i a n + n ∗ M A D        i f    X i > X m e d i a n + n ∗ M A D X m e d i a n − n ∗ M A D        i f    X i < X m e d i a n − n ∗ M A D X i                                                              i f    X m e d i a n − n ∗ M A D < X i < X m e d i a n + n ∗ M A D X_i'=\begin{cases}X_{median}+n*MAD\;\;\;if \;X_i>X_{median}+n*MAD\\X_{median}-n*MAD\;\;\;if\;X_i<X_{median}-n*MAD \\ X_i\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;if \;X_{median}-n*MAD<X_i<X_{median}+n*MAD \end{cases} Xi′=⎩⎪⎨⎪⎧Xmedian+n∗MADifXi>Xmedian+n∗MADXmedian−n∗MADifXi<Xmedian−n∗MADXiifXmedian−n∗MAD<Xi<Xmedian+n∗MAD
# 代码实现 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] [Xmean−n∗σ,Xmean+n∗σ],并对因子值做如下的调整:
X i ′ = { X m e a n + n ∗ σ        i f    X i > X m e a n + n ∗ σ X m e a n − n ∗ σ        i f    X i < X m e a n − n ∗ σ X i                                                              i f    X m e a n − n ∗ σ < X i < X m e a n + n ∗ σ X_i'=\begin{cases}X_{mean}+n*\sigma\;\;\;if \;X_i>X_{mean}+n*\sigma\\X_{mean}-n*\sigma\;\;\;if\;X_i<X_{mean}-n*\sigma \\ X_i\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;if \;X_{mean}-n*\sigma<X_i<X_{mean}+n*\sigma \end{cases} Xi′=⎩⎪⎨⎪⎧Xmean+n∗σifXi>Xmean+n∗σXmean−n∗σifXi<Xmean−n∗σXiifXmean−n∗σ<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]之间。
归一化是标准化的特例,标准化是特征缩放的特例。
数据标准化的具体方法:
-
最小-最大标准化(Min-max normalization)离差标准化
Min-max normalization又称为离差标准化,是常见的归一化处理
-
获取因子值最大值max,最小值min;
-
对数据进行线性变化
y i = x i − m i n 1 ≤ j ≤ n { x j } m a x 1 ≤ j ≤ n { x j } − m i n 1 ≤ j ≤ n { x j } y_i=\frac{x_i-min_{1\leq j \leq n}\{x_j\}}{max_{1\leq j \leq n}\{x_j\}-min_{1\leq j \leq n}\{x_j\}} yi=max1≤j≤n{xj}−min1≤j≤n{xj}xi−min1≤j≤n{xj}
-
-
Z-score标准化
标 准 化 后 数 据 = 原 始 数 据 − 单 个 指 标 内 所 有 值 的 均 值 单 个 指 标 内 所 有 值 的 标 准 差 标准化后数据=\frac{原始数据-单个指标内所有值的均值}{单个指标内所有值的标准差} 标准化后数据=单个指标内所有值的标准差原始数据−单个指标内所有值的均值
# 代码实现 def standard_z_score(series):std = series.std()mean = series.mean()return (series-mean)/std
-
按小数定标标准化
-
-
中性化
中性化目的:为了在用某一个因子时能剔除其他因素的影响,使得选出的股票更加分散。相比而言,标准化使不同量级指标之间需要互相比较或者数据需要变得集中。
主要处理方式为:利用回归得到一个与风险因子线性无关的因子。即通过简历线性回归,提取残差作为中性化后的新因子。这样处理后的中性化因子与风险因子之间的相关性严格为零。
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=βM∗ln(MktVali)+j=1∑nβj∗Industryj,i+ϵi
- 1行代码完成去极值、标准化、行业与市值中性化—以pb因子为例
- 数据处理专题:去极值、标准化、中性化
- Wikipedia Feature scaling
- Wikipedia Normalization (statistics)
这篇关于量化数据预处理:去极值、标准化、中性化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!