Установка порога AUC ROC при сильном дисбалансе

Вопрос или проблема

Я провожу бинарную логистическую регрессию на наборе данных с очень сильным дисбалансом классов. Класс 1 составляет только 1% данных. Когда я обучаю логистическую регрессию без учета весов классов, я получаю ROC AUC Score 0.6269. Что неплохо. Однако, когда я смотрю на матрицу ошибок, я вижу, что моя модель никогда не предсказывала ни одной единицы. Так почему мой AUC такой высокий? Я думал, что AUC должен быть хорошей мерой в таком случае.

Матрица ошибок
 Предсказано   0    Всего
Истинно                   
0          32109  32109
1           1223   1223
Всего      33332  33332

Я знаю, что матрица ошибок устанавливает порог вероятности 0.5, так что означает ли оценка, что существует какой-то порог, при котором модель даст более высокую полноту? Как я могу получить этот порог?

      Класс  точность   полнота  f1-мера   поддержка

       0       0.96      1.00      0.98     32109
       1       0.00      0.00      0.00      1223

Меня интересуют только точность и полнота для класса 1.

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

Кривая PR может быть более полезной для вас, но я не могу сказать, что ROC обязательно хуже. https://stats.stackexchange.com/questions/262616/roc-vs-precision-recall-curves-on-imbalanced-dataset

  • ROC-кривые следует использовать, когда каждый класс имеет приблизительно равное количество наблюдений.
  • Кривые точность-полнота следует использовать, когда есть умеренный или большой дисбаланс классов.
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(y_test, probs)
auc = auc(recall, precision)

Ответ или решение

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

Теория

Кривая ROC (Receiver Operating Characteristic) и площадь под ней (AUC – Area Under the Curve) являются важными инструментами для оценки качества бинарных классификаторов. ROC-кривая представлена графиком зависимости истинно положительной (True Positive Rate, TPR) от ложно положительной (False Positive Rate, FPR) частоты для разных порогов вероятности классификации. AUC ROC показывает, насколько хорошо модель способна различать положительный и отрицательный классы. Идеальная AUC имеет значение 1.0. Однако при высоком дисбалансе классов, как в случае, представленном в вашем вопросе, интерпретация AUC может стать проблематичной.

AUC ROC остаётся высоким, даже если модель не предсказывает ни одного положительного случая, из-за диспропорции в данных. Это связано с тем, что при малой доле положительных примеров (например, 1%), даже маленькое число истинных отрицательных может резко увеличивать значение AUC, так как TPR остаётся нулевым, а FPR также близка к нулю из-за доминирования 0 класса.

Пример

Согласно приведённой матрице ошибок, модель классифицирует все примеры как отрицательные, что приводит к идеальной чувствительности (recall) для класса 0, но нулевой – для класса 1. Это распространённая проблема в задачах с дисбалансом классов, когда модель склонна к триивальной стратегии минимизации ошибки за счёт предсказания наиболее частого класса.

С потенциалом, что модель обладает хоть какой-то прогностической силой, должна существовать такая пороговая вероятность, при которой чувствительность (recall) увеличивается, что, в свою очередь, может быть подтверждено путём анализа распределения вероятностей предсказаний для класса 1.

Применение

Для корректной настройки порога и получения баланса между точностью и чувствительностью для редко встречающегося класса, предлагаю следующее:

  1. Анализ ROC-кривой: Построить ROC-кривую и визуализировать множества порогов, чтобы видеть, как меняются TPR и FPR. Это позволит вам идентифицировать пороги, где возможно наличие точки оптимального баланса.

  2. Преимущество PR-кривой (Precision-Recall curve): При сильном дисбалансе классов PR-кривая может предоставлять более полезную информацию, чем ROC. Это связано с акцентом на точность (precision) и полноту (recall), игнорируя истинно отрицательные случаи, которые часто доминируют при высоком дисбалансе данных.

    Используя следующую реализацию из библиотеки scikit-learn, вы можете ускорить этот процесс:

    from sklearn.metrics import precision_recall_curve
    precision, recall, thresholds = precision_recall_curve(y_test, probs)
  3. Смещение порога: Выявив несколько потенциальных порогов из PR-кривой, желательно провести всесторонний анализ, чтобы определить, какой из них обеспечивает наиболее удовлетворительные компромиссы для вашей конкретной задачи: наилучшее сочетание точности и полноты для класса 1.

  4. Кросс-валидация: Используйте техники кросс-валидации для проверки стабильности выбранного порога. Это позволит удостовериться в том, что полученные результаты устойчивы и универсальны для различных подвыборок данных.

  5. Оптимизация показателей: Подумайте о введении метрик, таких как F1-мера, которая объединяет точность и полноту в одном показателе, что полезно при выборе окончательной модели.

Занимаясь оптимизацией модели с учётом предложенных рекомендаций, необходимо помнить о специфике своей задачи и данных, что позволит выработать стратегию, учитывающую случайные и систематические ошибки модели. Только комплексный анализ ROC и PR-кривых, а также тщательная настройка порога, помогут максимизировать полезность модели в подобных условиях.

Оцените материал
Добавить комментарий

Капча загружается...