dimhold.by
← Статьи

9 моделей, accuracy от 92.5 до 93.3, и одна из них не находит ничего

Кто-то показывает модель с accuracy 93 процента. Зал кивает. Я в этом зале сидел и кивал. Вот что надо было спрашивать вместо этого.

Задача настоящая и достаточно маленькая, чтобы проверить руками. Берём репозиторий, встаём на первое число месяца и по каждому файлу предсказываем, тронет ли его кто-нибудь в ближайшие 7 дней. Признаки только из прошлого: сколько раз файл менялся за предыдущие 180 дней, сколько дней прошло с последней правки, какого он размера. Обучение идёт по месяцам до июля 2013, проверка по всему, что после, поэтому своего будущего модель не видит. Классификатор это логистическая регрессия, написанная руками: 3 признака, градиентный спуск. Дело тут не в модели.

Положительных в проверке 6.8 процента. Значит ответ “никогда” на всё подряд даёт accuracy 93.2 процента. Это то число, которое надо побить.

одна модель на 9 порогах, проценты 0 50 100 ответ "никогда": 93.2 accuracy: от 92.5 до 93.3, все 9 19.6 0.6 полнота, доля найденных настоящих правок 0.1 0.3 0.5 0.7 0.9 порог
Accuracy укладывается в 0.8 пункта на всём разбеге. Полнота меняется в 32 раза. Отчёт, который несёт первое число, не несёт никакой информации о том, какую из этих 9 моделей выкатили.

Лучшая accuracy на разбеге это 93.3 процента. Она у порога 0.7, который находит 3 файла из 163 реально изменившихся.

модель с лучшей accuracy на разбеге, порог 0.7 правда изменился правда нет предсказала правку 3 0 не предсказала ничего 160 2226 accuracy 93.3, точность 100, полнота 1.8 пропущено 160 правок из 163
Точность в 100 процентов выглядит триумфом, пока не прочитана соседняя клетка. Модель права всегда, когда открывает рот. Открывает она его почти никогда.

Все пороги разбега стоят в одной полосе, от 92.5 до 93.3, а полнота идёт с 19.6 процента вниз до 0.6. Одно число не отличает модель, которая находит каждую пятую правку, от модели, которая находит одну из 163. Их обеих оно не отличает и от ответа “никогда”.

Матрица ошибок различает их с одного взгляда. Три против ста шестидесяти это сама вещь, а не её пересказ.

Где метрика работает

Хочу быть честным к accuracy, поэтому вот тот же опыт с горизонтом, растянутым с 7 дней до 90. Теперь положительных 34.6 процента, ответ “никогда” даёт 65.4, а лучшая модель доходит до 70.7 при полноте 31 процент. Число двигается, ранжирует пороги и ведёт себя как метрика.

Вот и вся форма проблемы. Accuracy это взвешенное среднее двух чисел, а весами стоят размеры классов. Когда один класс занимает 93 процента данных, среднее равно этому классу. Второй уходит в округление.

Где я споткнулся

Сначала я прогнал версию на 90 дней, получил тот самый мягкий результат и потом вернулся и укоротил горизонт, чтобы дисбаланс стал резким. Это стоит сказать прямо: я подбирал задачу, пока эффект не появился. Честная форма моего утверждения уже, чем “accuracy бесполезна”: один и тот же опыт показывает провал при 6.8 процента положительных и прячет его при 34.6. Эту фразу по первому прогону написать было нельзя.

Чего я не проверял

Площадь под кривой, а именно за ней тянутся ровно в таком случае. По построению она не зависит от порога, который я разбегал. Откалибрована ли модель, то есть значит ли оценка 0.7, что событие происходит в 70 процентах случаев. И модель это 3 признака на 1 репозитории, поэтому про то, насколько вообще предсказуемы правки файлов, здесь не сказано ничего. Сказано про то, что сообщает и чего не сообщает опубликованное число.

Узкое утверждение это вопрос, который надо задавать в том зале. Не какая там accuracy, а сколько настоящих случаев модель нашла и как часто ошибалась, когда открывала рот.