Ответ
При работе с дисбалансированными данными в градиентном бустинге (XGBoost, LightGBM, CatBoost) применяют несколько подходов:
1. Встроенные параметры для учета дисбаланса:
- XGBoost:
scale_pos_weight— устанавливает вес для положительного класса. Эмпирическое правило:scale_pos_weight = количество_негативных / количество_позитивных.import xgboost as xgb model = xgb.XGBClassifier(scale_pos_weight=10, eval_metric='logloss') - LightGBM:
is_unbalance=Trueили явное заданиеclass_weight.import lightgbm as lgb model = lgb.LGBMClassifier(is_unbalance=True) - CatBoost:
auto_class_weights='Balanced'илиclass_weights.
2. Выбор корректных метрик:
Использовать F1-score, Precision-Recall AUC, Average Precision вместо Accuracy. В кросс-валидации применять StratifiedKFold.
3. Стратегии сэмплирования:
- Внешние: SMOTE, ADASYN (применяются до обучения).
- Внутренние (встроенные в бустер): настройка
subsample,colsample_bytreeдля балансировки входящих данных на каждом дереве.
4. Фокус-параметры:
В XGBoost max_delta_step помогает стабилизировать обучение при сильном дисбалансе, ограничивая шаг обновления весов.
Важно: Всегда оценивать качество на отдельном тестовом наборе, сохраняющем исходное распределение классов.