Обнаружение аномалий с нейронной сетью

12

У меня есть большой многомерный набор данных, который генерируется каждый день.

Каков будет хороший подход для выявления любых «аномалий» по сравнению с предыдущими днями? Является ли это подходящей проблемой, которую можно решить с помощью нейронных сетей?

Любые предложения приветствуются.

дополнительная информация: примеров нет, поэтому метод должен сам определять аномалии

Nickpick
источник

Ответы:

12

Исходя из постановки вопроса, я предполагаю, что нет никаких «примеров» аномалий (т. Е. Ярлыков). С этим допущением целесообразным будет использование автоэнкодеров : нейронных сетей, которые получают в качестве входных данных ваши данные и обучаются выводить те же самые данные. Идея состоит в том, что обучение позволило сети изучить представления распределений входных данных в форме скрытых переменных.

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

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

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

Другим вариантом было бы использовать Генеративные Состязательные Сети . Побочным продуктом обучения является сеть дискриминатора, которая отличает обычные ежедневные данные от ненормальных данных.

ncasas
источник
4

Я думаю, что сильно зависит от характера ваших данных (категориальные / непрерывные). Сначала я бы начал с простых методов. Это приходит мне в голову:

  • Вы можете сравнить распределение каждой переменной с помощью квантилей или любого статистического теста, чтобы увидеть, значительно ли они отличаются
  • Вы также можете посчитать вхождение каждого ярлыка / категории и сравнить их
  • Я также попытался бы использовать любой вид измерения расстояния. Например, вы можете рассчитать расстояние махаланобиса и посмотреть на большие изменения
  • Или что-то действительно простое - просто абсолютная разница между новыми и старыми данными, установите порог, и будет сообщено обо всем, превышающем порог
  • Вы также можете использовать некоторые многомерные методы, такие как корреляционная матрица, основные компоненты, кластеризация и т. Д., И искать изменения

Если ни один из них не подходит, то существует целая ветвь моделей stats / ML, предназначенных для обнаружения аномалий. SVM, t-SNE, леса изоляции, анализ группы пиров , анализ точек останова , временные ряды (где вы будете искать выбросы вне трендов).

Преимущество этих методов в том, что они являются своего рода «белым ящиком», так что вы можете сказать, почему кто-то выделяется. Если это не то, чего вы хотите, другие предложили подходы ANN, которые также будут работать.

HonzaB
источник
0

Я пытаюсь решить подобную проблему. Содержит ли ваш набор данных сочетание текстовых и числовых функций? Если так, то сложность обнаружения аномалий возрастает (я не знаю, по какому фактору). Если ваш набор данных однороден, например, содержит только числовые значения, вы можете потенциально использовать RNN, который все еще нуждается в помеченном наборе данных, но он может обнаруживать временные ряды, подобные шаблонам (поскольку вы упоминаете сравнение со значениями предыдущего дня для ex)

Прадип Банавара
источник
0

Простой способ сделать это с помощью автоэнкодеров (без «шумоподавления автоэнкодеров», которые необходимо обучать «поврежденным данным») - это обучить автоэнкодер, а затем проверить среднеквадратическое отклонение строк из входных данных, которые плохо декодируются ( что автоэнкодеру было нелегко реконструировать). По определению, эти данные представляют аномалию (конечно, это относится к таким вещам, как скачки трафика).

orcaman
источник