Алгоритм машинного обучения для обнаружения аномалий в больших наборах событий.

Вопрос или проблема

Начнем с следующих гипотетических предварительных условий:

  1. Есть трафик: нормальный и аномальный. Каждый образец трафика содержит список событий (переменного размера)
  2. События происходят в определенном порядке, возможный размер набора событий составляет ~40000 элементов
  3. Должен работать на относительно небольшом объеме памяти и вычислительной мощности

Имея образец трафика (максимум 1000 событий), какой алгоритм машинного обучения лучше всего подходит под эти предварительные условия для определения, является ли он аномалией?

Учитывая мои ограниченные знания в алгоритмах машинного обучения, вот что я придумал:

Эту систему можно очень хорошо описать как марковский процесс, но в этом сценарии есть огромные ограничения по памяти.

1. Уменьшенные марковские цепи

Сохранять часто встречающиеся пары событий (которые появлялись больше 10 раз в нормальном трафике), а затем искать какую-либо пару там: если она не появляется, считать это аномалией. Затем использовать некоторую эвристику для определения, является ли трафик в целом аномальным.

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

2. Наивный KNN

Получить все нормальные образцы трафика (каждый образец может содержать до 1000 событий) и проанализировать количество появлений каждого события в каждом образце. Разделить набор данных на 10 частей, вычислить их средние значения, чтобы получить среднюю частоту для каждой части (по сути, у нас теперь есть 10 векторов средней частоты) и использовать их как положительные данные в алгоритме KNN.

Сделать то же самое с аномальным трафиком и добавить 10 точек данных. Имея эти точки, мы можем использовать регрессию алгоритма KNN для вычисления оценки и принятия решения.

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

Есть ли другие идеи, чего я не учел?

Вы также можете попробовать следующие:

4- Одноклассовая SVM (машина опорных векторов):

Вы можете обучить это на нормальных образцах, которые у вас есть, и затем он сможет отметить их все и обнаружить любое, что не попадает под этот ярлык. Он также может легко масштабироваться, хотя обучение на больших данных может быть довольно медленным. Вы можете попробовать реализацию scikit-learn:
https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html

5- Лес изоляции:

Лес изоляции на самом деле является ансамблевым алгоритмом, он использует Деревья случайного леса для обнаружения аномалий или выбросов в данных. В первую очередь вы можете попробовать реализацию scikit-learn:
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html

6- Глубокая одноклассовая классификация:

Другим вариантом, который вы можете попробовать, является реализация нейронной сети для одноклассовой классификации. Вы должны быть в состоянии сделать это легко с Keras, например. Вы можете ознакомиться с документацией Keras здесь:
https://keras.io/models/about-keras-models/

Кроме того, для реализации могут помочь следующие ссылки:
https://blog.keras.io/building-autoencoders-in-keras.html,
https://medium.com/@curiousily/credit-card-fraud-detection-using-autoencoders-in-keras-tensorflow-for-hackers-part-vii-20e0c85301bd

Перед использованием алгоритма KNN вы могли бы просто снизить размерность, применив, например, разложение на сингулярные значения или PCA. Это уменьшит сложность для данного алгоритма.

Кроме того, использование разреженных векторов всегда является хорошей идеей. Другой подход для минимизации потребления памяти — привести все значения к наименьшему типу.

Ответ или решение

Алгоритмы машинного обучения для обнаружения аномалий в больших наборах событий

Введение

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

Условия задачи

  1. Наша задача заключается в анализе последовательностей событий с переменной длиной, где размер возможного множества событий составляет около 40,000 элементов.
  2. Максимальная длина последовательности составляет 1000 событий.
  3. Ограниченные ресурсы памяти и вычислительной мощности требуют применения эффективных алгоритмов.

Предлагаемые алгоритмы

1. Упрощенные марковские цепи

Использование марковских цепей может быть целесообразным решением. В рамках упрощенной модели можно хранить частые пары событий, которые встречаются более 10 раз в нормальном трафике. Если новая последовательность не содержит известной пары, она может быть отнесена к аномальным. Это позволяет снизить требования к памяти, поскольку мы ограничиваемся лишь парами событий, что делает задачу вычислительно эффективной.

2. Алгоритм K-ближайших соседей (KNN)

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

3. Одноклассовый SVM (Support Vector Machine)

Одноклассовый SVM подходит для задач обнаружения аномалий. Модель обучается только на нормальных образцах, что позволяет ей фиксировать их распределение. Тестовые образцы, находящиеся за пределами этого распределения, классифицируются как аномалии. Реализация этого алгоритма доступна в библиотеке scikit-learn и может быть адаптирована для работы с ограниченными ресурсами.

4. Изолирующий лес (Isolation Forest)

Изолирующий лес — это ансамблевый метод, основанный на иерархии деревьев решений, который эффективно выявляет аномалии, изолируя их в процессе построения. Этот алгоритм требует относительно небольшого объема памяти и демонстрирует высокую производительность на больших наборах данных. Также он доступен в scikit-learn и обеспечит хороший баланс между скоростью и эффективностью.

5. Глубокая классификация с одним классом

Интеграция нейронных сетей для решения задач одного класса (например, автоэнкодеры) может быть эффективным решением в определенных случаях, хотя может потребовать больше ресурсов. Такие модели могут обрабатывать сложные взаимосвязи в данных и выявлять аномалии на основе восстановления входных данных.

Предложения по предобработке данных

  • Снижение размерности: Перед использованием KNN целесообразно применить методы снижения размерности, такие как метод главных компонент (PCA) или сингулярное разложение (SVD), чтобы уменьшить сложность алгоритма и улучшить производительность.
  • Использование разреженных векторов: Они помогают сократить объем хранимых данных и повысить эффективность вычислений.
  • Кастинг значений: Перевод всех значений в самый малый тип данных также может помочь в уменьшении потребления памяти.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...