сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Классический ML

Ловушки метрик качества

Зачем это спрашивают

Сеньорский слой темы: не «какие бывают метрики», а «что с метрикой может пойти не так». Гудхарт, Симпсон, дрейф - здесь проверяют шрамы, а не эрудицию. Хотят услышать историю про то, как метрика соврала лично тебе.

Типовые формулировки: «метрика выросла, а бизнесу хуже - как так?», «как поймёшь, что модель в проде деградировала?», «твоя модель лучше на 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, остальные разбираются в тренажёре.

  1. #metric_pitfalls1 / 5
    Метрики на кросс-валидации подозрительно высоки, а на новых данных падают. Ловушка со стороны данных?
    A)Target leakage: признак из будущего или пересечение train/valid завышает оценку
    B)Слишком большая тестовая выборка, из-за которой метрики случайно оказались завышены
    C)Использование стратифицированной кросс-валидации
    D)Нормализация признаков перед обучением
    показать ответ и разбор
    +A)Target leakage: признак из будущего или пересечение train/valid завышает оценку

    // разбор: Подозрительно высокие метрики — классический признак утечки. Формы: признак, косвенно содержащий таргет или доступный лишь постфактум (напр. дата закрытия сделки для прогноза сделки); групповая утечка, когда строки одного пользователя/сессии попали и в train, и в valid; препроцессинг (масштаб, отбор фич), обученный на всех данных до сплита. Всё это раздувает офлайн-оценку и рушится в проде. Лечат аккуратным сплитом (по группам/времени) и fit только на train.

  2. #metric_pitfalls2 / 5
    Как выбрать метрику качества под конкретную задачу?
    A)Брать accuracy — она универсальна и одинаково подходит самым разным задачам ML
    B)Брать 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 осторожно. Подгонять метрику под удобный результат — путь к самообману.

  3. #metric_pitfalls3 / 5
    Общая метрика по всем данным хорошая, но в каждом сегменте модель хуже базовой. Что это за эффект?
    A)Обычная случайная дисперсия оценки метрики, никакого систематического эффекта тут нет
    B)Переобучение на валидации
    C)Некорректно посчитанная accuracy
    D)Парадокс Симпсона: агрегат маскирует обратную картину внутри сегментов
    показать ответ и разбор
    +D)Парадокс Симпсона: агрегат маскирует обратную картину внутри сегментов

    // разбор: Парадокс Симпсона: направление зависимости в агрегате может противоречить каждому подмножеству, если группы неравны по размеру и составу. В оценке моделей это значит, что общая метрика способна выглядеть хорошо, тогда как по важным срезам (регион, устройство, новизна пользователя) модель проигрывает. Поэтому метрики смотрят и в разрезах, а не только в целом — иначе решение принимается по обманчивому среднему.

  4. #metric_pitfalls4 / 5
    Модель A дала F1=0.81, модель B — 0.80 на одном тесте. Можно ли уверенно сказать, что A лучше?
    A)Да, большее значение метрики означает лучшую модель независимо от размера теста
    B)Не факт: разница может быть шумом — нужен доверительный интервал (бутстрап) или тест
    C)Да, если тест содержит хотя бы 100 примеров
    D)Нет, сравнивать модели по метрикам некорректно
    показать ответ и разбор
    +B)Не факт: разница может быть шумом — нужен доверительный интервал (бутстрап) или тест

    // разбор: Точечная метрика — это оценка на конкретной выборке, у неё есть погрешность. Разница 0.81 против 0.80 может целиком лежать внутри шума, особенно на небольшом или «лёгком» тесте. Оценивают неопределённость: бутстрап по тестовым примерам даёт распределение метрики и доверительный интервал; для парного сравнения — тест на тех же объектах. Если интервалы существенно перекрываются, превосходство A не доказано.

  5. #metric_pitfalls5 / 5
    Модель оттока даёт accuracy 0.87. Чего не хватает, чтобы понять, полезна ли она?
    A)Сравнения с бейзлайном: что даёт «предсказываем частый класс»
    B)Ничего: 0.87 заметно выше 0.5, значит модель работает
    C)Ещё нескольких эпох обучения — метрика подрастёт
    D)Той же метрики на трейне: посчитать accuracy и там тоже
    показать ответ и разбор
    +A)Сравнения с бейзлайном: что даёт «предсказываем частый класс»

    // разбор: Метрика без точки отсчёта не значит ничего. Если 87% клиентов и так не уходят, константный ответ «останется» даёт те же 0.87 — модель не добавила ни бита. Поэтому сначала считают простой бейзлайн (частый класс, вчерашнее значение, популярное) и смотрят на прирост над ним, а при дисбалансе — ещё и на precision/recall по редкому классу.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.