Я внедряю систему обнаружения аномалий, которая будет использоваться в разные временные ряды (одно наблюдение каждые 15 минут в общей сложности 5 месяцев). Все эти временные ряды имеют общую закономерность: высокие уровни в рабочее время и низкие уровни в противном случае.
Идея, представленная во многих статьях, заключается в следующем: построить модель для прогнозирования будущих значений и рассчитать оценку аномалии на основе остатков.
Что у меня до сих пор
Я использую LSTM для прогнозирования следующего временного шага с учетом предыдущих 96 (1 день наблюдений), а затем вычисляю оценку аномалии как вероятность того, что остатки получаются из одного из двух нормальных распределений, подобранных по остаткам, полученным с помощью проверочный тест. Я использую два разных дистрибутива, один для рабочего времени и один для нерабочего времени.
Модель очень хорошо обнаруживает точечные аномалии, такие как внезапные падения и пики, но она не срабатывает, например, в праздничные дни.
Если в течение недели выходной, я ожидаю, что моя модель обнаружит больше аномалий, потому что это необычный ежедневный шаблон по сравнению с обычным рабочим днем.
Но предсказания просто следуют за предыдущими наблюдениями.
Мое решение
Используйте вторую и более легкую модель (основанную на разложении по временным рядам), которая снабжается агрегациями ежедневно вместо агрегаций 15 минут для выявления ежедневных аномалий.
Вопрос
Эта комбинация двух моделей позволяет мне иметь обе аномалии, и она работает очень хорошо, но моя идея состояла в том, чтобы использовать только одну модель, потому что я ожидал, что LSTM сможет "изучать" также недельную модель. Вместо этого он строго следует предыдущим временным шагам, не принимая во внимание, что это рабочий час и уровень должен быть намного выше.
Я попытался добавить экзогенные переменные к входу (час дня, день недели), добавить слои и количество ячеек, но ситуация не так уж и лучше.
Любые соображения приветствуются.
Спасибо