我的样本遵循重尾分布。我使用一个过程来检测和删除“极端”样本,如下所示:
- 测量样本的平均值和标准偏差。
- 删除高于平均值加上 4 个标准差的样本。
- 从第 1 步开始重复 - 总共 3 次。
如果没有极端样本,则上述过程不删除;如果有很多,那么它们会扭曲均值/std.dev,但是,多次迭代会解决这个问题。
对于我的问题,上述算法删除了 0-5% 的样本,经验测试表明它运行良好并且看起来相当稳健。
但是,这个过程合理吗?它有一个正式的名称来查找它吗?
请注意,我不能只找到我们拒绝样本的“最佳”标准偏差数,因为整个过程需要针对多个数据集自动化并作为实时系统的一部分运行。数据集相似但不完全相同:有时它们很小并且没有异常值(丢失样本并不奢侈);有时它们很大,需要删除的极端示例的数量各不相同,而且可能非常高。
数据代表用户操作(每种操作类型一个变量),我们需要比较多组用户(不同的细分)。然而,许多“用户”实际上是机器人,它们通常(但不总是)多次执行相同的操作(比人类做的次数多得多)。公平地说,我们混合了两种我们无法真正区分的分布,即人类用户和机器人。在我们移除尽可能多的机器人后,我们关心人类用户的行为差异。从长远来看,我们将为机器人构建一个分类器,但现在我们正在寻求一些快速的解决方案。