量化数据之异常值处理方法
发布时间:2023-05-30 06:53:06
数据处理是有效性分析中至关重要的一步。比如说有100个数其中的99个都在0-1区间范围内,但有一个突然达到了1000,我们能够明显的感受到这1000是一个异常值,它出现的概率是非常小的,但在数据分析的时候它严重的拉大了均值、标准差等数据,使我们没有办法对整个数据有一个正确的判断,所以为了得到更加有效的处理,我们在分析量化数据有效性之前,第一步要进行的就是异常数据处理。有下面几种异常值的处理方法。
1、固定比例法
固定比例法的想法是把数据从小到大排列,去掉最小和最大的固定比例数据在排除异常值。但是这种方法对历史数据较长的情况下可能不太可行,而且强行删除固定比例的数据反而会面临不太必要的信息损失。下面是去掉排位百分位高于97.5%或低于2.5%的示例代码。
2、三倍标准差法
三倍标准差法是对把数据的合理范围取在[μ−3σ,μ+3σ][,其中μ是均值,σ是标准差。这个方法的前提是数据为正态分布,在该分布下,99.73%的数据均会被包含在内。也就是说在三倍标准差之外发生的概率大概是千分之二到三,这在实际情况下也是合理的范围。但是该方法的缺点也是显而易见的,对于股票的数据来说大多都是尖峰厚尾的情况,而不符合正态分布,当我们再用正态分布的假设去处理数据可能会把过量的数据认定为异常点。同时我们注意到在计算合理范围时,用的均值和标准差都不是稳健统计量,其本身受极值的影响就非常大,所以可能会出现一种情况,那就是我们从数据分布图上能非常明显的看到异常点,但按照上面的方法,这个异常点可能仍在合理范围内。所以说三倍标准差法也是存在着一定的缺陷的。下面是3三倍标准差的示例代码。
3、MAD法(绝对中位数法,最常用)
MAD法是一种更为稳健的方法,它并不受正态分布的限制,也就是说对非正态分布的数据也是十分有效的。MAD 法是针对均值标准差方法的改进,把均值和标准差替换成稳健统计量,样本均值用样本中位数代替,样本标准差用样本MAD(Median Absolute Deviation)。计算方法为:
1、找出因子的中位数 median
2、得到每个因子值与中位数的绝对偏差值 |x – median|
3、得到绝对偏差值的中位数, MAD,median(|x – median|)
4、计算MAD_e = 1.4826*MAD,然后确定参数 n,做出调整
一般将偏离中位数三倍以上的数据作为异常值,和均值标准差法相比,其中位数和MAD不受异常值的影响。和三倍标准差方法相比,MAD法不受极端异常值的影响,结果是更加稳健的。现在大多数对异常值的处理方法都选择MAD法。
def mad(factor):
"""3倍中位数去极值
"""
# 求出因子值的中位数
med = np.median(factor)
# 求出因子值与中位数的差值,进行绝对值
mad = np.median(abs(factor - med))
# 定义几倍的中位数上下限
high = med + (3 * 1.4826 * mad)
low = med - (3 * 1.4826 * mad)
# 替换上下限以外的值
factor = np.where(factor > high, high, factor)
factor = np.where(factor < low, low, factor)
return factor
下一篇:关于AB款收益互换的初步理解