数据挖掘学习之路四:Python去极值方法

1. MAD

#MAD(mean absolute deviation)又称为绝对值差中位数法,是一种先需计算所有因子与平均值之间的距离总和来检测离群值的方法.
#处理的逻辑:
#第一步,找出所有因子的中位数 Xmedian
#第二步:得到每个因子与中位数的绝对偏差值 Xi?Xmedian
#第三步:得到绝对偏差值的中位数 MAD
#第四步:确定参数 n,从而确定合理的范围为 [Xmedian?nMAD,Xmedian+nMAD],并针对超出合理范围的因子值做如下的调整
#超出最大值的用最大值代替,小于最小值的用最小值代替。

def filter_extreme_MAD(series,n): #MAD:中位数去极值
  median = series.quantile(0.5)
  new_median = ((series - median).abs()).quantile(0.50)
  max_range = median + n*new_median
  min_range = median - n*new_median
  return np.clip(series,min_range,max_range)

data6=Series([18,18,19,19,20,20,100])
data7 = filter_extreme_MAD(data6,7)
print(data7)

2. 3σ法

#3σ法又称为标准差法。标准差本身可以体现因子的离散程度,是基于因子的平均值 Xmean而定的。
#在离群值处理过程中,可通过用 Xmean±nσ来衡量因子与平均值的距离。
#标准差法处理的逻辑与MAD法类似:
#第一步:计算出因子的平均值与标准差
#第二步:确认参数 n(这里选定 n = 3)
#第三步:确认因子值的合理范围为 [Xmean?nσ,Xmean nσ],并对因子值作如下的调整:
#超出最大值的用最大值代替,小于最小值的用最小值代替。

def filter_extreme_3sigma(series,n=3): #3 sigma
  mean = series.mean()
  std = series.std()
  max_range = mean + n*std
  min_range = mean - n*std
  print(max_range)
  print(min_range)
  return np.clip(series,min_range,max_range)

data8 = filter_extreme_3sigma(data6)
print(data8)

3. 百分位法

#将因子值进行升序的排序,对排位百分位高于97.5%或排位百分位低于2.5%的因子值,进行类似于 MAD 、 3σ 的方法进行调整。

def filter_extreme_percentile(series,min = 0.10,max = 0.90): #百分位法
  series = series.sort_values()
  q = series.quantile([min,max])
  return np.clip(series,q.iloc[0],q.iloc[1])

data9 = filter_extreme_percentile(data6)
print(data9)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值