Всех приветствую! Далее я объясню и покажу как можно подбирать порог на практике и что это вообще такое на пальцах. Но для начала немного теории. Внимание! если вы не знаете что такое метрика или оценка модели или бинарный классификатор, для начала почитайте об этом!
Матрица ошибок (confusion matrix)
Для лучшего понимания предлагаю ввести понятие матрицы ошибок для оценки качества классификатора:
|
Реальные таргеты |
|
Предсказания моделью |
Positive |
Negative |
Positive |
TP |
FP |
Negative |
FN |
TN |
Таблица состоит из 4 чисел:
-
TP – true positive, количество объектов из положительного класса на которых модель НЕ ОШИБЛАСЬ и предсказала в положительный класс
-
FP – false positive, количество объектов из отрицательного класса на которых модель ОШИБЛАСЬ и предсказала их в положительный класс
-
FN – false negative, количество объектов из положительного класса на которых модель ОШИБЛАСЬ и предсказала их в отрицательный класс
-
TN – true negative, количество объектов из отрицательного класса на которых модель НЕ ОШИБЛАСЬ и предсказала их в отрицательный класс
На самом деле, не всегда удобно анализировать эту матрицу. Но на ее основе можно дать определения для точности (precision) и полноты (recall). Для примера можно классифицировать клиентов по тому купят они товар или нет после запуска рекламы. Представим, что было 300 клиентов, 150 купили, а 150 нет.
|
y = 1 (купили товар) |
y = -1 (не купили) |
a(x) = 1 (модель предсказала, что купит) |
130 |
20 |
a(x) = -1 (модель предсказала, что не купит) |
20 |
130 |
Precision (точность)
По этой метрике можно оценить насколько точна модель, то есть посчитаем долю правильных ответов сред всех ее положительных предсказаний
Чтобы посчитать точность нужно посчитать отношение всех действительно правильных ответов с суммой всех положительных предсказаний модели (по строке в матрице ошибок)
-
для нашей модели: 130/130+20=0.86
Чем ближе точность к единице тем лучше справилась модель.
Recall (полнота)
В этой метрике будем считать отношение всех действительно правильных ответов с суммой и положительно предсказанных ответов и отрицательно предсказанных (по столбцу в матрице ошибок)
-
для нашей модели: 130/130+20=0.86
Промежуточно резюмируя:
Precision и Recall отражают разные аспекты качества модели:
-
Precision показывает, насколько можно доверять положительным предсказаниям модели. Например, если Precision = 0.9, то 90% предсказанных “покупателей” действительно купят товар.
-
Recall демонстрирует, какую долю реальных положительных случаев модель обнаружила. Recall = 0.9 означает, что модель нашла 90% всех реальных покупателей.
Однако эти метрики часто конфликтуют:
-
Если повысить порог классификации (например, с 0.5 до 0.8), модель станет меньше предсказывать класс “1”. Это увеличит Precision (меньше ложных срабатываний), но снизит Recall (больше пропущенных реальных “1”).
-
Если снизить порог (например, до 0.3), модель будет предсказывать “1” чаще. Это повысит Recall (больше реальных “1” будет найдено), но уменьшит Precision (больше ложных “1”).
Как можно балансировать между ними?
Для этого можно использовать F1-меру — среднее гармоническое между Precision и Recall:
Здесь логично, что F1 будет достигать максимума если Precision и Recall близки друг к другу. Это полезно, когда важны обе метрики, например, в задачах поиска аномалий или классификации текстов.
Как порог влияет на метрики?
Предположим, модель предсказывает вероятность принадлежности к классу “1”. По умолчанию порог равен 0.5, но его можно менять (тут ниже стрелочками я обозначил поднятие или понижение для точности и полноты):
-
Порог ↑ (0.7):
-
Модель предсказывает “1” только для самых уверенных случаев.
-
Precision ↑ (меньше FP), Recall ↓ (больше FN).
-
-
Порог ↓ (0.3):
-
Модель предсказывает “1” чаще.
-
Precision ↓ (больше FP), Recall ↑ (меньше FN).
-
Возвращаемся к примеру
Допустим, в исходной задаче с клиентами при пороге 0.5:
-
Precision = 0.86, Recall = 0.86.
Если повысить порог до 0.7:
-
Модель предсказывает “1” только для 100 клиентов.
-
Из них 90 TP и 10 FP → Precision = 90/100 = 0.9.
-
При этом 90 TP из 150 реальных “1” → Recall = 90/150 = 0.6.
Если снизить порог до 0.3:
-
Модель предсказывает “1” для 200 клиентов.
-
Из них 140 TP и 60 FP → Precision = 140/200 = 0.7.
-
Recall = 140/150 ≈ 0.93.
Резюмируя
Подбор порога — это баланс между точностью и полнотой. Выбор метода зависит от задачи:
-
Используйте F1-меру, если нужен компромисс.
-
Максимизируйте Recall, если пропуск положительных классов критичен.
-
Требуйте высокий Precision, если ложные срабатывания дорого обходятся.
Ну и конечно всегда вылезаем из математики и учитываем специфику бизнеса и проверяем влияние порога на валидационной выборке
Автор: endlessmeal