Почему, когда и как проводить калибровку модели для задач классификации.

При решении проблемы классификации едва ли достаточно собрать только прогнозы на тестовом наборе; чаще всего мы хотели бы похвалить их с некоторой степенью уверенности. С этой целью мы используем связанную вероятность, то есть вероятность, рассчитываемую классификатором, который определяет класс для каждой выборки. Но всегда ли это отражает реальность? А если нет, то как мы можем сказать?

Learning Rate - это мой еженедельный информационный бюллетень для тех, кто интересуется миром AI и MLOps. Каждую пятницу вы будете получать от меня обновления и мысли о последних новостях, исследованиях, репозиториях и книгах в области искусственного интеллекта. Подпишитесь здесь!

Вступление

Представьте, что у нас есть два двоичных классификатора; модель A и модель B. Модель A имеет точность 85% и уверенность 0,86 для каждого сделанного ею прогноза. С другой стороны, модель B также на 85% точна, но достоверна на 0,99 для каждого из своих прогнозов. Как вы думаете, какая модель лучше?

В этом рассказе я постараюсь убедить вас, что модель A лучше. Модель A считает себя точной в 86% случаев, и это действительно так. Напротив, модель B слишком уверена в своих прогнозах. Этот игрушечный пример демонстрирует интуицию, лежащую в основе вероятности и калибровки модели.

Калибровка модели относится к процессу, в котором мы берем модель, которая уже обучена, и применяем операцию постобработки, которая улучшает ее оценку вероятности. Таким образом, если бы мы проверили образцы, которые были оценены как положительные с вероятностью 0,85, мы бы ожидали, что 85% из них действительно положительные.

Формально модель идеально откалибрована, если для любого значения вероятности p предсказание класса с уверенностью p верно 100*p процентов времени.

Теперь, поскольку изображение стоит тысячи слов, если вы попытаетесь визуализировать его и построить каждое значение p в интервале от 0 до 1, мы ожидаем получить идеальную линейную связь между вычисленной вероятностью и долей положительных результатов.

В следующих разделах мы увидим, почему, когда и как калибровать ваши классификаторы.

Почему так важна калибровка модели?

Калибровка модели важна только в том случае, если вы заботитесь о вероятностях, которые вычисляет ваша модель. Например, предположим, что вы создаете механизм рекомендаций, который ранжирует продукты в соответствии с предпочтениями пользователя. Если ваша модель оценивает, что пользователь u купит продукт a с вероятностью 0,9, а элемент b с вероятностью 0,7, вы можете сначала подать продукт a. Калибровать эту модель не нужно.

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

Есть и другие случаи, когда калибровка модели полезна:

  • Отладка: мы хотим знать, когда наша модель ошибочна, с высокой степенью уверенности или присваивает низкую вероятность правильному классу.
  • Ансамбли: если мы хотим объединить множество вероятностных моделей, точные прогнозы имеют значение.

Как проверить свою модель

До сих пор мы видели, что такое калибровка модели и почему она важна в некоторых случаях. Но как мы можем проверить, откалиброван ли наш классификатор?

Лучше всего увидеть это собственными глазами. Для этого эксперимента мы создаем случайный набор данных для классификации, используя вспомогательный метод make_classification, который предоставляет scikit-learn.

Затем мы создаем экземпляры двух классификаторов для сравнения; простая модель логистической регрессии и реализация машин поддерживающих векторов, предоставленная scikit-learn.

Наконец, мы подгоняем классификаторы к нашим обучающим данным и вычисляем наши прогнозы на тестовом наборе данных. В частности, для SVM, чтобы получить вероятности для положительного класса, нам нужно знать, как функция принятия решения разделяет тестовые выборки и нормализовать результаты, чтобы они находились между «0» и «1».

Давайте теперь построим Kernel Density Estimation для двух классификаторов.

Как мы и ожидали, результаты логистической регрессии распределяются от 0 до 1, в то время как прогнозы SVM равны точно 0 или 1. Далее давайте проверим кривую AUC-ROC для двух двоичных классификаторов, но на этот раз с использованием вероятностей, которые мы рассчитали для SVM.

Мы видим, что SVM почти идеальна на этом наборе данных. Но точность - это совсем другой разговор, чем калибровка. У нас может быть идеально точная модель, которая вообще не откалибрована, и, с другой стороны, модель не лучше случайной, но, тем не менее, идеально откалиброванная. Итак, как мы можем проверить?

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

Чтобы построить калибровочную кривую для каждого классификатора, мы определяем функцию полезности, подобную приведенной ниже.

Теперь мы готовы построить калибровочную кривую для каждой модели. Начнем с логистической регрессии.

Вроде довольно прилично. То же самое проделываем и с SVM.

Очевидно, что модель SVM далека от калибровки. Мы можем сказать, что это недостаточно уверенно, когда прогнозируется, что образец не принадлежит к положительному классу, и слишком самоуверенно в противном случае. Итак, как мы можем это исправить?

Калибровка модели

Два самых популярных метода калибровки модели машинного обучения - это метод isotonic и Platt's.

Scikit-learn предоставляет базовую оценку для калибровки моделей с помощью класса CalibratedClassifierCV. В этом примере мы будем использовать метод Platt's, который эквивалентен установке аргумента method в конструкторе класса на sigmoid. Если вы хотите использовать метод isotonic, вы можете передать его вместо этого.

Результат для классификатора SVM впечатляюще отличается. Теперь у нас есть откалиброванный классификатор SVM. Обратите внимание, что если вы вызываете метод predict_proba в классификаторе SVM, результаты уже откалиброваны с помощью метода Platt's (см. Здесь). Вы можете попробовать сами.

Также имейте в виду, что точность модели может быть ниже после калибровки. Например, кривая AUC-ROC теперь составляет 0,963. Таким образом, мы можем видеть, что в некоторых случаях нам, возможно, придется рассмотреть компромисс между точностью и калибровкой. Вы всегда можете проверить и другие показатели (например, точность, отзывчивость, оценку F1 и т. Д.).

Заключение

В этой истории мы рассмотрели, что такое калибровка модели, почему и когда ее использовать, как проверить, откалиброван ли ваш классификатор, и как потенциально исправить это, если нет.

Наконец, я хочу дать практическое правило относительно того, следует ли использовать изотоническую регрессию для масштабирования Платта. Изотоническая регрессия не делает предположение о сигмовидной форме, поэтому она может лучше подходить для широкого круга случаев. С другой стороны, он более подвержен переобучению. Таким образом, если у нас небольшой набор данных, масштабирование Platt может работать лучше.

Меня зовут Димитрис Поулопулос, я исследователь машинного обучения в BigDataStack и доктор философии в Пирейском университете, Греция. Я работал над разработкой и внедрением AI и программных решений для крупных клиентов, таких как Европейская комиссия, Евростат, МВФ, Европейский центральный банк, ОЭСР и IKEA. Если вы хотите прочитать больше сообщений о машинном обучении, глубоком обучении и науке о данных, подпишитесь на меня в Medium, LinkedIn или @ james2pl в твиттере.