Недавно мы внедрили в продакшн собственную foundation-модель для поиска аномалий в поведении пользователей – DivergentGPT. Разработку этой модели мы начали в прошлом году, и целью было сократить поток событий безопасности, который поступает к аналитику и требует много времени на обработку. Ведущий эксперт отдела анализа данных NGR Softlab Павел Владимиров рассказывает, как работает модель, каких промежуточных результатов удалось добиться и как мы планируем развивать её дальше.
Коротко о DivergentGPT
DivergentGPT — это первая foundation-модель, которую мы построили специально под поиск аномалий во временных рядах. Под foundation-моделью мы понимаем универсальную предобученную модель, которая сначала обучается на большом объёме разнообразных данных, а затем может применяться для решения широкого класса прикладных задач без необходимости создавать отдельную модель под каждый конкретный сценарий. Такой подход хорошо известен по большим языковым моделям (LLM), однако концепция foundation-моделей не ограничивается обработкой текста и может использоваться для работы с временными рядами, событиями безопасности, телеметрией и другими типами данных.
Идея простая: вместо предсказания одного следующего значения модель выдаёт распределение вероятностей по упорядоченным токенам, и по ширине этого распределения мы решаем, выглядит ли новое наблюдение нормальным или подозрительным. Это тот же приём anomaly detection by prediction, но с трансформером, который уже видел много разных временных рядов на этапе предобучения.
Идея простая: вместо предсказания одного следующего значения модель выдаёт распределение вероятностей по упорядоченным токенам, и по ширине этого распределения мы решаем, выглядит ли новое наблюдение нормальным или подозрительным. Это тот же приём anomaly detection by prediction, но с трансформером, который уже видел много разных временных рядов на этапе предобучения.
Для продакшена важны прежде всего размер модели и поверхность развёртывания:
- Foundation-модель для time-series anomaly detection. Предобучена на большом наборе реальных и синтетических рядов, поэтому хорошо обобщается на новые сигналы без отдельного обучения под каждый.
- Очень лёгкая. Около 0.05B параметров — примерно 30 МБ в BF16. На таких размерах GPU-бюджеты вообще не приходится планировать.
- Инференс прямо внутри ClickHouse через UDF. Это позволяет работать с данными сразу внутри базы без необходимости использовать дополнительные инструменты обработки, которые вносили бы значительные задержки во время анализа.
Последний пункт — это то, без чего вся затея в нашем масштабе не взлетела бы. Это позволяет работать с данными сразу внутри хранилища данных без необходимости использовать дополнительные инструменты обработки, которые вносили бы значительные задержки во время анализа.
Как DivergentGPT встал в модуль поведенческой аналитики xBA
В xBA уже есть рабочий слой поиска аномалий — он построен на статистическом алгоритме, который быстрый, понятный и отлично ловит подозрительное поведение, хотя всё же требует дополнительного анализа со стороны аналитика. Честная мотивация для добавления DivergentGPT была не в том, чтобы заменить этот алгоритм, а в том, чтобы дополнить его более интеллектуальной второй ступенью.
Статистические детекторы хорошо отвечают на вопрос «здесь что-то не так?», но у них почти нет памяти о том, как «не так» выглядит на тысячах других сигналов. У foundation-модели такая память есть. Поэтому интеграция получилась двухступенчатой фильтром:
Статистические детекторы хорошо отвечают на вопрос «здесь что-то не так?», но у них почти нет памяти о том, как «не так» выглядит на тысячах других сигналов. У foundation-модели такая память есть. Поэтому интеграция получилась двухступенчатой фильтром:
- Быстрый статистический алгоритм продолжает в реальном времени просматривать события и формирует поток кандидатов на аномалию. Этот этап мы не трогали.
- DivergentGPT смотрит на тех же кандидатов свежим взглядом и даёт второе мнение: реальная это аномалия или статистический алгоритм среагировал на обычное колебание.
Зачем нам этот фильтр, даже если он медленный
DivergentGPT — это трансформер, и даже на 0.05B параметров его инференс на несколько порядков медленнее, чем подсчёт агрегатов в статистическом детекторе. Если попробовать использовать модель для анализа каждого события, она просто не успеет.
Но в роли второй ступени картина переворачивается. Поток кандидатов от статистического слоя уже узкий — это далеко не все события, а лишь те, которые алгоритм счёл подозрительными. И именно на этом узком потоке цена ошибки максимальна: каждый ложноположительный алерт срабатывает у аналитика и забирает его время. Уменьшение false-positive здесь напрямую конвертируется в сэкономленные часы людей и в более высокое доверие к системе в целом — аналитики начинают реагировать быстрее, когда привыкают, что алерт почти всегда означает реальную проблему.
То есть мы сознательно тратим больше процессорного времени на каждого кандидата, чтобы сэкономить значительно более дорогой ресурс — внимание аналитика xBA. Многоузловое исполнение в ClickHouse и UDF делают этот компромисс реально достижимым: модель работает прямо там, где лежат данные, параллельно по шардам, без лишних промежуточных преобразований.
Но в роли второй ступени картина переворачивается. Поток кандидатов от статистического слоя уже узкий — это далеко не все события, а лишь те, которые алгоритм счёл подозрительными. И именно на этом узком потоке цена ошибки максимальна: каждый ложноположительный алерт срабатывает у аналитика и забирает его время. Уменьшение false-positive здесь напрямую конвертируется в сэкономленные часы людей и в более высокое доверие к системе в целом — аналитики начинают реагировать быстрее, когда привыкают, что алерт почти всегда означает реальную проблему.
То есть мы сознательно тратим больше процессорного времени на каждого кандидата, чтобы сэкономить значительно более дорогой ресурс — внимание аналитика xBA. Многоузловое исполнение в ClickHouse и UDF делают этот компромисс реально достижимым: модель работает прямо там, где лежат данные, параллельно по шардам, без лишних промежуточных преобразований.
Почему DivergentGPT хорошо подходит на эту роль
Несколько свойств модели делают её именно фильтром, а не более дорогим дублёром статистического слоя:
Вместе это ровно то, чего ждёшь от «второго мнения» после быстрого статистического детектора.
- Внимание и более «интеллектуальный» анализ. Трансформер не просто сравнивает свежее значение со скользящим baseline-ом — он умеет учитывать паттерны из более ранней части окна, когда решает, насколько неожиданно текущее значение.
- Длиннее эффективное окно контекста. Окно, которое мы подаём в DivergentGPT, заметно длиннее того, с которым работает статистический алгоритм, и это позволяет модели замечать периодичности и медленные дрейфы, которые короткому окну просто не видны.
- Предобучение на разнообразных рядах. За счёт того, что во время pre-training модель видела много вариантов нормальных и аномальных значений, она устойчивее себя ведёт на сигналах, под которые её специально не настраивали.
- Специализация вместо универсальности. Благодаря тому, что DivergentGPT создавался под конкретный класс задач – поиск аномалий во временных рядах – он значительно компактнее универсальных LLM, требует меньше вычислительных ресурсов и может использоваться непосредственно в производственном контуре без выделенной ИИ-инфраструктуры.
Вместе это ровно то, чего ждёшь от «второго мнения» после быстрого статистического детектора.
Что дальше
Запуск в продакшен — это не финал, а начало той части, где появляется реальный фидбек. Продолжаем работу в следующих направлениях:
Пока же мы больше всего ждём, как модель поведёт себя на реальном трафике в Dataplan и что скажут аналитики, которые начнут с ней работать в xBA. Если у вас был опыт деплоя transformer-based детекторов рядом с потоковой базой — будет очень интересно услышать, что вас удивило в продакшене. Обычно именно там и живут самые интересные баги.
- Расширение окна контекста. Хотим увеличить длину окна, чтобы модель могла рассуждать над более длинной историей, не теряя точности.
- Динамический файнтюнинг. Дать модели подстраиваться под данные конкретного развёртывания, а не полагаться только на предобученные веса. Лёгкий CPU-friendly размер делает это вполне реалистичным.
- Анализ многомерных временных рядов. Сейчас DivergentGPT работает с отдельными сигналами. Логичный следующий шаг — научить её смотреть на коррелированные ряды совместно: большинство интересных аномалий в security-телеметрии заметнее всего на пересечении нескольких сигналов, а не внутри одного.
Пока же мы больше всего ждём, как модель поведёт себя на реальном трафике в Dataplan и что скажут аналитики, которые начнут с ней работать в xBA. Если у вас был опыт деплоя transformer-based детекторов рядом с потоковой базой — будет очень интересно услышать, что вас удивило в продакшене. Обычно именно там и живут самые интересные баги.