Какие алгоритмы размножения редких данных (oversampling) вы знаете?

«Какие алгоритмы размножения редких данных (oversampling) вы знаете?» — вопрос из категории Предобработка данных, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При работе с несбалансированными данными я использовал несколько алгоритмов синтетического размножения миноритарного класса (oversampling):

1. SMOTE (Synthetic Minority Over-sampling Technique) Создает синтетические примеры, интерполируя между ближайшими соседями миноритарного класса. Это мой основной выбор, так как он избегает простого дублирования.

from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42, k_neighbors=5)
X_res, y_res = smote.fit_resample(X_train, y_train)

2. ADASYN (Adaptive Synthetic Sampling) Улучшение SMOTE, которое генерирует больше синтетических данных в областях, где примеры миноритарного класса сложнее классифицировать (на границе с мажоритарным классом).

3. Borderline-SMOTE Фокусируется на генерации синтетических примеров только на "границе" решения, где миноритарные примеры соседствуют с мажоритарными.

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

Практический выбор:

  • Для табличных данных с умеренным дисбалансом я начинаю с SMOTE.
  • Если модель плохо разделяет границу классов, пробую Borderline-SMOTE или ADASYN.
  • Всегда комбинирую с правильной валидацией (например, StratifiedKFold), чтобы избежать утечки данных.

Важно: Oversampling применяется только к тренировочному фолду, никогда ко всему датасету перед разбиением.