Дрейф данных (Drift Data) — это ситуация, когда статистические свойства входных данных для модели машинного обучения изменяются со временем. При дрейфе данных взаимосвязи между признаками и самой целевой переменной перестают быть действительными. Это может привести к низкой производительности модели, неточным прогнозам и даже к сбоям.

Почему происходит дрейф моделей
Модели машинного обучения могут испытывать дрейф с течением времени по нескольким причинам. Одна из наиболее распространенных причин — устаревание данных, используемых для обучения модели, или их несоответствие текущим условиям. Другая причина дрейфа заключается в том, что некоторые модели не предназначены для адаптации к изменениям данных. Хотя некоторые модели лучше приспособлены для обработки этих изменений, ни одна модель не застрахована от дрейфа.
Например, предположим, что модель машинного обучения предназначена для прогнозирования цены акций компании с использованием исторических данных. Если она обучена на данных со стабильного рынка, она может показать хорошие результаты на начальном этапе. Однако, если рынок станет более волатильным, модель может начать испытывать трудности с точностью прогнозов, поскольку статистические характеристики данных изменятся.
Типы дрейфа данных
1. Дрейф концепции
Дрейф концепции относится к изменению статистической связи между входными признаками (X) и целевой переменной (Y) с течением времени. Это означает, что закономерности, изученные моделью машинного обучения в определенный момент, могут перестать быть актуальными в будущем, что влияет на производительность модели и ее способность к обобщению.
Дрейф концепции можно условно разделить на четыре типа:

Внезапный дрейф: быстрое изменение распределения данных, при котором новая концепция полностью заменяет старую. Это часто приводит к немедленному снижению точности модели, если не принять соответствующие меры.
Постепенный дрейф: распределение данных изменяется медленно с течением времени, позволяя старым и новым концепциям сосуществовать некоторое время. Модель может по-прежнему показывать достаточно хорошие результаты во время этого перехода, но производительность снижается, если адаптация задерживается.
Постепенный дрейф: Изменение концепции происходит посредством последовательности небольших, постепенных изменений. Каждый шаг вносит небольшое отклонение, в конечном итоге приводя к совершенно другой концепции. Этот тип дрейфа может быть незаметным и трудно обнаружить.
Повторяющийся или сезонный дрейф: Ранее наблюдаемые концепции появляются снова через определенный период. Например, сезонные закономерности в розничных продажах или циклическое поведение пользователей могут привести к повторному появлению определенных распределений данных, что требует от моделей сохранения памяти о прошлых состояниях.
2. Дрейф ковариат
Дрейф ковариат происходит, когда распределение входных признаков изменяется со временем, в то время как условная связь между входными данными (X) и целевым выходом (Y) остается неизменной. Проще говоря, изменяется способ распределения входных данных, но базовое отображение от X к Y остается неизменным. Это все еще может повлиять на производительность модели, если модель подвергается воздействию входных шаблонов, с которыми она не сталкивалась во время обучения.
Алгоритмы для обнаружения дрейфа данных
1. Критерий Колмогорова-Смирнова (К-С)
Критерий Колмогорова-Смирнова (К-С) — это статистический тест, используемый для определения того, происходят ли два набора данных из одного и того же распределения. Он не предполагает какой-либо конкретной формы распределения, что делает его подходящим для широкого спектра приложений. Этот метод часто применяется в ситуациях, когда необходимо проверить, взята ли выборка данных из определенной популяции, или сравнить две разные выборки, чтобы оценить, принадлежат ли они к одному и тому же распределению.
Механизм: Тест работает путем сравнения кумулятивных функций распределения (КФР) двух наборов данных. Он анализирует распределение значений в каждом наборе данных и пошагово суммирует их. По умолчанию тест предполагает, что оба набора данных принадлежат к одному и тому же распределению. Если это предположение отклоняется, это означает, что, вероятно, существует разница в распределениях, указывающая на дрейф данных.
2. Индекс стабильности популяции (PSI)
Индекс стабильности популяции (PSI) — это статистический показатель, используемый для оценки того, насколько изменилось распределение переменной между двумя наборами данных. Он в основном используется для отслеживания изменений категориальных или непрерывных переменных с интервалами во времени. Хотя первоначально он был разработан для мониторинга стабильности кредитных рейтингов в финансовой сфере,
PSI широко используется для оценки изменений в распределении как признаков, так и целевых переменных в конвейерах машинного обучения. PSI сравнивает долю наблюдений из каждого интервала распределения переменной. Проверяется как в обучающем наборе данных, так и во входящем или тестовом наборе данных.
Разница в этих долях по всем интервалам суммируется в единый показатель PSI.
PSI < 0,1: Отсутствие значительных изменений в распределении.
0,1 ≤ PSI < 0,25: Умеренные изменения, может потребоваться более тщательный мониторинг.
PSI ≥ 0,25: Значительный дрейф, вероятно, потребуется переобучение или перекалибровка модели.
3. Метод Пейджа-Хинкли
Метод Пейджа-Хинкли — это последовательный метод обнаружения изменений среднего значения потока данных во времени. Этот метод обычно используется для мониторинга временных рядов или потоковых данных, где раннее обнаружение изменений имеет важное значение. Этот метод часто применяется для мониторинга производительности модели и обнаружения сдвигов, которые могут быть неочевидны на первый взгляд.
В начале определяется пороговое значение и функция принятия решения. Порог определяет, насколько большим должно быть изменение среднего значения для принятия решения. Функция принятия решения оценивает, произошел ли статистически значимый сдвиг на каждом временном шаге.
Затем вычисляется кумулятивная разница между наблюдаемыми значениями и их средним значением. После этого мы отслеживаем кумулятивную разницу для обнаружения отклонений, превышающих заданный порог.
Реализация обнаружения дрейфа данных
1. Импорт библиотек
Для теста Колмогорова-Смирнова мы будем использовать библиотеки Numpy, Pandas, Matplotlib, Seaborn и ks_2samp.
import numpy as np
import pandas as pd
from scipy.stats import ks_2samp
import matplotlib.pyplot as plt
import seaborn as sns
2. Генерация синтетических данных
Здесь мы генерируем синтетические данные для визуализации дрейфа данных на последующих этапах. Базовые данные имеют среднее значение 0, а новые данные — среднее значение = 2. Это имитирует входящие/тестовые данные с дрейфом (распределение сдвинуто вправо).
np.random.seed(42)
baseline_data = np.random.normal(loc=0.0, scale=1.0, size=1000)
new_data = np.random.normal(loc=2.0, scale=1.0, size=1000)
3. Визуализация распределения
Функция sns.kdeplot() в seaborn используется для построения графика оценки плотности ядра (KDE) непрерывной переменной. Это сглаженная версия гистограммы.
plt.figure(figsize=(10, 5))
sns.kdeplot(baseline_data, label='Базовые данные (N(0,1))', linewidth=2)
sns.kdeplot(new_data, label='Новые данные (N(2,1))', linewidth=2)
plt.title("Распределение базовых и новых данных")
plt.xlabel("Значение признака")
plt.ylabel("Плотность")
plt.legend()
plt.tight_layout()
plt.show()
Вывод:

