Инструменты для автоматического обнаружения аномалий в таблице SQL?

10

У меня есть большая таблица SQL, которая по сути является журналом. Данные довольно сложные, и я пытаюсь найти способ идентифицировать аномалии без понимания всех данных. Я нашел много инструментов для обнаружения аномалий, но большинство из них требует своего рода «среднего человека», то есть Elastic Search, Splunk и т. Д.

Кто-нибудь знает инструмент, который может работать с таблицей SQL, которая автоматически создает базовую линию и оповещает об аномалиях?

Это может показаться ленивым, но я потратил десятки часов на написание отдельных сценариев отчетности, когда узнал, что означает каждый тип события и какие другие поля идут с каждым событием, и я не чувствую себя ближе к возможности оповещать о реальных проблемах в осмысленно. Таблица содержит 41 столбец и всего 500 миллионов строк (данные за 3 года).

Адвокат дьявола
источник
Не совсем, но сортировка по каждому столбцу и просмотр минимальных и максимальных значений, а также установка предупреждений для смешных значений могут быть полезны.
Барри Картер
В случае, если он не должен быть слишком сложным, вы можете использовать линейную регрессию движущихся окон mlinreg и, таким образом, идентифицировать большие отклонения.
Диего

Ответы:

3

Если вы хотите приблизиться к этому с точки зрения SQL, то в целом я бы выделил любые классификационные переменные, которые вызывают другое поведение. Затем выполните что-то вроде следующего для ряда переменных анализа.

SELECT ClassificationVar1, 
    ClassificationVar2, 
    MIN(AnalysisVar1) as Min_AnalysisVar1, 
    MAX(AnalysisVar1) as Max_AnalysisVar1, 
    MEAN(AnalysisVar1) as Mean_AnalysiVar1, 
    STDEV(AnalysisVar1) as Std_AnalysisVar1,
    MIN(AnalysisVar2) as Min_AnalysisVar2, 
    MAX(AnalysisVar2) as Max_AnalysisVar2, 
    MEAN(AnalysisVar2) as Mean_AnalysiVar2, 
    STDEV(AnalysisVar2) as Std_AnalysisVar2,
    etc.
    FROM YourDataFile
GROUP BY ClassificationVar1, ClassificationVar2
ORDER BY ClassificationVar1, ClassificationVar2

Я бы выполнил это как разовое упражнение, скажем, за последний год данных, а затем, с точки зрения скорости, я бы запустил это так регулярно, как вам нужно, чтобы отметить исключительные данные.

Возможно, лучший подход, который означает изучение новых технологий, - это решение HDFS / Spark, а затем PIG / Python / R. Но у HDFS / Spark есть некоторые решения, которые выходят из коробки для анализа журналов. 500 миллионов записей, вероятно, достигают проблем производительности с SQL, даже с разбиением таблиц и индексацией столбцов.

Маркус Д
источник
Я должен был отметить, что это технически Intersystems Caché. Он предоставляет все классы в виде таблиц SQL. Вот как я делаю все свои отчеты, ради здравомыслия.
Адвокат дьявола
3

Если вам нужен код SQL, который запускает различные методы обнаружения выбросов для любой произвольной таблицы, посмотрите мою серию статей и примеров кодаориентирован на SQL Server. Я предоставляю некоторый предварительный код для тестов Грубба, Z-баллов и модифицированных Z-баллов, Межквартильного диапазона, Q-теста Диксона, GESD, теста Титджена-Мура, критерия Пирса, критерия Шовене, модифицированного теста Томпсона Тау, расстояния Кука, Махаланобиса Расстояние, закон Бенфорда и различные визуальные сюжеты. Пожалуйста, обратите внимание, что я любитель в этом и что это мой старый код, так что я уверен, что исправления будут необходимы; это как минимум обеспечивает отправную точку, чтобы вы могли запускать эти тесты для любой таблицы базы данных, для которой у вас есть разрешения. Это также в T-SQL, так что вам нужно будет скорректировать код для PL / SQL или любой другой марки SQL, которую вы могли бы использовать, если вы оказались на какой-то другой платформе, такой как Oracle или MySql. Это должно начать вас, хотя. Просто решите изгибы и настройте хранимые процедуры так, чтобы они периодически запускались по расписанию, и все готово. Дайте мне знать, если у вас есть какие-либо отзывы о подпрограммах, я всегда стремлюсь улучшить свои записи SQL.

SQLServerSteve
источник