Вопрос или проблема
Я следую этому руководству https://towardsdatascience.com/lstm-autoencoder-for-anomaly-detection-e1f4f2ee7ccf, чтобы использовать LSTM автокодировщик для обнаружения аномалий в моем несупервизируемом наборе данных. Они построили распределение потерь, и я также построил такое же распределение потерь на своем наборе данных, как показано на изображении ниже.
Мой вопрос в том, как они устанавливают пороговое значение, глядя на распределение потерь. Я также хочу установить порог, глядя на свое распределение потерь, но не понимаю, как выбрать порог. Они говорят в руководстве: “Построив распределение потерь рассчитанных потерь в обучающем наборе, мы можем определить подходящее пороговое значение для выявления аномалии. При этом можно убедиться, что этот порог установлен выше уровня “шума”, чтобы не возникали ложные срабатывания.”
Без размеченных данных невозможно оценить, сколько ложных срабатываний (ложноположительных) или пропущенных обнаружений (ложноотрицательных) будет у системы обнаружения аномалий.
Что можно сделать, так это установить порог решения на основе того, сколько положительных результатов (независимо от того, истинные они или ложные) вы готовы принять. Эта цифра должна определяться на основе ваших бизнес-обстоятельств.
Например, у вас есть 1000 потенциальных случаев мошенничества, приходящих на рассмотрение в день, 1 час для проверки подозрительных случаев и в среднем 0,1 часа на случай. Тогда у вас есть возможность рассмотреть 10 случаев, или 1% от общего числа.
Затем установите порог оценки аномалии на 99-й процентиль, ожидая принять около 1%.
Ответ или решение
Чтобы установить пороговое значение, опираясь на распределение потерь в задаче обнаружения аномалий, необходимо учитывать несколько важных факторов. Давайте рассмотрим процесс более подробно.
Понимание распределения потерь
В процессе обучения LSTM автоэнкодера для обнаружения аномалий, вы будете следить за функцией потерь (loss function), которую модель генерирует во время тренировки. После завершения обучения, вы можете построить график распределения потерь на обучающей выборке. Обычно распределение потерь будет иметь нормальную форму с некоторыми выбросами, соответствующими аномальным данным.
Установление порога
В учебнике упоминается, что пороговое значение должно быть установлено выше уровня шума, чтобы избежать ложных срабатываний (false positives). Одна из стратегий для установки порогового значения заключается в следующем:
-
Постройте распределение потерь: Создайте гистограмму или график плотности распределения значений потерь для ваших обучающих данных. Это поможет визуализировать, как распределены ваши потери.
-
Оцените уровень шума: Проанализируйте, где находятся значения потерь большинства ваших данных. Обычно, это область, где сосредоточены 95-98% ваших точек данных. Значения, выходящие за пределы этого диапазона, можно считать потенциальными аномалиями.
-
Установите порог:
- Один из простых способов — определить пороговое значение на уровне 95-99% процентиля потерь. Это означает, что вы можете ожидать, что лишь 1-5% ваших входящих данных будут классифицированы как аномалии.
- Например, если ваш 95-й процентиль потерь равен 0.04, вы можете установить порог на этом уровне. Все входящие данные, потери которых превышают 0.04, будут считаться аномалиями.
Учет бизнес-контекста
При установлении порога важно учитывать бизнес-контекст. Например, если вы обрабатываете нагрузку, где допустимо лишь небольшое количество ложных срабатываний, вам нужно будет установить более строгий порог. В обратном случае, если критично не пропустить реальные аномалии, возможно, стоит установить более низкий порог, увеличивая тем самым риск ложных срабатываний.
Примерный расчет:
Если вы знаете, что можете обрабатывать 10 потенциальных случаев аномалий в день и все ваши случаи равны примерно 1000, вы можете установить порог на уровне 99-го процентиля. Это даст вам возможность отбирать только 1% ваших данных, которые вы хотите расследовать каждый день.
Заключение
Установление порога для обнаружения аномалий — это баланс между чувствительностью и специфичностью модели. Всегда полезно протестировать несколько разных значений порога и проверить, как они влияют на ваши результаты, даже если у вас нет разметки для проверки точности. Если будут какие-либо дополнительные вопросы или вам потребуется более глубокая помощь в конкретной ситуации, не стесняйтесь задавать их.