Привет, Хабр!

Меня зовут Андрей Бирюков. Я — независимый эксперт в области ИТ и ИБ, преподаю в учебных центрах и пишу статьи и книги.

Давайте на секунду представим почти реальную ситуацию: вы настроили модель прогнозирования спроса в ритейле. И сначала всё работало идеально, но потом наступила очередная «Черная пятница» (или локдаун, или новый конкурент на рынке) — и модель начала катастрофически ошибаться. То есть, данные изменились, модель устарела, а бизнес начал терять деньги. В этой статье мы посмотрим, какие проблемы возникают при таком изменении, и что с этим можно сделать.

Собственно, нельзя сказать, что это чисто гипотетическая проблема. На самом деле концептуальный дрейф (concept drift) — изменение самой связи между входными признаками и целевой переменной P(Y|X), когда модель становится фундаментально неверной, а не просто неопределенной. В отличие от дрейфа данных, где меняется распределение признаков, но связь остается прежней, концептуальный дрейф требует принципиально иного подхода.

Ловушка ежемесячного переобучения

Классический подход к решению этой проблемы — периодическое переобучение. Вроде бы звучит вполне разумно — данные могли измениться, значит надо просто периодически переобучать модель. Но на самом деле такой подход проигрывает по двум причинам:

  • Ресурсы тратятся впустую в стабильные периоды, когда модель и так работает хорошо.

  • Резкие события (внезапный всплеск спроса, пандемия) происходят между плановыми переобучениями, и модель продолжает выдавать ошибочные прогнозы.

И именно здесь на сцену выходят онлайн‑алгоритмы и детекторы дрейфа, о которых мы будем говорить дальше.

Не просто быстрее, а принципиально иначе

Онлайн‑обучение — это когда модель обновляется на каждом новом примере, а не на батче. И это не ускоренная версия пакетного обучения, а другой математический подход.

Возьмем в качестве примера градиентный бустинг. В классической реализации вы накапливаете данные, строите дерево, вычисляете градиенты. В онлайн‑версии, например, в реализации SGBT (Streaming Gradient Boosted Trees), каждое дерево в ансамбле обновляется по одному сэмплу: вычисляется градиент и гессиан функции потерь на текущем остатке, обновляются гистограммы для поиска оптимальных разбиений, а решения о сплитах принимаются на основе границы Хефдинга (Hoeffding bound) — статистического критерия, гарантирующего, что при достаточном количестве наблюдений выбранный сплит будет оптимальным с высокой вероятностью.

Ключевое отличие от warm_start=True в sklearn — тот просто использует старые веса как инициализацию для нового fit() и при большом объеме новых данных сходится к тому же результату, что и обучение с нуля. Онлайн‑обучение через partial_fit или специализированные алгоритмы — это истинное инкрементальное обновление, концептуально эквивалентное обучению на объединенном датасете, но без хранения истории. 

Детекция дрейфа: ADWIN как страж границ

Но даже онлайн‑обучение не решает проблему полностью. Дело в том, что если изменились сами паттерны, простые инкрементальные обновления могут оказаться хуже, чем игнорирование старых данных и переобучение на новом окне.

И здесь нам на помощь приходит детектор и лучший кандидат для потоковых данных — ADWIN (ADaptive WINdowing).

Как это работает технически? ADWIN поддерживает скользящее окно данных переменного размера, используя экспоненциальную гистограмму как базовую структуру. Вместо того, чтобы хранить каждый элемент, гистограмма группирует данные в «корзины» экспоненциально растущего размера: свежие данные — маленькие корзины, старые — большие. Каждая корзина хранит только сумму и дисперсию, что дает логарифмическую память O(log n).

Этот алгоритм на каждом шаге выполняет следующие действия:

  1. Добавляет новый элемент в гистограмму.

  2. Сжимает корзины при необходимости.

  3. Запускает cut detection — поиск точки разреза, где распределения в двух подокнах значимо различаются.

Cut detection итеративно перебирает возможные точки разделения и проверяет гипотезу о равенстве средних в двух подокнах. Если разница превышает порог, зависящий от δ (чувствительности), — дрейф обнаружен, и все данные до точки разреза отбрасываются.

