2016-07-24 54 views
2

我目前有一個數據庫有一些錯誤標記的價格。如何檢測我的數據庫中的異常值數據點

實施例的數據:

Product - Price - SalesDate 
ProdA - 10 - 1/1/2016 
ProdB - 20 - 1/2/2016 
ProdA - 100 - 1/3/2016 
ProdB - 20 - 1/4/2016 
ProdB - 21 - 1/5/2016 
ProdA - 11 - 1/6/2016 

在此數據中設置的記錄 「ProdA - 100 - 2016年1月3日」 是具有一個錯誤。很可能輸入價格的人犯了打字錯誤。此外,不同日子的ProdA可以改變價格,這使得這個問題變得有趣。

什麼樣的工具可以幫助我識別這種類型的記錄? SQL可以幫助我檢測離羣點數據點嗎?我應該開始研究機器學習嗎?

+0

你應該用你正在使用的數據庫標記你的問題。 –

回答

3

這有點主觀,但您可以確定其值相對於平均值最遠的行。我會通過計算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; 

的標準偏差的功能可能會有所不同,這取決於你所使用的數據庫上,但大多數數據庫都支持這樣的功能。