Дан датасет для классификации с сильным перекосом классов (99% класс A, 1% класс B). В коде на sklearn получена accuracy=0.99. Опишите почему accuracy вводит в заблуждение, какие метрики (precision/recall/F1, ROC AUC, PR AUC) и стратегии (пересэмплирование, взвешивание потерь, алгоритмы для редких классов) применить; обсудите схемы валидации и предотвращения утечки данных при подготовке признаков

1 Ноя в 10:18
6 +2
0
Ответы
1
Коротко и по делу.
Почему accuracy вводит в заблуждение
- При сильном перекосе классов (например 99%99\%99% класс A, 1%1\%1% класс B) модель, предсказывающая всегда A, даст accuracy 99%99\%99% (0.990.990.99), но совершенно бесполезна для поиска класса B. Accuracy не отражает качество предсказаний для редкого класса, т.к. доминируют TN из большинства класса.
Ключевые метрики (что смотреть и почему)
- Precision (точность для положительного класса): Precision=TPTP+FP\mathrm{Precision}=\frac{TP}{TP+FP}Precision=TP+FPTP — важна, когда ложные срабатывания дорого стоят.
- Recall (полнота, чувствительность): Recall=TPTP+FN\mathrm{Recall}=\frac{TP}{TP+FN}Recall=TP+FNTP — важна, когда критично не пропустить положительные примеры.
- F1: F1=2Precision⋅RecallPrecision+Recall\mathrm{F1}=2\frac{\mathrm{Precision}\cdot\mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}}F1=2Precision+RecallPrecisionRecall — компромисс между precision и recall.
- ROC AUC — показывает способность ранжировать объекты: независима от базовой частоты, но при сильном дисбалансе часто даёт оптимистичную картину, т.к. большое число TN «смазывает» метрику.
- PR AUC (area under precision–recall curve) — более информативна при редком положительном классе, фокусируется на поведении по положительным примерам.
- Дополнительно: balanced accuracy, MCC (Маттьюз):
MCC=TP⋅TN−FP⋅FN(TP+FP)(TP+FN)(TN+FP)(TN+FN) \mathrm{MCC}=\frac{TP\cdot TN - FP\cdot FN}{\sqrt{(TP+FP)(TP+FN)(TN+FP)(TN+FN)}}
MCC=(TP+FP)(TP+FN)(TN+FP)(TN+FN) TPTNFPFN
— стабильна при дисбалансе; confusion matrix и precision@k / recall@k полезны для бизнес-ограничений.
Стратегии для работы с редким классом
- Пересэмплирование:
- Random undersampling (уменьшение большинства) — простой, но может потерять информацию.
- Random oversampling (дублирование минорного) — риск overfitting.
- SMOTE / ADASYN / SMOTEN (синтетические примеры) — генерируют новые минорные образцы.
- Комбинации: SMOTE+ENN, SMOTE+Tomek.
- Примечание: пересэмплирование ОБЯЗАТЕЛЬНО делать только внутри обучающей части при CV (иначе утечка).
- Взвешивание потерь / cost-sensitive:
- class_weight='balanced' в sklearn, вручную задавать веса в функции потерь.
- Для GBM: параметр scale_pos_weight (XGBoost/LightGBM) или weight в обучающих данных.
- Focal loss для нейросетей (снижает вес легко классифицируемых примеров).
- Алгоритмы и ансамбли:
- BalancedRandomForest, EasyEnsemble, RUSBoost.
- Градиентные бустинги (XGBoost/LightGBM/CatBoost) с подбором весов/параметров.
- Подходы типа anomaly detection / one-class methods, если положительные примеры крайне редки и отличаются.
- Калибровка и порог:
- Калибровать вероятности (Platt/Isotonic) на валидационной выборке.
- Не обязательно выбирать порог 0.50.50.5 — подбирайте порог по целевой метрике (например давая минимальный FN или требуемую precision).
- Оценка стоимости ошибок:
- Если у вас известны издержки FP vs FN, минимизируйте ожидаемую стоимость при выборе порога.
Схемы валидации и предотвращение утечки данных
- Выбор CV:
- StratifiedKFold для поддержания долей классов в фолдах.
- GroupKFold, если есть связанные группы (пользователь, сессия) — нельзя разрывать группу между train/test.
- TimeSeriesSplit для временных данных (никакого перемешивания).
- Для модельного отбора/подбора гиперпараметров используйте nested CV.
- Пайплайн и порядок операций:
- Всё препроцессирование (скейлинг, имутация, кодирование, target encoding, пересэмплирование) должно выполняться внутри Pipeline и только на тренировочной части фолда; тестовая часть фолда должна оставаться «чистой».
- Пересэмплирование — применять ТОЛЬКО к тренировочной части каждого фолда (иначе утечка).
- Target/mean encoding — вычислять в out-of-fold режиме или с регуляризацией; нельзя использовать целевые статистики на всём датасете до разбиения.
- Скейлеры/импьютеры — fit на train, transform на test.
- Проверка на утечку:
- Убедитесь, что одинаковые записи (или связанные по признакам) не присутствуют в train и test.
- Не использовать будущую информацию (timestamps, агрегаты по будущему).
- При генерации признаков из внешних источников — строить только на данных доступных на момент прогнозирования.
- Тестирование производительности:
- Отдельный удерживаемый тест set (holdout) с тем же разрежением классов, на который не смотрели при тренировке и выборе гиперпараметров.
- Оценивать модели по PR AUC, recall при допустимом уровне precision (или наоборот), confusion matrix и MCC.
Короткий чек-лист внедрения
1. Разделить данные с учётом времени/групп и оставить holdout.
2. Использовать StratifiedKFold (или Group/Time) и pipeline.
3. Применять пересэмплирование и target-encoding только внутри train-фолда.
4. Обучать с class-weight / focal loss или пробовать SMOTE/EasyEnsemble.
5. Калибровать вероятности и подбирать порог по бизнес-метрикам.
6. Отчитывать PR AUC, recall@k, precision, F1, MCC и confusion matrix — не accuracy.
Если нужно, могу дать пример кода sklearn-пайплайна с правильной последовательностью (oversampling внутри CV) и подбором порога и метрик.
1 Ноя в 10:40
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир