Ловушки метрик качества
Сеньорский слой темы: не «какие бывают метрики», а «что с метрикой может пойти не так». Гудхарт, Симпсон, дрейф - здесь проверяют шрамы, а не эрудицию. Хотят услышать историю про то, как метрика соврала лично тебе.
Типовые формулировки: «метрика выросла, а бизнесу хуже - как так?», «как поймёшь, что модель в проде деградировала?», «твоя модель лучше на 0.3 процента - это победа?».
// Если своих историй пока нет, знай хотя бы механизмы. Их четыре, и все четыре на следующих карточках.
Сравнивать можно только внутри одной процедуры
Метрики сопоставимы, когда посчитаны на одних данных и по одной процедуре разбиения. «В статье AUC (area under the curve) 0.93, а у меня 0.89» - это не сравнение: там другой датасет, другой сплит и другая предобработка. Числа просто из разных миров.
Одна цифра с одного разбиения - шум. Перемешай тот же тест другим сидом, и метрика съедет на второй знак сама по себе, без всякой смены модели: на выборке в тысячу объектов разброс между сплитами легко доходит до пары процентов.
Честное сравнение выглядит так: метрика по фолдам кросс-валидации, среднее и разброс рядом, сиды зафиксированы, предобработка внутри фолда. И правило третьего знака: если две модели различаются в третьем знаке одной метрики на одном сплите - они не различаются.
// Тот же вопрос на собесе часто звучит как «твоя модель лучше на 0.3 процента - берём её?». Правильная реакция - спросить про разброс, а не радоваться.
- сплит
- способ разбить данные на обучение и проверку. Случайный, по времени, по группам - и от способа метрика зависит сильнее, чем от модели
Гудхарт: метрика ломается, когда становится целью
Формулировка Чарльза Гудхарта: как только мера становится целью, она перестаёт быть хорошей мерой. Экономист говорил про денежную политику, но в ML это описывает каждый второй провал.
Механика на живом примере. Оптимизируешь CTR (click-through rate) ленты - модель довольно быстро выясняет, что лучше всего кликают заголовки-приманки. CTR растёт, все довольны, а время на контенте и возвраты падают, потому что человек открывает и разочаровывается. Метрика улучшилась, продукт ухудшился, и по дашборду этого не видно.
Лечение - guardrail-метрики рядом с целевой. Оптимизируешь CTR - следи за временем на контенте, жалобами, возвратами. Выиграть целевую и уронить guardrail считается проигрышем, а не разменом.
// Тот же механизм стоит за разрывом офлайна и онлайна: офлайн-метрика это прокси бизнес-цели, а связь прокси с целью проверяется экспериментом, а не верой в неё.
- прокси-метрика
- измеримая замена настоящей цели. Полезна ровно до тех пор, пока держится связь между ней и целью
Парадокс Симпсона: считаем руками
Агрегат может расти, когда каждый отдельный сегмент падает. Звучит как фокус, разбирается на числах за минуту.
Было: мобилка - 900 пользователей с конверсией 10 процентов, это 90 покупок; десктоп - 100 пользователей с конверсией 30 процентов, это 30 покупок. Итого 120 покупок на 1000 человек, общая конверсия 12 процентов.
Стало: мобилка - 100 пользователей с конверсией 9 процентов, это 9 покупок; десктоп - 900 пользователей с конверсией 28 процентов, это 252 покупки. Итого 261 покупка на 1000 человек, общая конверсия 26 процентов. Конверсия упала в обоих сегментах (10 → 9 и 30 → 28), а общая цифра выросла вдвое.
// Никакой магии: сместился микс. Доля десктопа, где конверсия втрое выше, выросла с 10 процентов до 90. Отсюда привычка - любой важный вывод проверять по ключевым срезам, а при смене микса сравнивать при зафиксированных долях сегментов.
- микс
- соотношение сегментов внутри выборки. Меняется само по себе от сезона, рекламы, релиза приложения - и двигает агрегат без всяких изменений в продукте
Хвосты и дрейф
Среднее прячет хвост. Латентность с медианой 80 миллисекунд и 95-м перцентилем в 3 секунды даст среднее около 200 миллисекунд - цифра, из которой никак не следует, что каждый двадцатый пользователь ждёт три секунды и уходит. Для длительностей, ошибок прогноза и справедливости по группам смотрят перцентили и срезы, среднее тут бесполезно.
И метрика не живёт сама. Модель обучена на прошлом распределении, а прод постепенно уезжает. Уехать может две разные вещи: сами данные (пришёл новый рекламный канал, и юзеры теперь другие) или связь данных с таргетом (мошенники поменяли схему, старые признаки перестали работать).
Разница практическая. Первый вид виден сразу - достаточно сравнить распределения фич с обучающими. Второй увидеть можно только тогда, когда подтянутся настоящие метки, а они часто приходят с задержкой в недели.
// Без мониторинга деградацию первым замечает бизнес, и это худший из возможных сценариев: узнаёшь о поломке от людей, которые считают деньги.
- дрейф
- расхождение между тем, на чём модель училась, и тем, что приходит в прод сегодня
Как отвечать: «Как поймёшь, что модель в проде деградировала?»
Не жду, пока заметит бизнес. Метки обычно приходят с задержкой, поэтому мониторю то, что доступно сразу: распределения фич и скоров против обучающих, долю пропусков, объёмы трафика. Для фич считаю PSI (population stability index) - числовую меру расхождения распределений; практическое правило простое: до 0.1 всё спокойно, 0.1-0.25 стоит посмотреть, выше 0.25 распределение уехало заметно. Как только подтягиваются свежие метки, считаю на них метрику качества - агрегат и обязательно срезы, потому что общая цифра умеет расти при провале сегмента из-за смены микса. И на всё это ставлю алерты с порогами, а не дашборд, на который никто не смотрит.
Учтена задержка меток - главная реальность прод-мониторинга, названы прокси-сигналы, срезы и операционка. Так отвечает человек, у которого модель уже ломалась в проде.
На чём валят
- −Выбирать модель по третьему знаку одной метрики на одном сплите - это шум, а не различие.
- −Оптимизировать целевую метрику без guardrail: выиграл CTR, потерял удержание.
- −Смотреть только агрегат - он умеет расти при падении каждого сегмента, если сместился микс.
- −Отчитываться средним там, где живёт хвост: медиана прекрасна, а каждый двадцатый ждёт три секунды.
- −Считать, что метрика в проде держится сама: без мониторинга о деградации сообщит бизнес.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 8, остальные разбираются в тренажёре.
- Метрики на кросс-валидации подозрительно высоки, а на новых данных падают. Ловушка со стороны данных?A)Target leakage: признак из будущего или пересечение train/valid завышает оценкуB)Слишком большая тестовая выборка, из-за которой метрики случайно оказались завышеныC)Использование стратифицированной кросс-валидацииD)Нормализация признаков перед обучением
показать ответ и разбор
+A)Target leakage: признак из будущего или пересечение train/valid завышает оценку// разбор: Подозрительно высокие метрики — классический признак утечки. Формы: признак, косвенно содержащий таргет или доступный лишь постфактум (напр. дата закрытия сделки для прогноза сделки); групповая утечка, когда строки одного пользователя/сессии попали и в train, и в valid; препроцессинг (масштаб, отбор фич), обученный на всех данных до сплита. Всё это раздувает офлайн-оценку и рушится в проде. Лечат аккуратным сплитом (по группам/времени) и fit только на train.
- Как выбрать метрику качества под конкретную задачу?A)Брать accuracy — она универсальна и одинаково подходит самым разным задачам MLB)Брать ROC-AUC независимо от специфики задачиC)Выбрать ту метрику, по которой текущая модель выглядит лучше всегоD)Под цель и цену ошибок: дисбаланс→PR-AUC/F, вероятности→log-loss, ранжирование→NDCG
показать ответ и разбор
+D)Под цель и цену ошибок: дисбаланс→PR-AUC/F, вероятности→log-loss, ранжирование→NDCG// разбор: Метрику диктует задача, а не привычка. Сильный дисбаланс — accuracy обманывает, берут precision/recall/F, PR-AUC. Если решения зависят от величины вероятности — log-loss/Brier и калибровка. Ранжирование/рекомендации — NDCG/MAP/MRR. Регрессия — MAE (устойчивее к выбросам) или RMSE (штрафует крупные ошибки), MAPE осторожно. Подгонять метрику под удобный результат — путь к самообману.
- Общая метрика по всем данным хорошая, но в каждом сегменте модель хуже базовой. Что это за эффект?A)Обычная случайная дисперсия оценки метрики, никакого систематического эффекта тут нетB)Переобучение на валидацииC)Некорректно посчитанная accuracyD)Парадокс Симпсона: агрегат маскирует обратную картину внутри сегментов
показать ответ и разбор
+D)Парадокс Симпсона: агрегат маскирует обратную картину внутри сегментов// разбор: Парадокс Симпсона: направление зависимости в агрегате может противоречить каждому подмножеству, если группы неравны по размеру и составу. В оценке моделей это значит, что общая метрика способна выглядеть хорошо, тогда как по важным срезам (регион, устройство, новизна пользователя) модель проигрывает. Поэтому метрики смотрят и в разрезах, а не только в целом — иначе решение принимается по обманчивому среднему.
- Модель A дала F1=0.81, модель B — 0.80 на одном тесте. Можно ли уверенно сказать, что A лучше?A)Да, большее значение метрики означает лучшую модель независимо от размера тестаB)Не факт: разница может быть шумом — нужен доверительный интервал (бутстрап) или тестC)Да, если тест содержит хотя бы 100 примеровD)Нет, сравнивать модели по метрикам некорректно
показать ответ и разбор
+B)Не факт: разница может быть шумом — нужен доверительный интервал (бутстрап) или тест// разбор: Точечная метрика — это оценка на конкретной выборке, у неё есть погрешность. Разница 0.81 против 0.80 может целиком лежать внутри шума, особенно на небольшом или «лёгком» тесте. Оценивают неопределённость: бутстрап по тестовым примерам даёт распределение метрики и доверительный интервал; для парного сравнения — тест на тех же объектах. Если интервалы существенно перекрываются, превосходство A не доказано.
- Модель оттока даёт accuracy 0.87. Чего не хватает, чтобы понять, полезна ли она?A)Сравнения с бейзлайном: что даёт «предсказываем частый класс»B)Ничего: 0.87 заметно выше 0.5, значит модель работаетC)Ещё нескольких эпох обучения — метрика подрастётD)Той же метрики на трейне: посчитать accuracy и там тоже
показать ответ и разбор
+A)Сравнения с бейзлайном: что даёт «предсказываем частый класс»// разбор: Метрика без точки отсчёта не значит ничего. Если 87% клиентов и так не уходят, константный ответ «останется» даёт те же 0.87 — модель не добавила ни бита. Поэтому сначала считают простой бейзлайн (частый класс, вчерашнее значение, популярное) и смотрят на прирост над ним, а при дисбалансе — ещё и на precision/recall по редкому классу.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.