4. Тест Колмогорова-Смирнова
ks_statistic, ks_pvalue = ks_2samp(baseline_data, new_data)
print("Kolmogorov-Smirnov Test Result:")
print(f"Statistic: {ks_statistic:.4f}")
print(f"P-value : {ks_pvalue:.4f}")
if ks_pvalue < 0.05:
print("Drift Detected (p < 0.05)")
else:
print("No Significant Drift Detected")
Вывод:

Результат K-S-теста: Результат, демонстрирующий дрейф данных.
Статистика: максимальная разница между двумя функциями распределения
P-значение: Вероятность того, что разница возникла случайно при предположении по умолчанию.
P-значение < 0.05, тогда можно сказать, что обнаружен значительный дрейф.
Управление дрейфом данных
После обнаружения дрейфа данных важно принять меры для обеспечения точности и надежности модели. Существует несколько эффективных методов управления дрейфом данных:
Переобучение модели: Переобучение позволяет модели изучать новые закономерности и взаимосвязи, которые могли развиться со временем. Эта стратегия лучше всего подходит, когда имеется достаточное количество размеченных данных и вычислительные ресурсы позволяют провести полную переобучение без существенных ограничений.
Обновление модели с использованием новых данных: Когда полная переобучение нецелесообразно, модели можно обновлять постепенно, используя новые данные. Трансферное обучение позволяет настраивать предварительно обученные модели с использованием последних данных. Этот подход идеально подходит для систем реального времени или систем с ограниченными ресурсами.
Корректировка признаков: Дрейф данных может снизить релевантность определенных признаков, что делает инженерию признаков критически важной стратегией корректировки. Следует вводить новые признаки, которые лучше отражают текущие тенденции, и удалять нерелевантные. Это позволяет поддерживать входные данные модели в соответствии с меняющимся ландшафтом данных.
Ансамблевое обучение: Использование ансамбля моделей, обученных на разных временных периодах, помогает нейтрализовать влияние дрейфа данных. Такие методы, как бэггинг, бустинг или стекинг, объединяют несколько прогнозов. Это повышает стабильность модели, даже когда отдельные модели показывают низкую производительность из-за дрейфа данных.

Если хотите расти дальше, логичный следующий шаг — не только уметь заметить дрейф, но и встроить мониторинг и обновление модели в продовый контур. На курсе MLOps разбираем это руками: деплой моделей в production, управление несколькими моделями и часть пайплайна вокруг них — от валидации до мониторинга. Пройдите вступительный тест, чтобы узнать, подойдет ли вам программа курса.
Для знакомства с форматом обучения и экспертами приходите на бесплатные демо-уроки:
-
25 февраля в 20:00. «Data Drift в машинном обучении: почему модели деградируют в продакшене и как это контролировать». Записаться
-
12 марта в 20:00. «Системный дизайн: как устроены реальные IT-проекты — от архитектуры до интеграции ML». Записаться
-
18 марта в 18:00. «API — учим модель общаться с внешним миром». Записаться
Больше курсов по AI и нейросетям смотрите в каталоге.
Автор: Andrey_Biryukov


