SkillGridИзучай computer science на практике

Точности недостаточно

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

14 мин · 45 XP

Точность — это доля строк, на которых модель оказалась права. Это первое число, за которое все хватаются, его легко объяснить, и само по себе оно одно из самых обманчивых во всей области. Вот капкан, и для него не нужна никакая сложная модель. Это медицинский тест на редкую болезнь в городе на тысячу человек.

disease screening, 1000 people, 10 are ill

model: always answer no

correct: 990 healthy people
wrong:   10 ill people missed

accuracy = 990 / 1000 = 99 percentМодель, которая не делает вообще ничего, и её 99 процентов.

Такая модель отвечает «нет» каждому человеку. Она не выучила ничего, она никогда не найдёт ни одного больного и всё равно даёт 99 процентов, потому что болезнь редкая, а здоровых большинство. Точность тихо награждает самый частый класс. Как только один ответ встречается намного чаще другого, ленивая модель, всегда выбирающая частый ответ, на бумаге выглядит превосходно, а на практике не стоит ничего.

Теперь второй капкан, и он про честность, а не про редкость. Модель можно проверять на тех самых строках, на которых она училась, — так же, как ученику можно вернуть контрольную с уже вписанными ответами. Конечно, результат будет высоким. Нужное тебе число получается на строках, которых модель никогда не видела. Поэтому до обучения таблицу делят: одна часть обучает модель, остальное запечатывается и вскрывается один раз, в конце. Эта запечатанная часть и есть отложенная выборка.

Training rowsModelHeld-back rowshere are examples with labelsadjust until misses are smalltraining scorescore on these same rows94 percentthe exam nobody has seen200 rows it never met71 percent

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

spam filter, 100 emails, 20 are spam

+----------------+----------------+----------------+
|                | says spam      | says inbox     |
+----------------+----------------+----------------+
| is spam        | 16             | 4              |
| is not spam    | 3              | 77             |
+----------------+----------------+----------------+

accuracy  = (16 + 77) / 100 = 93 percent
precision = 16 / 19         = 84 percent
recall    = 16 / 20         = 80 percentКаждое предсказание спам-фильтра попадает ровно в одну из этих четырёх клеток.

Эти четыре клетки — матрица ошибок, и два полезных числа читаются прямо с неё. Точность ответа спрашивает: из всего, что модель пометила как спам, какая доля действительно спам? Низкая точность ответа означает, что уничтожается нормальная почта, и это ровно та жалоба, которую пишут пользователи. Полнота спрашивает: из всего спама, который был, какую долю модель поймала? Низкая полнота означает, что спам продолжает приходить, и на это никто не жалуется. Оба числа описывают одну и ту же модель и отвечают на совершенно разные вопросы.

Эти два числа тянут в разные стороны, и одна ручка двигает оба. Сделай фильтр строже — точность ответа растёт, полнота падает: меньше ложных тревог, больше спама просачивается. Сделай мягче — будет наоборот. Настройки, где оба числа максимальны, не существует, поэтому настоящий вопрос не «какая оценка лучше», а «сколько стоит каждая ошибка именно здесь». Заблокировать предложение о работе — катастрофа; пропустить одну рекламу — пожать плечами.

same test, two thresholds

+----------------+-----------+-----------+
| threshold      | precision | recall    |
+----------------+-----------+-----------+
| strict         | high      | low       |
| loose          | low       | high      |
+----------------+-----------+-----------+

ask instead: what does a miss cost here?Один порог — и два числа, движущиеся в противоположные стороны.

Практика

  1. Тест на редкую болезнь показывает 99 процентов точности в городе на 1000 человек. Болезнь есть только у 10 из них. Коллега говорит, что вопрос с тестом практически закрыт. Что проверить в первую очередь?

    Подсказки
    • Посчитай, сколько человек в таком городе действительно больны, прежде чем судить о точности.
    • Модель, всегда отвечающая «нет», права почти всегда и не помогает никому в редком классе.
  2. Сопоставь каждое число спам-фильтра с тем, что оно на самом деле измеряет.

    Подсказки
    • Точность ответа спрашивает про письма, на которые фильтр среагировал; полнота — про спам, который существовал.
    • Из 20 спам-писем 4 остались во входящих: это число относится к полноте.
  3. Расставь шаги честной оценки модели в правильном порядке.

    1. 1Попросить модель предсказать метки для запечатанных строк
    2. 2Посчитать precision и recall по настоящим меткам этих строк
    3. 3Обучить модель только на обучающей части
    4. 4Разделить таблицу на обучающую и отложенную части и запечатать отложенную
    Подсказки
    • Отложенные строки нужно запечатать до начала обучения, иначе разделение ничего не доказывает.
    • Сравнивать две модели нельзя, пока обе не дали число на одних и тех же отложенных строках.