去除异常值的好方法?

机器算法验证 异常值 强大的 意思是
2022-03-21 23:43:21

我正在研究软件构建的统计数据。我有关于通过/失败和经过时间的每个构建的数据,我们每周生成约 200 个这些数据。

成功率很容易汇总,我可以说任何一周都通过了 45%。但我也想汇总经过的时间,并且我想确保我不会错误地歪曲数据。想我最好问问专业人士:-)

假设我有 10 个持续时间。它们代表通过和失败的情况。一些构建会立即失败,这使得持续时间异常短。有些在测试期间挂起并最终超时,导致持续时间很长。我们构建不同的产品,因此即使是成功的构建也会在 90 秒到 4 小时之间变化。

我可能会得到这样的一套:

[50, 7812, 3014, 13400, 21011, 155, 60, 8993, 8378, 9100]

我的第一种方法是通过对集合进行排序并选择中间值来获得中间时间,在本例中为 7812(我没有为偶数集合的算术平均值而烦恼。)

不幸的是,这似乎产生了很多变化,因为我只选择了一个给定的值。因此,如果我要对这个值进行趋势分析,它将在 5000-10000 秒之间反弹,具体取决于哪个构建处于中位数。

所以为了解决这个问题,我尝试了另一种方法——删除异常值,然后计算剩余值的平均值。我决定把它分成三分位,只在中间的一个上工作:

[50, 60, 155, 3014, 7812, 8378, 8993, 9100, 13400, 21011] ->
[50, 60, 155], [3014, 7812, 8378, 8993], [9100, 13400, 21011] ->
[3014, 7812, 8378, 8993]

这对我来说似乎更好的原因有两个:

  • 我们不想对更快的构建采取任何行动,它们已经很好了
  • 最长的构建可能是由超时引起的,并且会一直存在。我们有其他机制来检测那些

所以在我看来,这就是我正在寻找的数据,但我担心我已经通过移除真相来实现平滑。

这有争议吗?方法合理吗?

谢谢!

4个回答

您正在做的事情被称为修剪均值

正如您所做的那样,从每一侧修剪相同的比例(修剪比例)是很常见的。

您可以修剪 0%(普通平均值)到(几乎)50%(给出中位数)之间的任何值。您的示例从两端修剪了 30%。

请参阅此答案和相关的 维基百科文章

[编辑:见尼克考克斯关于这个话题的精彩讨论。]

这是一个相当合理的,有点健壮的位置估计器。它通常被认为比高度偏斜的分布更适合近对称分布,但如果它适合您的目的*,没有理由不使用它。最好修剪多少取决于您拥有的分布类型和您寻求的属性。

* 这里不完全清楚你想估计什么。

还有许多其他强大的方法可以总结分布的“中心”,其中一些您可能还会发现有用。(例如,M-估计器可能对你有一些用处,也许)

[如果您需要一个相应的变异性度量来与您的修剪平均值一起使用,Winsorized标准偏差可能对您有些用处(本质上,在计算 sd 时,用您在修剪时的最极端值替换您将截断的值)没有切断)。]

考虑到您的目标,您的方法对我来说很有意义。它很简单,很直接,它可以完成工作,而且你可能不想写一篇关于它的科学论文。

在处理异常值时应该始终做的一件事是了解它们,而您已经在这方面做得很好。因此,改进您的方法的可能方法是:您可以使用有关哪些构建挂起的信息吗?你提到你有“其他检测这些的机制”——你能检测到它们然后只从样本中删除它们吗?

否则,如果您有更多数据,您可以考虑不删除三分位数,而是删除五分位数......但在某些时候,这可能不会产生太大影响。

另一种方法是计算所有成对平均值的中位数或进行自举。

更新:

所有成对平均数的中位数称为Hodges-Lehmann 估计量这种估计器通常具有很高的效率。Scott L. Hershberger 的这本百科全书条目说:

虽然对于非对称分布,中位数和霍奇斯-莱曼估计量均优于样本均值,但霍奇斯-莱曼估计量相对于均值的渐近相对效率大于中位数

自举可能不太相关且计算量更大,但是您可以对数据进行替换的小随机样本并计算该子样本的平均值,多次执行并计算所有平均值的中值。

在这两种情况下,您不再需要在数据值中选择一个值(当您计算普通中位数时),而是从数据子集中的许多平均值中选择。

你在做什么似乎是合理的:只是为了提供信息,我经常出于类似的目的使用以下过程:但我只对上异常值真正感兴趣。

计算五个数字摘要:Min、Q1、Median、Q3、Max。计算四分位距:Q3-Q1。在 Q1-IQR*X 和 Q3+IQR*X 处设置离群值“围栏”:其中“X”的合理值为 1.5。

使用 Excel 和上面的数字(使用 1.5 表示“X”**)会产生一个上异常值:21011

MIN 50
Q1  3014
MEDIAN  8095
Q3  9073.25
MAX 21011
IQR 6059.25
UPPER FENCE 18162.125
LOWER FENCE -6074.875

因此,对于您的示例而言,此处的较低围栏实际上没有用或不切实际:这支持了另一篇文章关于理解特定数据含义的重要性的观点。

(**找到“1.5”规则的一个引用:我并不是说它是权威的,但对我来说似乎是一个合理的起点:http: //statistics.about.com/od/Descriptive-Statistics/a/什么是四分位间距规则.htm )

您也可以决定(也许)只使用 IQR 本身的数据点:这似乎会产生合理的结果(因为您的方法的成员资格非常相似)。

使用相同的数据,这会将以下数据点放置在“感兴趣的区域”中:

7812
3014
13400
21011
8993
8378
9100

在箱线图上:这些点都将落在图表的箱形部分(而不是胡须部分)内。

可以看出,这个列表包含了一些不在你的原始列表中的项目(运行时间更长的构建);我不能说一个列表是否更准确。(再次,归结为了解您的数据集)。