Вопрос или проблема
Я разрабатываю программу для обнаружения аномалий на Python.
Основная идея заключается в том, чтобы каждый день создавать новую модель LSTM, обучать ее на данных за предыдущие 7 дней и предсказывать следующий день.
Затем, используя пороговые значения, находить аномалии день за днем.
Я уже реализовал это, и эти пороговые значения работают хорошо:
верхний порог равен обрезанному среднему + (K * междуквартильный размах)
нижний порог равен обрезанному среднему – (K * междуквартильный размах)
где обрезанное среднее и междуквартильный размах рассчитываются на основе ошибки предсказания (реальная кривая – предсказанная) и K установлен на 5.
Что я хотел бы узнать, так это есть ли правило или метод для правильной настройки значения K. Потому что на данный момент мой подход заключался в настройке порогов, исходя из ложноположительных результатов.
Я ищу какую-либо связь между аномалиями и тем, как настроить пороги.
Я уже пытался рассчитать AUC (площадь под кривой) для каждой модели и искать связь, но безуспешно. На самом деле, поскольку я создаю новую модель каждый день, и в большинстве случаев у меня нет никаких аномальных значений, я не могу правильно рассчитать уровень истинных положительных результатов.
Спасибо
ИЗМЕНЕНИЕ
Основываясь на комментарии Бена, я собираюсь добавить детали о своей проблеме.
Начнем с того, чтобы лучше объяснить, что для меня является аномальным значением.
Итак, я анализирую временные ряды, созданные на основе данных о потреблении кВтч каждые 5 минут, то есть 288 записей в день.
Аномальное значение – это в основном пик, то есть значение, которое сильно отличается от остальных.
Более того, мне нужно создавать модель день за днем, потому что у клиента недостаточно данных, и мне также нужно учитывать сезонность.
В заключение, я работаю над одновариантной задачей, так что у меня есть только значение потребления и время, и всё.
ИЗМЕНЕНИЕ ОТВЕТ НА ВОПРОСЫ БЕНА
Прежде всего, да, кВтч означает потребление энергии.
У меня есть другой тип аномалий, которые представляют собой заблокированные значения (например, 0, 0, 0 и т.д.), но я думаю, что я могу идентифицировать их, “добавив простое правило”, которое обнаруживает эти ситуации.
Что касается сезонности:
Каждая новая модель обучается на основе предыдущих 7 дней, и с каждым днем это окно времени смещается вперед. Таким образом, каждый день модель удаляется и обучается только на основе предыдущих 7 дней.
Я уже справился с проблемой, которую вы упомянули (обучение новой модели на аномальных данных), заменив аномальные данные новым значением, рассчитанным на основе разницы между следующим и предыдущим значениями.
Вот несколько графиков моих данных:
изображение 1
изображение 2
где зеленая линия – это предсказание, а синяя линия – реальный временной ряд
Чтобы дать полезный ответ, необходимо больше информации. Когда вы хотите обнаружить аномалии, я бы сказал, исходя из своего ощущения и понимания, что нет смысла обучать модель каждый день. Вам следует один раз определить свою нормальную систему и попытаться обнаружить аномалии с этого момента. Тенденции трудно улавливать, но это всегда сложно.
Идентификация аномалий также означает, что вы должны знать свою систему, но здесь я должен вернуться к первому предложению: Что такое ваша система? Это техническая система (тогда задача становится довольно сложной) или это “просто” распознавание шаблонов или обнаружение мошенничества и так далее?
Тем не менее, когда я делал это для большой машины с ~60 переменными (и 12 месяцами данных), я использовал первые 3 месяца для обучения и определил это состояние как нормальное. Затем я установил пороговые значения таким образом, чтобы аномалия была идентифицирована, когда RMSE достигает $ \sqrt{max (X_i)} $. Это работало довольно хорошо, за исключением 1-2 переменных. Но, как я сказал, это зависит от вашей ситуации. Например, когда у вас паровая машина, и нормальная температура составляет 98 °C, а всё разрывается при 101 °C, вам, вероятно, придется использовать индивидуальный порог, так как, например, стандартное отклонение здесь не поможет.
Чтобы добавить немного больше информации: особенно в случае обнаружения аномалий часто бывает, что одного подхода недостаточно. Я бы реализовал несколько базовых подходов, таких как использование стандартных отклонений для самых тривиальных случаев, которые обязательно должны быть обнаружены, и более продвинутые методы (например, LSTM) для отслеживания более сложных паттернов.
Ответ или решение
Обнаружение аномалий — это важная задача в различных областях, включая анализ временных рядов и предсказание. Вы предложили метод, в котором каждую ночь вы создаете новую модель LSTM, обучая ее на данных за предыдущие семь дней, и затем используете пороги для выявления аномалий. Ваша идея хороша, но настройка порогов, особенно значения K, может быть сложной задачей. Давайте рассмотрим различные аспекты, касающиеся аномалий и порогов.
Настройка порога K
Вы используете пороговые значения, основанные на обрезанном среднем и интерквартильном диапазоне (IQR). Значение K, в вашем случае равно 5, что довольно высоко, и может привести к игнорированию некоторых реальных аномалий, особенно если они менее выражены. Рассмотрим несколько подходов к настройке K:
-
Анализ исторических данных: Начните с анализа исторических данных для определения нормального распределения ошибок предсказания. Вы можете визуализировать распределение, чтобы определить, какое значение K наилучшим образом отделяет нормальные значения от аномалий.
-
Кросс-валидация: Используйте кросс-валидацию на ваших данных для разных значений K. Определяйте, при каком значении K у вас наименьшая степень ложноположительных и ложноотрицательных срабатываний. Это позволит вам гибко подстраиваться под определенные паттерны в данных.
-
Проверка чувствительности: Проведите анализ чувствительности изменения K. Сильное изменение K может значительно повлиять на результаты. Возможно, имеет смысл протестировать K от 1 до 10 и наблюдать за изменениями уровня обнаруживаемых аномалий.
Взаимосвязь аномалий и порогов
Пороги имеют критическое значение для обнаружения аномалий, поскольку зависят от распределения данных и глубины их анализа:
-
Сезонность и тренды: Поскольку ваши данные могут иметь сезонные колебания, учитывайте это при установлении порогов. Базирующееся на ограничении K может оказаться недостаточным, если ваш набор данных показывает четкие сезонные изменчивости.
-
Определение аномалий: Аномалии, которые вы хотите обнаружить (например, пики потребления электроэнергии), могут требовать различных методов, в зависимости от их наличия. Возможно использование нескольких подходов к оценке аномалий и комбинирование их результатов.
-
Обратная связь от модели: С каждой новой моделью вам следует учитывать, как пороги работают. Проводите регулярные обзоры и тесты, чтобы сравнивать различия в результатах при использовании разных моделей и различных параметров K.
Общая стратегия
Помимо настройки K, вам следует рассмотреть следующие аспекты:
-
Модели фиксированной актуальности: Вам не обязательно создавать новую модель каждый день. Проведение более длительного обучения на предыдущих данных может помочь в выявлении более стабильных паттернов и снижении влияния шумов, которые могут возникнуть в короткосрочных временных рамках.
-
Использование дополнительных методов: Сочетайте различные подходы для обнаружения аномалий, включая использование методов машинного обучения (например, метод ближайших соседей, деревья решений и т. д.) и статистические методы (например, проверка стандартного отклонения). Это позволит создать более устойчивую систему для обнаружения различных типов аномалий.
-
Правила на основе доменной экспертизы: Включение специфических правил, основанных на знаниях домена, может помочь унифицировать ваше обнаружение аномалий. Например, если вы знаете, что аномальные значения не могут быть меньше нуля, добавьте правило, исключающее такие случаи.
В заключение, настройка значений K и порогов для обнаружения аномалий требует комплексного подхода и постоянного тестирования и анализа. Используйте кросс-валидацию для нахождения оптимальных значений и рассматривайте возможность комбинирования различных методов, чтобы повысить точность и надежность вашей системы обнаружения аномалий.