Объясняется просто

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

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

А если вы хотите задать свой вопрос, добро пожаловать на наш сервер сообщества!

Вот первый.

В чем разница между обнаружением выбросов и дрейфом данных?

При мониторинге моделей машинного обучения в производстве мы можем применять разные методы.

Среди них дрейф данных и обнаружение выбросов. И то, и другое полезно, когда у нас еще нет меток наземной истины. Данные - это единственное, на что нужно смотреть.

Существуют различные статистические подходы к обнаружению (само по себе интересное обсуждение!), но есть и принципиальная разница.

Фокус: весь набор данных VS отдельные объекты

Когда мы говорим об обнаружении дрейфа, мы рассматриваем «глобальное» распределение данных во всем наборе данных. Мы хотим знать, значительно ли они изменились по сравнению с прошлым периодом или модельным обучением.

Мы проводим анализ дрейфа, чтобы проверить, верно ли это.

Дрейф данных может выглядеть как постепенное изменение свойств объекта. В этом упрощенном примере мы наблюдаем изменение распределения признаков «цвет» и «положение», в то время как «форма» и «размер» остаются неизменными.

Предполагая, что все функции очень важны, это похоже на то, на что мы должны реагировать! Например, путем переобучения модели, чтобы она изучила новый шаблон.

Когда мы ищем выбросы, мы хотим найти в наших входных данных отдельные «необычные» или «другие» объекты. Эти объекты могут время от времени появляться как в обучающих, так и в производственных данных. Мы называем их аномалиями или выбросами, намекая на то, что редко ожидаем этого.

В этом примере некоторые объекты будут выделяться, поскольку их «форма», «положение», «размер» или «цвет» сильно отличаются от остальных.

Например, мы можем захотеть обнаружить их и отправить на ручную проверку.

Дрейф данных и выбросы могут существовать независимо друг от друга. Весь набор данных может дрейфовать без выбросов. Отдельный выброс может легко появиться без смещения данных.

Когда дело доходит до мониторинга, мы можем захотеть следить за обоими. У нас были бы разные ожидания и рабочие процессы для каждого из них.

Решение: могу ли я доверять модели VS могу ли я доверять прогнозу?

Когда мы отслеживаем дрейф, наша цель состоит в том, чтобы решить, можем ли мы доверять модели по-прежнему работает так, как ожидалось. Предполагается, что если распределения данных аналогичны тому, на чем обучалась модель, в целом она должна работать хорошо.

Если дистрибутивы изменились, может потребоваться обновление всей системы.

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

Когда мы отслеживаем выбросы, наша цель состоит в том, чтобы решить, можем ли мы верить в то, что модель хорошо работает на конкретных входных данных. Предполагается, что если конкретный объект «слишком далек» от всего, что известно модели, на этот раз она, вероятно, не сможет сделать очень хороший прогноз.

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

Эти различия также влияют на то, как мы разрабатываем проверки, применяемые в каждом случае.

Дизайн теста: надежность VS чувствительность

Мы хотим, чтобы детектор дрейфа был устойчив к выбросам.

Например, он не должен вызывать тревогу, если есть один сломанный вход. Он должен реагировать только тогда, когда мы видим «достаточно» изменений в целом.

Часто этого можно достичь, выбрав правильный статистический тест для сравнения распределения данных по отдельным функциям: например. Колмогорова-Смирнова, Андерсона-Дарлинга или критерия хи-квадрат. По-прежнему существует множество нюансов относительно того, какой тест когда выбрать. Мы работаем над выбором разумных значений по умолчанию для очевидно библиотеки с открытым исходным кодом, чтобы решить эту проблему.

С другой стороны, мы хотим, чтобы детектор выбросов был достаточно чувствительным.

Он должен вызывать тревогу, когда отдельные объекты выглядят «странно» еще до того, как изменения накопится и достигнут критической массы. Скорее всего, мы выберем другой тест, например, алгоритм изолированного леса или одноклассовый SVM.

Обнаружение выбросов часто важно, когда цена одной ошибки модели высока. Скорее всего, мы потерпим некоторые ложные срабатывания, чтобы провести дополнительную выборочную проверку.

Тестовое приложение: одно, оба или ни одно

Всегда ли нам нужны оба теста? Не совсем.

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

В противном случае, если цена отдельной ошибки модели не слишком высока, мы могли бы быть в порядке, если бы наши прогнозы время от времени оказывались ошибочными из-за выбросов.

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

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

Подведение итогов

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

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

Обнаружение дрейфа данных помогает определить, когда изменилось общее распределение входных данных. Мы разрабатываем этот тест так, чтобы он был устойчивым к выбросам, чтобы он предупреждал только о значимых сдвигах. Обычно мы реагируем на дрейф, переобучая или обновляя модель.

Обнаружение выбросов помогает обнаруживать отдельные необычные входные данные. Мы разрабатываем этот тест так, чтобы он был достаточно чувствительным, чтобы обнаруживать одно отклонение входных данных. Обычно мы реагируем на выбросы, применяя некоторую бизнес-логику или вручную обрабатывая этот отдельный объект для принятия решения.

Есть вопрос о производственном машинном обучении? Присоединяйтесь к нашему сообществу Discord и задавайте вопросы на канале #ds-ml-questions.

Этот блог изначально был опубликован на https://evidentlyai.com. Спасибо моему сооснователю Эмели Драл за соавтор статьи.

В Evidently AI мы создаем инструменты с открытым исходным кодом для анализа и мониторинга моделей машинного обучения. Проверьте наш проект на GitHub и поставьте ему звезду, если он вам понравился!

Хотите быть в курсе событий?