Вопрос или проблема
У меня есть довольно несбалансированный набор данных для оценки кредитного риска (2:98). Обе стоимости достаточно важны: ложный отрицательный означает потерю от дефолта, а ложный положительный — упущенная возможность получения дохода.
Я пробовал обучать некоторые модели на несбалансированном наборе и подходы с пере- и недовыборкой, а также балансировку весов на основе класса. Все эти подходы привели к приемулемому показателю ROCAUC. Однако кривые точность-отзыв выглядят в целом ужасно.
Но если я балансирую тестовый набор, кривая точность-отзыв выглядит гораздо лучше. Почему это происходит? И есть ли какое-то изменение, которое я должен внести, чтобы улучшить точность-отзыв при несбалансированном распределении данных?
Это действительно ожидаемое поведение.
(Примечание: не следует балансировать тестовые наборы, поскольку они должны информировать вас о производительности на невидимых данных с оригинальным распределением.
https://stats.stackexchange.com/a/258974/232706
В бинарной классификации, должен ли тестовый набор данных быть сбалансирован?
)
Краткий пример может быть яснее, чем в общем виде. Давайте зафиксируем порог предсказания, и, следовательно, точку на кривой PR. Скажем, в вашем тестовом наборе 100 положительных примеров и 1000 отрицательных, и ваша модель (с заданным порогом) имеет 80% отзыв и 40% точность. Тогда есть 80 истинно положительные, 20 ложно отрицательные, 160 ложно положительных и 840 истинно положительных.
Теперь вы уменьшаете выборку до сбалансированных данных*, выбрасывая случайные 900 отрицательных образцов (резко, но чтобы подчеркнуть суть). Предсказания модели не меняются, просто мы потеряли некоторые образцы. Ожидаем потерю 144 из FP, сохраняя 16; и потерю 756 TN, сохраняя 84. Теперь наш отзыв тот же, но точность прыгает с 40% до 83,3% !
На графике PR мы сильно поднялись по кривой! И, конечно, это происходит в каждой точке, независимо; поэтому AU(PR)C значительно увеличится.
*Подобные вещи должны происходить с другими методами повторной выборки, при условии, что повторная выборка происходит равномерно распределенной по вашим предсказаниям.
Попытка ответа
ROC не является хорошим критерием при работе с дисбалансом классов. На Kaggle есть пост о выявлении мошенничества с кредитными картами с экспериментом о дисбалансе классов, возможных способах его устранения, и более подходящих метрических и коде на Python для каждого эксперимента.
Поскольку это действительно длинный пост (на самом деле, это блокнот по дисбалансу классов и ROC), здесь я цитирую вывод автора при сравнении кривых PR и ROC:
Для кривой PR хороший классификатор стремится к верхнему правому углу графика, а для кривой ROC – к верхнему левому.
Хотя кривые PR и ROC используют одни и те же данные, то есть реальные метки классов и прогнозируемую вероятность для меток классов, можно увидеть, что два графика рассказывают очень разные истории, причем некоторые веса, похоже, работают лучше в ROC, чем в PR-кривой.
Хотя синяя линия, w=1, плохо показала обеими графиками, черная линия, w=10000, хорошо показала себя на ROC, но плохо на PR-кривой.
Это связано с высоким дисбалансом классов в наших данных. Кривая ROC не является хорошей визуальной иллюстрацией для сильно несбалансированных данных, поскольку уровень ложного положительного отклика (ложные положительные / общие реальные отрицательные) не снижается резко, когда общее число реальных отрицательных значительное.
Тогда как точность (истинные положительные / (истинные положительные + ложные положительные)) очень чувствительна к ложным положительным и не затрагивается большим общим реальным отрицательным знаменателем.
Наибольшие различия между моделями наблюдаются при уровне отзыва около 0.8. Похоже, что меньший вес, то есть 5 и 10, значительно превосходит другие веса при уровне отзыва 0.8. Это значит, что с этими специфическими весами наша модель может хорошо обнаруживать мошенничество (перехватывая 80% мошенничества), при этом не раздражая клиентов ложными положительными результатами при такой же высокой точности 80%.
Без дальнейшей настройки нашей модели, и, конечно, мы должны проводить кросс-валидацию для любой реальной настройки/валидации модели, похоже, что обычная логистическая регрессия застряла סביב уровне Precision и Recall около 0.8. Так как же мы знаем, стоит ли жертвовать точностью ради большего отзыва, то есть перехвата мошенничества? Это то место, где наука о данных сочетается с основными параметрами вашего бизнеса. Если стоимость пропуска мошенничества значительно превышает стоимость отмены ряда легитимных транзакций клиентов, то есть ложных положительных, возможно, стоит выбрать вес, который дает более высокий уровень отзыва. Или, возможно, уловка 80% мошенничества достаточна для вашего бизнеса, если вы также можете минимизировать “трение с пользователем” или сбои в кредитных картах, поддерживая высокую точность.
Мой вывод:
Несмотря на то, что ваша PR-кривая выглядит плохо, учитывая дисбаланс классов, это лучший показатель, и вы должны стремиться к его улучшению, чтобы ваша модель была наилучшим образом адаптирована для вашего приложения.
Наблюдение:
У вас есть набор данных из 100 образцов, и только 2 из них относятся к $C_1$, вы поняли правильно?
Теперь предположим, что один из этих 2 является полным выбросом для своего класса, $C_1$. Он причиняет больше вреда, чем пользы для настройки вашей модели, и поскольку он составляет 50% ваших образцов класса $C_1$, он может привести к плохой производительности вашей модели.
Одной из возможных причин может быть то, что ваш набор данных слишком мал и вашего алгоритма недостаточно образцов для “обучения”.
Если вы “сбалансируете” свой набор данных, у алгоритма будет достаточно данных для “обучения”, и, следовательно, ваши показатели точности / отзыва увеличиваются.
.
Ответ или решение
Балансировка тестового набора данных: теория, пример и применение
Теория
При работе с бинарной классификацией и, особенно, с сильно несбалансированными наборами данных, такими как в задаче кредитного скоринга, важно понять, как метрики качества работы модели, такие как точность (precision) и полнота (recall), реагируют на изменение распределения классов. В случаях, когда распределение классов в наборе данных составляет, например, 2:98, как в описанном случае, оценка модели может оказаться сложной задачей из-за доминирования одного из классов.
Метрики, такие как ROC-кривая, часто используются для оценки моделей. Однако в условиях дисбаланса классов ROC может не давать адекватной картины, поскольку его компонент — показатель ложноположительных результатов (False Positive Rate) — не зависит от общего количества отрицательных образцов и может быть не чувствителен к изменениям. Здесь на помощь приходит Precision-Recall (PR) кривая, которая более чувствительна к ложным срабатываниям (False Positives).
Проблема заключается в том, что при оценке модели на исходном несбалансированном тестовом наборе PR-кривая может выглядеть «ужасной», как было отмечено в описании. Это связано с тем, что модель может быть более "штрафуемой" за ложные срабатывания, и даже малое количество ложных положительных классификаций может значительно снизить precision.
Пример
Допустим, ваш тестовый набор данных содержит 100 положительных и 1000 отрицательных образцов. Если модель с фиксированным порогом дает 80% полноты и 40% точности, это может быть результатом того, что модель находит 80 истинно положительных и 160 ложноположительных результатов.
Теперь, если вы уравновешиваете тестовый набор, исключая часть отрицательных образцов, вы существенно увеличиваете precision, поскольку количество ложноположительных срабатываний уменьшается пропорционально. Это приводит к значительному повышению точности на PR-кривой, несмотря на сохранение той же полноты.
Применение
Балансировка тестовых данных может показать улучшенную PR-кривую, но она не отражает реального распределения данных, с которым модель столкнется на практике. В реальном мире, вероятнее всего, доминирование одного из классов остается, следовательно, модель должна уметь справляться с этой ситуацией без потерь качества.
Чтобы улучшить PR-кривую без балансировки тестовых данных, можно рассмотреть следующие подходы:
-
Разработка на основе данных: Увеличение размера тренировочного набора данных, особенно увеличивая часть меньшего класса, улучшает способность модели к обучению и уменьшает дисбаланс. Использование методов дополнения данных (data augmentation) может помочь в искусственном увеличении размеров классов.
-
Методы резэмплинга: Оверсемплинг меньшего класса и андерсемплинг большего класса в тренировочном, а не тестовом наборе, может помочь модели лучше различать классы.
-
Настройка порогов и оценка затрат: Настройка порога, при котором классификатор оценивает пример как положительный, может значительно улучшить метрики PR-кривой, особенно если учесть специфические затраты, связанные с ложными негативными и ложными позитивными результатами.
-
Использование алгоритмов, учитывающих дисбаланс: Некоторые алгоритмы, такие как взвешенные случайные леса или алгоритмы градиентного бустинга, имеют встроенные механизмы для борьбы с дисбалансом классов.
Помните, что балансировка тестового набора данных для улучшения визуализации PR-кривой не рекомендуема, поскольку это не дает реальной оценки способности модели справляться с естественным распределением данных. Однако понимание того, как балансировка влияет на метрики, и использование методов смягчения дисбаланса классов в процессе обучения поможет создать более надежный и переносимый классификатор.