Обнаружение редких инцидентов по многомерным временным рядам - PullRequest
13 голосов
/ 01 октября 2010

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

Обновление: Я нашел этот документ (PDF) на Последовательности добычи временных интервалов , который решает аналогичную проблему. Другой документ (Google Docs) on Анализ иерархических временных шаблонов в многомерных временных рядах использует новый подход, но имеет дело с иерархическими данными.

Пример данных обучения

Следующие данные являются примером обучения для инцидента, представленного в виде графика во времени, где /¯¯¯\ представляет интервал состояния true и \___/ интервал состояния false для датчика.

 Sensor   |  Sensor State over time
          |  0....5....10...15...20...25...  // timestamp
 ---------|--------------------------------
 A        |  ¯¯¯¯¯¯¯¯¯¯¯¯\________/¯¯¯¯¯¯¯¯
 B        |  ¯¯¯¯¯\___________________/¯¯¯¯
 C        |  ______________________________  // no state change
 D        |  /¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯
 E        |  _________________/¯¯¯¯¯¯¯¯\___

Обнаружение инцидентов, маркировка последовательностей и классификация

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

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

Возможные алгоритмы

Скрытая модель Маркова представляется возможным решением, но сможет ли она использовать интервалы состояний? Если метка последовательности не лучший подход к этой проблеме, альтернативные предложения будут оценены.

Байесовский вероятностный подход

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

Функция извлечения

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

struct StateInterval
{
    int sensorID;
    bool state;
    DateTime timeStamp;
    TimeSpan duration; 
}

например. Некоторые государственные интервалы из таблицы процессов:

[ {D, true, 0, 3} ]; [ {D, false, 4, 1} ]; ...
[ {A, true, 0, 12} ]; [ {B, true, 0, 6} ]; [ {D, true, 0, 3} ]; etc.

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

Редактировать: Некоторые идеи после сна о том, как извлечь элементы из данных тревоги нескольких датчиков и как сравнить их с предыдущими данными ...

Начните с вычисления следующих данных для каждого датчика для каждого часа дня:

  • Средняя длина интервала состояний (для true и false состояний)
  • Среднее время между изменениями состояния
  • Количество изменений состояния с течением времени

Затем каждый датчик можно сравнить с любым другим датчиком в матрице с данными, подобными следующим:

  • Среднее время, за которое датчик B перешел в истинное состояние после того, как датчик A сделал. Если среднее значение составляет 60 секунд, то ожидание в 1 секунду будет более интересным, чем ожидание в 120 секунд.
  • Среднее число изменений состояния датчика B, в течение которых датчик A находился в одном состоянии

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

Является ли это разумным подходом и каким будет хороший алгоритм для сравнения этих функций?


Редактировать: направление изменения состояния (false->true против true-false) является значительным, поэтому любые функции должны учитывать это.

Ответы [ 3 ]

7 голосов
/ 04 октября 2010

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

   sensors      | class
A  B  C  D  E   |
------------------------- 
1  1  1  0  0   |  catA
1  0  0  0  0   |  catB
1  1  0  1  0   |  catB
1  1  0  0  0   |  catA
..

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

   sensors      | class
A  B  C  D  E   |
------------------------- 
0  1  1  1  1   |   ?
1  1  0  0  0   |   ?
..

Промежуточный шаг уменьшения размерности / извлечения признаковможет улучшить результаты.

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


РЕДАКТИРОВАТЬ

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

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

4 голосов
/ 03 октября 2010

Это не похоже на проблему классификации. Классификаторы не предназначены для учета «комбинации изменений состояния». Это звучит как проблема маркировки последовательности. Изучите использование скрытой марковской модели или условного случайного поля. Вы можете найти эффективную реализацию последнего в http://leon.bottou.org/projects/sgd.

Edit: Я прочитал ваш вопрос немного подробнее, и я не думаю, что HMM - лучшая модель, учитывая то, что вы хотите делать с функциями. Это взорвет ваше пространство состояний и может сделать вывод неразрешимым. Вам нужна более выразительная модель. Вы можете посмотреть на динамические байесовские сети. Они обобщают НММ, позволяя представить пространство состояний в факторизованной форме. Диссертация Кевина Мерфи - самый полный ресурс для них, с которым я сталкивался.

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

1 голос
/ 06 октября 2010

Зачем изобретать велосипед?Проверьте TClass

Если это не подходит для вас, вы можете найти там также несколько указателей.Надеюсь, это поможет.

...