Как обнаружить посторонние точки данных в моей базе данных

В настоящее время у меня есть база данных, в которой есть цены на некоторые товары.

Пример данных:

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;

Функция для стандартного отклонения может отличаться в зависимости от базы данных, которую вы используете, но большинство баз данных поддерживают такую ​​функцию.

Другие вопросы по тегам