如何检测数据库中的异常数据点

时间:2016-07-24 11:53:30

标签: sql machine-learning sql-server-2008-r2 data-cleansing

我目前有一个数据库,其中有一些标签贴错标签。

示例数据:

short

在此数据集上,记录“ProdA - 100 - 1/3/2016”是有错误的记录。输入价格的人可能必须输入错误。此外,不同日期的ProdA可以改变它的价格,这使这个问题变得有趣。

什么样的工具可以帮助我识别这类记录? SQL可以帮我检测异常数据点吗?我应该开始研究机器学习吗?

1 个答案:

答案 0 :(得分:4)

这有点主观,但您可以识别其值与平均值相距最远的行。我会通过计算z得分并查看最大/最小的z得分来做到这一点。

z分数是减去平均值除以标准差的值。以下是计算示例:

select t.*,
       (price - avg_price) / nullif(std_price, 0) as z_price
from t join
     (select product, avg(price) as avg_price, stdev(price) as std_price
      from t
      group by product
     ) tt
     on t.product = tt.product
order by abs(z_price) desc;

标准差的功能可能会有所不同,具体取决于您使用的数据库,但大多数数据库都支持此类功能。