作者:理杏仁-Bing

本篇文章主要目的在于详细说明四分法应用于指数计算中关于等权平均数和算术平均数中的极端值的剔除方法。

为何要剔除极端值?

比如我们来计算上证50的PE-TTM的算术平均值的时候,发现其中有两个数过500的数,而剩下绝大部分数在5到50之间, 如果按照算术平均值来做计算,无疑计算结果受这两个超级大的数影响而过大,使得指数不具备统计上的意义, 而我们清楚这样的情况大量存在,因为指数样本里有一些周期性的巨无霸,这使得其PE往往多大幅度波动。

如何剔除极端值?

通过大量的实践运算,最终我们还是采用了四分法剔除极端值的方法,关于其详细定义请参考wikipedia。请不要抱怨是英文,站长这就用通俗的语言来解释一下:

  1. 比如有一组数 [2, 1, 3, 5, 4, 6, 8, 7, 9, 25]
  2. 排序后: [1, 2, 3, 4, 5, 6, 7, 8, 9, 25]
  3. 将这组数等量分成两组: [1, 2, 3, 4, 5] 以及 [6, 7, 8, 9, 25]
  4. 分别取这两组数的中间值: 3 和 8 ,其差值为 5。
  5. 那么小于 3 - 5 * 0.5 = 0.5 的数认为是极小值而被排除;大于 8 + 5 * 0.5 = 10.5 的数被认为是极大值而被排除。
  6. 把 0.5 作为参数 K, 3 和 8 分别为 Q1 和 Q3,公式就是 n < Q1− k(Q3 − Q1) || n > Q3 + k(Q3− Q1)

以上整套算法过程就叫做四分法。

一些测试结果

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

1
2
3
4
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]

总结

四分法在做极值剔除目前在实际应用中曲线表现良好,同时算法简单高效,还能帮我们快速找到一组数据的边界值,对于作图处理极端值也是大有帮助。