Для затравки отвечу на один из вопросов из чатика t.me/bigdata_ru. Там ситуация была такая: надо предсказывать вероятность очень редкого события (мошенничества, или редкой болезни, или поломки механизма, я уж не знаю). И событие мало того что редкое, а ещё и нестабильное: в какие-то периоды его 1.5% от популяции, в другие - 0.2%. Вопрос, как в таких условиях сравнивать качество разных предсказательных моделей или одной модели в разные периоды?
Правильный ответ - конечно же, по ROC AUC. Практически все другие популярные метрики классификации основаны на присвоении "жёстких" меток: если предсказанная вероятность больше порога, предсказываем "единичку" (событие), если меньше - предсказываем "нолик" (отсутствие события), дальше считаем, сколько предсказанных единиц и ноликов совпали с реальными, и как-то упаковываем в одно число. И это плохо.
Самая популярная метрика - accuracy (точность), или просто доля правильных ответов. В таких несбалансированных задачах, как наша, эта метрика бесполезна: можно предсказать 100% нулей и получить точность 99.8%, и этот бесполезный прогноз трудно переплюнуть даже сложной моделькой.
Более внимательные метрики - recall (полнота), то есть доля верно предсказанных единиц среди всех настоящих единиц, и precision (по-русски тоже точность🙈), то есть доля верно предсказанных единиц среди всех предсказанных (!) единиц. Если предсказать слишком много единиц, упадёт точность, а если предсказать слишком мало - упадёт полнота, поэтому в принципе с этой парой метрик можно работать при несбалансированных классах. Как, кстати, и с их усреднением, которое зовётся F1-мера. Но они таки завязываются на фиксированный заранее выбранный порог, и если вдруг доля единиц в популяции резко скакнут, то и значения этих метрик скакнут, даже если предсказательная модель не изменилась. И это не очень ок.
Зато метрика ROC AUC к пропорции классов нечувствительна ни-ско-леч-ко, потому что вместо использования отдельно взятого порога, разделяющего предсказанные нули от единиц, она делает усреднение по ВСЕМ ВОЗМОЖНЫМ порогам.
Проще всего понять ROC AUC так: это вероятность того, что для наблюдения, случайно выбранного из всех единичек, скор будет выше, чем для наблюдения, случайно выбранного из всех ноликов. Если модель идеально отличает нули от единиц, то это будет происходить всегда, и auc будет 100%. Если модель вообще не отличает их, это будет проиходить в 50% случаев. Для типичной модели - полезной, но неидеальной - число будет где-то между. И от того, сколько именно единиц и нулей было в штуках, это число не зависит.
Post #222
676