Пустит ли тебя жена пить 🍻? Как подобрать метрику?
Всем привет! Как и любой уважающий себя ml-щик, я должен написать пост на тему метрики классификации
Очень часто люди раскрывают эту тему через задачу определения болезней. Но я родом из такого города, из такого района, где на каждой улице, а иногда и в одном доме, было по несколько п*внушек, Поэтому подумаем над более актуальной задачей. Представим, вы хотите пойти пить п*во, но не знаете, отпустит ли вас жена. Но есть набор факторов, которые на это влияют. Например, погода, настроение, ваше денежное состояние, день недели, месяц ,время, люди, с которыми собираетесь пойти. И каждый раз вы гадаете, стрессуете. Но у вас уже есть какая-то собранная статистика, чтобы сделать модель и меньше стрессовать. Например, вы 10000 раз спрашивали это. Достаточная статистика, чтобы сделать модель
И теперь вы начинаете думать над тем, какую метрику использовать для этой задачи. Первое, что приходит на ум, это accuracy, то есть доля верных ответов. Это хорошая метрика только в том случае, когда классы у нас сбалансированы. Но мы понимаем, что крайне редко жена отпустит нас попить п*ва с друзьями, классы несбалансированные. Поэтому мы начинаем думать в другую сторону.
Для начала поговорим о том, что у нас существуют элементы confusion matrix:
TP (True Positive) - количество раз, когда модель сказала да, и на самом деле да TN (True Negative) - количество раз, когда модель сказала нет, и на самом деле нет FP (False Positive) - количество раз, когда модель сказала да, но на самом деле нет FN (False Negative) - количество раз, когда модель сказала нет, но на самом деле да Короче, первая буква говорит, права ли модель. Вторая буква - что предсказала модель
Эти четыре числа лежат в основе всех метрик классификации. Поговорим пока про две из них
Precision и Recall
Precision (точность) отвечает на вопрос, сколько из тех случаев, когда модель сказала да, оказались правдой? Это доля правильно угаданных положительных ответов среди всех предсказанных положительных. Precision = TP / (TP + FP)
Recall (полнота) отвечает на вопрос, сколько из всех реальных да модель вообще смогла найти? Это доля правильно угаданных положительных ответов среди всех реально существующих положительных. Recall = TP / (TP + FN)
А теперь обратно к п*ву.
TP - модель предсказала да, и жена отпустила FP - модель предсказала да, а жена не отпустила. Просто ложная надежда((( FN - модель предсказала нет, но на самом деле жена отпустила бы. Шанс упущен…
Таким образом, Precision используем, когда нам не нужны ложные надежды (FP). Нам важно, чтобы каждое предсказанное разрешение было реальным. Лучше пропустить, чем собраться и обломаться… Recall (полноту) используем, когда страшно пропустить реальное да (FN). Нам важно найти все случаи, когда жена реально отпустила бы.