
predict_proba выдаёт 0.9 — но это не вероятность 90%
badcasedaily1 20 минут назад predict_proba выдаёт 0.9 — но это не вероятность 90% Средний 7 мин 616 Блог компании OTUS Программирование * Python * Машинное обучение * Обзор Привет, Хабр!Самая распространённая ошибка при...
Вот важная новость с фронта ИИ: badcasedaily1 20 минут назад predict_proba выдаёт 0. 9 — но это не вероятность 90% Средний 7 мин 616 Блог компании OTUS Программирование * Python * Машинное обучение * Обзор Привет, Хабр! Самая распространённая ошибка при работе с вероятностями в ML — читать число из predict_proba как вероятность.
9, и кажется очевидным: «событие произойдёт примерно в 90 случаях из 100». На этом строят решения — ранжируют лиды по этому числу, ставят порог отсечения, считают ожидаемую выручку как 0. 9 * сумма_сделки, показывают пользователю «уверенность 90%».
Технические детали
А потом расчёты ожидаемой выручки систематически расходятся с фактом, сравнение «0. 9» означает совсем не то, что предполагалось, а порог отсечения стоит не там, где надо. При этом AUC модели прекрасный, и кажется, что с моделью всё в порядке.
predict_proba возвращает не вероятность, а оценку, внутреннюю уверенность модели, втиснутую в диапазон от нуля до единицы. Синтаксически это похоже на вероятность: число в , по классам сумма равна единице. 9», что среди подобных объектов положительных действительно около 90%, — это отдельное свойство, оно называется калибровкой, и по умолчанию большинство моделей им не обладает.
В статье рассмотрим, чем калибровка отличается от ранжирующей способности, почему разные модели выдают смещённые вероятности, каждая по-своему и как увидеть смещение на графике надёжности, как его починить и в каких задачах это вообще важно. Вероятность и порядок — это два разных свойстваВероятность откалибрована, если выполняется частотная интерпретация: среди всех объектов, которым модель присвоила оценку около 0. 8, положительных действительно примерно 80%.
Отраслевые последствия
Это определение и есть смысл слова «вероятность» применительно к выходу модели. predict_proba всегда даёт число в . Откалибровано ли оно — вопрос отдельный, и ответ на него ничем не гарантирован.
Здесь полезно развести два независимых качества классификатора. Первое — ранжирующая способность: умеет ли модель ставить положительные объекты выше отрицательных. Второе — калибровка: совпадают ли сами числа с наблюдаемыми частотами.
Эти качества независимы друг от друга, и AUC не видит калибровку в принципе. AUC — это вероятность того, что случайный положительный объект получит оценку выше случайного отрицательного, то есть величина чисто порядковая. Возьмите все предсказанные вероятности и возведите их в квадрат — порядок объектов не изменится, AUC останется прежним, а калибровка будет разрушена.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.



