分享

IQR剔除极值

 吴敬锐 2019-07-07

很多朋友问我如何剔除极端值,尤其是涉及到指数平均值计算的时候,笔者这里提供一下IQR(四分法)剔除极值的计算方法,用通俗的语言对关心指数计算的朋友做个的统一回答。

早期理杏仁在处理指数数据的时候也遇到了一些问题。这里涉及到几个情况:

1. 如何给负数排序?比如一组PE:-100、-10、 1、2、3、 100。是这样排吗?不对,因为负数其实是更糟糕的业绩,也就说负数是最大的数。正确的排法应该是:1、2、3、100、-100、-10。


2. 按照10%的极端值剔除的话,上面排序后的值应该如何剔除?排除1和-10 吗?如果这样做剔除,起结果还是很大。首先剔除1没什么意义,因为值小,影响因子最小;其次即便剔除10%,得到的数还是失真,图形上就会出现极大的波峰。


3. 比如上证50,其绝大部分值是比较集中的,没有什么异常值,这个剔除也就没什么意义了,反而使得值失真。

后来@forestgumpgg 提出了相同的问题。他提到“一种处理极值的通常做法是Inter-Quartile Range (IQR): 将数据三等分,设k=0.5,Q1,Q3分别为等分点,任何小于Q1− k(Q3 − Q1) , 或大于Q3 + k(Q3− Q1)的点均定义为极值。

查了查wikpedia https://en./wiki/Interquartile_range,然后就写算法进行测试。结果非常满意,后来又找朋友聊了聊,从专业的统计学的角度对这个算法进行讨论,双方均比较认可。

当然这种极值处理的方式有些细节要注意一下,这里将算法以通俗易懂的模式展示出来:

1. 将样本点按由小到大的顺序排序。

2. 如果数据是偶数,将数据拆成两等份;如果是奇数,去掉中间数,拆成两等份。

3. 分别对上面拆分的两组数求中位数。如果数据是奇数,中位数就是中间的那个;如果数组是偶数,中位数是中间的两个相加,然后除以2。

4. Q1便是较小数组的中位数,Q3是较大数组的中位数。

5. K作为常量可自行设置。百度百科上提了一个很有意思的值0.734(有兴趣的朋友可以自行深入了解一下)。

当K=0.5时,测试结果:(输入 -> 输出)

[50, 100, -4, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]  -> [-3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

[50, 100, -40, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] -> [-3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

[-50, 100, -40, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] -> [-3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

[-50, 100, -40, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 120] -> [-3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

[-5, 100, -40, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 120] -> [-5, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

这个结果非常精准,多的测试结果就不拿出来了,有兴趣的朋友可以自行测试。我用了很多样本后得出以下几个结论:

1. 当样本较少时,正常的值也有可能会被排除,这个时候K取0.734会好很多。

2. 样本点越多,计算结果越精确。

3. 为了算法公平性,无论样本多少,所有的计算方法的K值需要保持同样的值,个人使用0.5,在指数计算时的效果比较好。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多