Data Drift
«Как приручить ИИ»Data Drift — изменение статистических свойств данных для модели машинного обучения с течением времени.
Представьте: вы и ваша команда доделали модель, все работает как надо. Модель редко ошибается, вы довольны и уже набираете из беклога новые задачи. Но тут к вам приходят и показывают картинку про старую модель примерно следующего содержания:
Что случилось? Вы идете по всем разработчикам и задаете один и тот же вопрос: «Что меняли в модели? Почему упало качество, мы же все проверяли, как это произошло?». Но никто и ничего не менял. В чем же дело?
Вполне вероятно, что вы столкнулись с таким явлением как Data Drift. Data drift — процесс, из-за которого с течением времени данные меняют свои характеристики.
Представьте, когда вы разрабатывали вашу модель, аудитория вашего приложения состояла преимущественно из лиц 20-30 лет. И ваша модель привыкла жить в мире, где мат.ожидание возраста — 25, где самое частое семейное положение — холост, а соотношение мужчин и женщин пока примерно 50 на 50 (со временем эта пропорция меняется). Ваши маркетологи устроили новую пиар-компанию и теперь доля людей старше 50 сильно увеличилась. Теперь мат.ожидание возраста — примерно 35, самое частое семейное положение — женат/замужем, а пропорция по полу изменилась в сторону женщин. Но, кто успел предупредить об этом модель? А никто, хотя следовало бы.
Что же делать?
Если с вами приключилась такая ситуация, то не остается только переобучить модель на новых данных. Вам нужно:
1. Собрать новый обучающий датасет.
2. Переобучить модель.
3. Удостовериться, что модель снова дает приемлемое качество.
4. Раскатить новую модель в продакшн.
Но неужели единственный способ победить дата-дрифт это ждать, пока модель просядет в качестве и переобучать ее? Слава богу нет.
Как жить в мире где есть дата дрифт?
Первое и самое простое. Если что-то постоянно влияет на распределение в ваших данных (а это неизбежно: все мы, например, знаем о таком понятии как «сезонность»), то можно поставить переобучение модели «на расписание».
Например, давайте сделаем так, чтобы у нас будет специальная программа, которая раз в неделю/две недели/месяц переобучает нашу модель. Тогда мы решим проблему дата дрифта превентивно — в продакшене всегда будет модель, которая обучена на последних данных, которые имеют распределение наиболее близкое к реальному.
Тут внимательный читатель задаст вопрос: что если, маркетологи привели на сайт новых клиентов на следующий день после переобучения модели, а следующее переобучение запланировано через месяц? Получается, что мы будем 30 дней ждать нового переобучения и жить в мире, где модель показывает не то качество, на которое мы рассчитывали? Конечно нет.
Наша идея в следующем: давайте постоянно следить за распределениями в данных, с которыми работает наша модель. И как только мы увидим, что в этих распределениях произошли изменения — будем переобучать модель.
Проще говоря, давайте выстроим систему мониторинга распределения наших данных.
Что будем мониторить?
Давайте договоримся, что мы будет мерить распределения двух типов: самих данных и распределение предсказаний модели.
Начнем с предсказаний. Допустим, мы обучаем модель бинарной классификации (модель отвечает «да» или «нет»). И очень долго наша модель выдает примерно такие пропорции 30% — да, 70% — нет. И тут, мы видим, что модель начала давать пропорцию 50% — да, 50% — нет. Очевидно, что что-то во входных данных изменилось. И возможно нам стоит переобучить модель прямо сейчас, не дожидаясь момента автоматического переобучения.
С фичами ситуация похожая. Допустим, мы смотрим на какую-то фичу, которую мы используем для предсказаний модели и видим там следующую картину:
Очевидно, что модель работает на данных не с тем распределением, на которых училась. И есть вероятность, что ее пора переобучать.
Получается, достаточно просто смотреть на графики?
Однозначно — смотреть на графики лучше, чем не смотреть на графики. Но в реальной жизни по ним не всегда легко сделать вывод: поменялось ли распределение и изменилось ли оно так, что повлияло на качество модели. Поэтому вам и вашей команде предстоит провести расследование, чтобы выяснить какой сдвиг в данных вы будете считать значимым, и после какого сдвига вы будете переобучать модель. Каких-то единых правит тут, к сожалению, нет. Это действительно сложная аналитическая задача, которую каждой команде предстоит решать самостоятельно, выясняя, изменения в каких фичах больше всего влияют на качество модели. Но такой анализ в дальнейшем точно окупится.
Правильно ли я понимаю, что мы заводим задачку на разработку системы мониторинга?
В целом, вы можете реализовать свою собственную систему мониторинга. Во-первых это хороший опыт, во-вторых, будет, что в резюме добавить. Однако, если времени у вас не так много, то вот парочка готовых решений:
1. Evidently AI — зрелый продукт, большое комьюнити, в общем рекомендую. https://www.evidentlyai.com/
2. Arize AI — платформа мониторинга и наблюдения за моделями машинного обучения, разработанная для обеспечения их производительности и надежности в производственной среде. Она предлагает пользователям аналитические инструменты, которые помогают обнаруживать, диагностировать и устранять проблемы в работе моделей машинного обучения, снижение производительности модели и другие аномалии.
Спасибо, что дочитали!