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