Как обнаружить посторонние точки данных в моей базе данных
В настоящее время у меня есть база данных, в которой есть цены на некоторые товары.
Пример данных:
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 - 1/3/2016" является ошибкой. Должно быть, человек, который ввел цену, допустил опечатку. Кроме того, ProdA в разные дни может изменить цену, что делает эту проблему интересной.
Какой инструмент может помочь мне определить этот тип записей? Может ли SQL помочь мне обнаружить точки данных Outlier? Должен ли я начать изучать машинное обучение для этого?
1 ответ
Это немного субъективно, но вы можете определить строки, значения которых наиболее далеки от среднего. Я бы сделал это, рассчитав 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;
Функция для стандартного отклонения может отличаться в зависимости от базы данных, которую вы используете, но большинство баз данных поддерживают такую функцию.