很多朋友问我如何剔除极端值,尤其是涉及到指数平均值计算的时候,笔者这里提供一下IQR(四分法)剔除极值的计算方法,用通俗的语言对关心指数计算的朋友做个的统一回答。 早期理杏仁在处理指数数据的时候也遇到了一些问题。这里涉及到几个情况: 1. 如何给负数排序?比如一组PE:-100、-10、 1、2、3、 100。是这样排吗?不对,因为负数其实是更糟糕的业绩,也就说负数是最大的数。正确的排法应该是:1、2、3、100、-100、-10。
后来@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时,测试结果:(输入 -> 输出)
这个结果非常精准,多的测试结果就不拿出来了,有兴趣的朋友可以自行测试。我用了很多样本后得出以下几个结论: 1. 当样本较少时,正常的值也有可能会被排除,这个时候K取0.734会好很多。 2. 样本点越多,计算结果越精确。 3. 为了算法公平性,无论样本多少,所有的计算方法的K值需要保持同样的值,个人使用0.5,在指数计算时的效果比较好。 |
|