Каковы хорошие алгоритмы обнаружения ненормальности?

Фон

Вот проблема:

  • Черный ящик выводит новое число каждый день.
  • Эти цифры были записаны в течение определенного периода времени.
  • Обнаруживать, когда новый номер из черного ящика выходит за рамки числа, установленного за период времени.

Цифры - это целые числа, а период времени - год.

Вопрос

Какой алгоритм будет идентифицировать шаблон в числах?

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

Идеи

У меня есть некоторые идеи, но я не уверен в лучшем подходе или о том, какие решения уже существуют:

  • Алгоритмы машинного обучения?
  • Нейронная сеть?
  • Классифицировать нормальные и ненормальные числа?
  • Статистический анализ?

Ответы

Ответ 1

Сгруппировать свои данные.

Если вы не знаете, сколько режимов будут иметь ваши данные, используйте что-то вроде Гауссовой смесительной модели (GMM) вместе с функцией подсчета очков (например, байесовский информационный критерий (BIC)), чтобы вы могли автоматически определять вероятное число кластеров в ваших данных. Я рекомендую это вместо k-средств, если вы не знаете, какое значение k может быть. После того, как вы построили GMM для данных за последний год, с учетом нового datapoint x, вы можете вычислить вероятность того, что он был сгенерирован любым из кластеров (смоделированный гауссовым в GMM). Если ваша новая точка данных имеет низкую вероятность генерации любого из ваших кластеров, это, скорее всего, истинный выброс.

Если это звучит слишком сильно, вы с удовольствием узнаете, что вся процедура GMM + BIC для автоматической идентификации кластеров была реализована для вас в отличном MCLUST для R. Я использовал его несколько раз для больших успехов для таких проблем.

Мало того, что это позволит вам идентифицировать выбросы, у вас будет возможность поставить значение p в точке, являющейся outlier, если вам понадобится эта возможность (или ее нужно) в какой-то момент.

Ответ 2

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

PCA - это другой метод, который приходит на ум при работе с данным типом данных.

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

Звучит как забавная проблема! Удачи.

Ответ 3

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

Затем вы можете захотеть вычислить производные количества, относящиеся к этим функциям. Например: "Я хочу, чтобы числа, изменяющиеся круто направо" = > вычисляли u_ {n + 1} - u_n, и ожидали, что он будет иметь постоянный знак или попадет в некоторый диапазон. Возможно, вы захотите сохранить эту гибкость и позволить расширять ваш дизайн кода (шаблон стратегии может быть рассмотрен, если вы выполняете ООП)

Затем, когда у вас есть некоторые производные количества, представляющие интерес, вы делаете статистический анализ на них. Например, для производной величины A вы предполагаете, что она должна иметь некоторое распределение P (a, b) (равномерное ([a, b]) или бета (a, b), возможно, более сложное), вы ставите априорные законы на a, b, и вы их используете на основе последовательной информации. Затем, задняя вероятность информации, предоставленной последним добавленным пунктом, должна дать вам некоторое представление о том, что это нормально или нет. Относительная энтропия между задним и предыдущим законами на каждом шаге - хорошая вещь для наблюдения. Для получения дополнительной информации обратитесь к книге по байесовским методам.

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