Подтвердить что ты не робот

Обнаружение редких инцидентов из многомерных интервалов временных рядов

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

Обновление: Я нашел эту статью (PDF) о Mining Sequences of Temporal Intervals, которая касается аналогичной проблемы. Еще один документ (Документы Google) по иерархическим временным шаблонам интеллектуального анализа в многомерных временных рядах использует новый подход, но имеет дело с иерархическими данными.

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

Следующие данные представляют собой пример обучения для инцидента, представленного как график со временем, где /¯¯¯\ представляет интервал состояния true и интервал состояния \___/ a 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 vs true-false) является значительным, поэтому любые функции должны учитывать это.

4b9b3361

Ответ 1

Простое решение будет сворачивать временные аспекты ваших данных и принимать каждую временную метку как один экземпляр. В этом случае значения датчиков считаются вашим вектор-функцией, где каждый временной шаг помечен значением класса категории 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 легко выводится из функции принятия решения), затем задается заданный порог, вы проверяете, превышает ли вероятность прогнозируемого класса этот порог: если мы используем этот класс для прогнозирования текущей временной метки, если нет, то мы сохраняем предыдущее предсказание, и то же самое относится к будущим экземплярам. Это приводит к добавлению определенной инерции к текущему прогнозу.

Ответ 2

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

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

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

Ответ 3

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

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