Вычислительная сложность cut detection — O(log n) благодаря экспоненциальной гистограмме, что делает алгоритм пригодным для высокоскоростных потоков. А параллельные реализации (Optimistic ADWIN) могут обрабатывать миллионы событий в секунду, разделяя обновление гистограммы и cut‑проверки на разные потоки. 

Гибридная стратегия

В реальной системе детектор дрейфа и онлайн‑обучение работают в связке. Например, архитектура потокового градиентного бустинга выглядит так:

Для каждого нового сэмпла (x, y):

Вычисляем предсказание ансамбля: F(x) = base + lr * Σ tree_s(x)

Для каждого дерева:

  • вычисляем градиент и гессиан на остатке;

  • обновляем гистограммы;

  • проверяем сплиты по границе Хефдинга;

  • передаем стандартизированную ошибку в детектор дрейфа;

Если детектор сигнализирует о дрейфе — заменяем дерево на новое

При этом, каждое дерево в ансамбле имеет свой собственный детектор дрейфа (ADWIN, Page‑Hinkley или DDM). При обнаружении дрейфа конкретное дерево заменяется на свежее, а остальная часть ансамбля сохраняет накопленное знание. Это дает плавную адаптацию без катастрофического забывания.

Когда этот подход НЕ нужен: экспертный фильтр

Теперь давайте рассмотрим самое важное — когда не стоит использовать эту архитектуру. Экспертное правило здесь звучит следующим образом.

Не применяйте эту стратегию, если:

  1. У вас недостаточно данных для надежного обнаружения дрейфа. ADWIN требует статистически значимого объема наблюдений для уверенного cut detection.

  2. Дрейф циклический и предсказуемый. Сезонность — это не концептуальный дрейф. Если вы знаете, что в ноябре спрос на электронику растет, а в январе падает — это сезонность, а не дрейф. Используйте декомпозицию временных рядов, а не детектор дрейфа, чтобы не плодить ложные срабатывания.

  3. Вы работаете с изображениями или текстами. Для этих задач архитектуры типа Transformer с дообучением на новых данных дают лучшие результаты, чем онлайн‑бустинг.

  4. Вам важна интерпретируемость каждого обновления. В онлайн‑режиме сложно отследить, какое именно обновление привело к изменению предсказаний.

Дрейф происходит слишком медленно и незаметно. Для постепенных изменений может быть достаточно простого скользящего окна без сложной детекции.

Выводы

Концептуальный дрейф — неизбежная реальность продакшн‑систем ИИ. Но вместо того, чтобы переобучать модели по расписанию и надеяться на лучшее, можно построить систему, которая будет сама адаптироваться в реальном времени и сигнализировать об изменениях.

Сочетание онлайн‑градиентного бустинга с детекцией на основе ADWIN дает практически полное решение: модель учится непрерывно, детектор следит за изменением распределений, а при обнаружении дрейфа происходит точечная замена устаревших компонентов ансамбля.

Но главное — понимать границы применимости. Не каждая задача требует онлайн‑адаптации, и не каждый дрейф — это повод для перестройки модели. Умение отличить истинный концептуальный дрейф от сезонности или дрейфа данных — ключевая компетенция инженера ML, работающего в продуктивной среде.


На практике проблемы с качеством модели часто начинаются не в ноутбуке, а после выхода в прод: данные меняются, паттерны устаревают, а ошибки начинают стоить бизнесу денег.

Если хотите глубже разобраться в ML‑задачах и прогнозировании, в OTUS пройдут бесплатные уроки по теме:

  • 15 июля в 18:00 — «Решаем задачу регрессии методами ML на Python». Записаться

  • 10 августа в 18:00 — «Технологии продвинутого Data Science: что под капотом». Записаться

  • 24 августа в 20:00 — «Современные модели прогнозирования типа TimesNet и TimeGPT». Записаться

На занятиях разберем практические подходы к работе с моделями, прогнозированием и современным Data Science. Регистрируйтесь, если хотите увереннее работать с ML не только в учебных примерах, но и в задачах, где данные ведут себя нестабильно.

Больше открытых уроков июля смотрите в дайджесте.