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

Но одна вещь, которая разожгла мое любопытство, это то, что мало говорится о том, что происходит, когда модели запускают в производство!!

Проблема, которую следует подчеркнуть

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

Считаете ли вы, что эта обученная модель по-прежнему «жизнеспособна» сегодня?
Повлияют ли на модель внешние факторы, такие как COVID или ситуация с работой на дому?
Да! Да, и даже если бы это было не так в данном случае, существует множество других случаев, когда факторы такого типа со временем влияют на производительность модели.

Есть две возможности, когда речь идет о мониторинге моделей ИИ в производстве:

  1. Дрейф данных. Проще говоря, это относится к изменению данных за определенный период времени. Очевидно, что по мере изменения данных модели необходимо переобучать, а метрики перепроверять.
  2. Дрейф концепции: относится к идее изменения характера или статистических свойств зависимой переменной (признака). Текущая модель будет бесполезна, если изменится характер выходной переменной.

Решение проблемы

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

NannyML: Оценка производительности реальной модели

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

NannyML фокусируется на трех ключевых моментах:

  1. Оценка реальной производительности модели (без доступа к целям)
  2. Обнаружение дрейфа многомерных данных
  3. Связать дрейф данных с изменениями в производительности модели

Давайте запачкаем руки, научившись использовать NannyML.

Практическое погружение

Первый шаг — установить пакет nannyml, который в настоящее время доступен для БЕТА-тестирования, но скоро будет доступен с открытым исходным кодом.

  1. Шаг 1. Импорт зависимостей
# Import Dependencies
import pandas as pd
import nannyml as nml

2. Шаг 2. Загрузка набора данных

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

reference, analysis, output= nml.load_synthetic_sample()
data = pd.concat([reference, analysis], ignore_index=True)
print(data.shape)
print(data.head())

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

NannyML использует два раздела набора данных:

  1. Эталонный раздел. Цель эталонного раздела — установить базовый уровень ожиданий для отслеживаемой модели машинного обучения. В эталонном разделе требуются входные данные, выходные данные и результаты производительности отслеживаемой модели.
  2. Раздел анализа: NannyML сравнивает дрейф данных и атрибуты производительности отслеживаемой модели с эталонным разделом в разделе анализа. Раздел анализа часто будет содержать самые последние производственные данные до определенного момента в прошлом, который должен быть после завершения эталонного раздела. Важно помнить, что раздел анализа не содержит информации о целевой или выходной переменной.

Итак, теперь у нас есть набор данных, разделенный на «ссылка» и «анализ».

3. Шаг 3. Извлечение метаданных

metadata = nml.extract_metadata(data = reference)
metadata.target_column_name = 'work_home_actual'

4. Шаг IV. Оцените производительность модели без цели

estimator = nml.CBPE(model_metadata=metadata, chunk_size=5000)
estimator.fit(reference)
estimated_performance = estimator.estimate(data=data)
figure = estimated_performance.plot(kind='performance')
figure.show()

Хорошо видно, что производительность модели ухудшается после середины 2019 года.

5. Шаг V. Обнаружение дрейфа данных

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

univariate_calculator = nml.UnivariateStatisticalDriftCalculator(model_metadata=metadata, chunk_size=5000)
univariate_calculator.fit(reference_data=reference)
univariate_results = univariate_calculator.calculate(data=data)
figure = univariate_results.plot(kind='feature_drift', metric='statistic', feature_label="workday")
figure.show()

Очевидно, что особенность рабочего дня не приводит к дрейфу данных в будущем. Теперь попробуем оценить, может ли функция «расстояние_от_офиса» привести к дрейфу данных.

figure = univariate_results.plot(kind='feature_drift', metric='statistic', feature_label="distance_from_office")
figure.show()

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

Таким образом, пакет NannML можно использовать для мониторинга ИИ в производстве.