Кто-то показывает модель с accuracy 93 процента. Зал кивает. Я в этом зале сидел и кивал. Вот что надо было спрашивать вместо этого.
Задача настоящая и достаточно маленькая, чтобы проверить руками. Берём репозиторий, встаём на первое число месяца и по каждому файлу предсказываем, тронет ли его кто-нибудь в ближайшие 7 дней. Признаки только из прошлого: сколько раз файл менялся за предыдущие 180 дней, сколько дней прошло с последней правки, какого он размера. Обучение идёт по месяцам до июля 2013, проверка по всему, что после, поэтому своего будущего модель не видит. Классификатор это логистическая регрессия, написанная руками: 3 признака, градиентный спуск. Дело тут не в модели.
Положительных в проверке 6.8 процента. Значит ответ “никогда” на всё подряд даёт accuracy 93.2 процента. Это то число, которое надо побить.
Лучшая accuracy на разбеге это 93.3 процента. Она у порога 0.7, который находит 3 файла из 163 реально изменившихся.
Все пороги разбега стоят в одной полосе, от 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, а сколько настоящих случаев модель нашла и как часто ошибалась, когда открывала рот.