«Изменения — единственная константа в жизни».

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

С 17 марта по 6 апреля 2022 года у агентства кредитной отчетности Equifax возникла проблема с его системами, которая привела к неправильным кредитным рейтингам для потребителей.

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

Какие идентификаторы дрейфуют

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

Разница между обучающими и производственными данными может быть вызвана несколькими факторами. Это может быть неточное создание набора данных, например, использование открытых данных, не подходящих для вашего варианта использования. Например, если вы используете набор данных дорог, созданный в Европе, он будет сильно отличаться от дорог США. Если вы запускаете свои модели компьютерного зрения на дорогах США, это, вероятно, приведет к дрейфу данных.

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

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

Например, предположим, что в результате изменения предыдущей концепции (и популярности приложения) появилось обновление, которое увеличивает лимит сообщений в минуту с 30 до 50. Теперь из-за этого изменения и спамеры, и не спамеры получают очень болтливы и отправляют большое количество сообщений. Раньше, когда мы обучали модель на данных из предыдущей версии приложения, она узнавала, что пользователь, отправляющий более 10 сообщений в минуту, является спамером. Так что теперь он сойдет с ума и классифицирует всех как спамеров (кошмарный сценарий), потому что распределение функции изменилось или дрейфовало.

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

Как обнаружить дрейф данных?

Дрейф данных может быть обнаружен различными способами. Самый простой подход — использовать статистические тесты, которые сравнивают распределение обучающих данных (называемых базовыми или эталонными) и реальных данных (производственных данных). Если разница между двумя распределениями значительна, то произошел дрейф. Наиболее популярными тестами являются двухвыборочный критерий Колмогорова-Смирнова, критерий хи-квадрат, дивергенция Дженсена–Шеннона, расстояние Вассерштейна. Альтернативным подходом может быть использование модели машинного обучения для контроля качества данных. Могут быть и гибридные подходы.

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

Обнаружение дрейфа данных

import pandas as pd
from sklearn import datasets 
from evidently.dashboard import Dashboard
from evidently.dashboard.tabs import DataDriftTab, CatTargetDriftTab

Давайте воспользуемся игрушечным набором данных из пакета sklearn. Это будет набор данных Iris. Это представляет проблему классификации.

iris = datasets.load_iris()
iris_frame = pd.DataFrame(iris.data, columns = iris.feature_names)
iris_frame['target'] = iris.target

Мы будем использовать 75 первых образцов в качестве эталонных данных (данные, используемые для обучения). Будет переменная new_sampels, которая будет контролировать количество новых выборок, рассматриваемых для обнаружения дрейфа. Обнаружение дрейфа и приборная панель могут быть созданы с помощью 3 строк кода Python:

iris_data_drift_report = Dashboard(tabs=[DataDriftTab(verbose_level=verbose), 
                                         CatTargetDriftTab(verbose_level=verbose)])
iris_data_drift_report.calculate(iris_frame[:75], iris_frame[-new_samples:], column_mapping = None)
iris_data_drift_report.show(mode="inline")

Переменная verbose является логической и управляет уровнем детализации отображаемой информационной панели. Я установил его на False. Блокнот с кодом представлен ниже:

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