Sobes.tech
Back to questions
Middle
13

Как отлавливать момент изменения распределения данных (дрейф данных)?

Companies where asked
СовкомбанкСовкомбанк

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

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

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

Пример использования:

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

import numpy as np
from scipy import stats

# baseline и текущие значения одного числового признака
baseline = np.array([1.2, 1.5, 1.7, 1.6, 1.4, 1.8, 1.3])
current = np.array([2.1, 2.0, 1.9, 2.2, 2.3, 2.1, 2.4])

# простой тест на сдвиг распределения
stat, p_value = stats.ks_2samp(baseline, current)

print(f"KS statistic: {stat:.3f}, p-value: {p_value:.4f}")

if p_value < 0.05:
    print("Possible data drift detected")
else:
    print("No significant drift detected")

Пояснение кода:

Код не требует сложной логики: он показывает базовый способ сравнить две выборки одного признака.

  1. Берутся значения признака из обучающего периода как baseline.
  2. Берутся свежие данные из продакшена как current.
  3. ks_2samp проверяет, похожи ли распределения двух выборок.
  4. Если p-value меньше выбранного порога, это сигнал, что распределение могло измениться.
  5. На практике такой тест применяют не к одному признаку, а ко всем важным признакам и дополняют бизнес-метриками.

Ключевые моменты:

  • Дрейф данных лучше отслеживать по нескольким слоям: признаки, предсказания, качество модели.
  • Для числовых признаков используют статистические тесты и метрики расстояния между распределениями.
  • Для категориальных признаков контролируют изменение частот и долей классов.
  • Сам по себе дрейф признаков не всегда означает деградацию модели, но это ранний сигнал риска.
  • Нужны baseline, регулярный мониторинг и пороги алертов, а не разовая проверка.
  • Полезно отдельно отслеживать concept drift, потому что он напрямую бьёт по качеству предсказаний.