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