我想找出检测异常值的最佳方法。这里是问题以及可能无法解决的一些问题。假设我们想从mysql的dirty varchar(50)列中找出一些准统一的数据。让我们开始按字符串长度进行分析。检测稀疏分布的异常值?
| strlen | freq |
| 0 | 2312 |
| 3 | 45 |
| 9 | 75 |
| 10 | 15420 |
| 11 | 395 |
| 12 | 114 |
| 19 | 27 |
| 20 | 1170 |
| 21 | 33 |
| 35 | 9 |
我想要做的是设计一个算法来决定字符串的长度有被故意独特而不是类型0的或随机的垃圾概率较高。这个字段有可能是一个“枚举”类型,所以可以有多个有效值的频率尖峰。显然10和20是有效的,0只是省略数据。 35和3可能是一些随机垃圾,尽管两者在频率上有很大不同。 19和21可能是20格式的type-os。 11可能是10的type-os,但12呢?
它似乎只是使用出现频率%是不够的。需要在明显的异常值周围出现更高的“仅有错误”概率的热点。
此外,当有15个唯一长度可以在5-20个字符之间变化时,具有固定阈值失败,每个长度在7%到20%之间。
标准偏差不起作用,因为它依赖于平均值。中位数的绝对偏差可能不会奏效,因为你可以有一个不能被丢弃的高频异常值。
是的,会有其他参数用于清理代码中的数据,但长度似乎非常快,可以用任意数量的结构预过滤和分类字段。
是否有任何已知的方法可以有效地工作?我不是很熟悉贝叶斯滤波器或机器学习,但也许他们可以提供帮助?
谢谢! leon
+1对于有趣的问题 – cctan