сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Рекомендательные системы

Метрики качества рекомендаций

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

Метрики рексиса - минное поле: случайный сплит, кликбейт в кликах, новизна-эффект. «Как поймёшь, что рекомендации стали лучше» - вопрос, в котором почти каждый шаг можно сделать неправильно.

// Каркас ответа: офлайн @K на time-сплите - фильтр; онлайн A/B - приговор.

Офлайн: @K и сплит по времени

Офлайн-метрики - precision/recall@K, NDCG (normalized discounted cumulative gain)@K, MAP - считаются на отложенном по времени сплите: train - прошлое, test - будущее. Случайный сплит взаимодействий утекает «будущие вкусы» в обучение - классическая утечка рексиса.

Офлайн смещён логами старой системы: непоказанное не имело шанса стать «релевантным». Поэтому офлайн - фильтр кандидатов на онлайн, а не замена ему.

// Связку офлайн→онлайн проверяют: если рост NDCG не двигает продуктовую метрику - сломан офлайн-прокси, чинить надо его.

time-based split
train из прошлого, test из будущего, иначе утечка

Beyond-accuracy: качество выдачи как продукта

Точность - не всё: coverage (какая доля каталога вообще рекомендуется), novelty (непопулярность рекомендованного), diversity (непохожесть внутри списка), serendipity (приятная неожиданность).

Гонка за recall@K без этих метрик деградирует выдачу до попсы: метрика растёт, продукт скучнеет, длинный хвост каталога мёртв.

// Держи beyond-accuracy как guardrail: релевантность оптимизируем, разнообразие и покрытие - не роняем.

coverage
доля каталога, попадающая в рекомендации хоть кому-то
serendipity
релевантное И неожиданное - то, за что любят рекомендации

Онлайн: A/B со всеми оговорками рексиса

Истинный критерий - онлайн: CTR (click-through rate), конверсия, выручка на сессию, retention; рядом guardrail'ы - жалобы, скрытия, разнообразие выдачи.

Рексис-специфика A/B: новизна-эффект первых дней (любая смена выдачи собирает лишние клики), недельная сезонность - тест держат минимум полный цикл и решают по стабилизировавшемуся хвосту.

// Клик - не всегда польза: кликбейтные обложки накручивают CTR при падении досмотров. Нужен downstream-сигнал: досмотры, возвраты, покупки.

novelty effect
всплеск метрик от самой смены выдачи; выветривается

Как отвечать: «Как поймёшь, что новая модель рекомендаций лучше?»

Двумя ступенями. Офлайн: NDCG@K и recall@K на сплите строго по времени - случайный сплит взаимодействий сразу дисквалифицирует оценку; рядом смотрю coverage и разнообразие, чтобы рост точности не был сужением в попсу. Офлайн-выигрыш - только билет на A/B. Онлайн: продуктовые метрики - конверсия, выручка на сессию, retention - с guardrail на жалобы и разнообразие; тест держу полный недельный цикл и не верю первым дням - новизна-эффект накручивает клики любой смене выдачи. И проверяю кликбейт-риск: CTR вырос, а досмотры упали это не победа.

Обе ступени с их ловушками: time-сплит, попса-риск, новизна, кликбейт. Карта граблей, по которой видно прошедшего по ним.

На чём валят

  • Случайный сплит взаимодействий - «будущие вкусы» утекли в обучение.
  • Гнаться за recall@K без разнообразия - выдача деградирует в попсу.
  • Судить о запуске по первым трём дням - новизна-эффект выветрится.
  • Мерить пользу кликами при кликбейтных обложках - нужен downstream-сигнал.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 14, остальные разбираются в тренажёре.

  1. #recsys_metrics1 / 5
    Офлайн NDCG заметно вырос, а онлайн CTR и выручка в A/B не изменились. Почему офлайн-метрики рекомендаций часто врут?
    A)Офлайн-метрики врут только из-за случайных багов в коде их подсчёта и после исправления точно совпадают с онлайном
    B)Офлайн считают на логах прошлой модели (exposure bias); контрфактов нет — надёжен только онлайн A/B
    C)Онлайн и офлайн обязаны совпадать, а расхождение однозначно означает, что A/B-тест был проведён технически неверно
    D)Причина исключительно в том, что офлайн-выборку взяли слишком маленькой; на большем логе NDCG и CTR неизбежно сойдутся
    показать ответ и разбор
    +B)Офлайн считают на логах прошлой модели (exposure bias); контрфактов нет — надёжен только онлайн A/B

    // разбор: Офлайн-метрику считают на логах, собранных прошлой моделью: пользователь оценивал только то, что она ему показала (exposure bias), а как он отреагировал бы на новые рекомендации — неизвестно (нет контрфактов). Поэтому рост NDCG на исторических показах не обязан переноситься в онлайн-поведение. Надёжный ответ даёт онлайн A/B, а офлайн — лишь дешёвый фильтр гипотез. Дело не в размере выборки и не в баге.

  2. #recsys_metrics2 / 5
    Что измеряет MRR (mean reciprocal rank)?
    A)Среднюю долю релевантных товаров, попавших в топ-K выдачи, по всем пользователям сервиса сразу, без какой-либо привязки к позиции первого попадания в списке выдачи
    B)Насколько высоко в выдаче стоит ПЕРВЫЙ релевантный товар: усреднённая величина 1/позиция по запросам
    C)Общее число товаров каталога, делённое на средний ранг случайно взятого товара в выдаче
    D)Среднее время до первого клика пользователя по рекомендации, измеренное в миллисекундах ответа
    показать ответ и разбор
    +B)Насколько высоко в выдаче стоит ПЕРВЫЙ релевантный товар: усреднённая величина 1/позиция по запросам

    // разбор: MRR смотрит на позицию первого релевантного результата: для запроса берут reciprocal rank = 1/позиция (первое место → 1, второе → 0.5, ...), затем усредняют по всем запросам. Метрика хороша там, где важен именно первый успешный ответ (поиск, «есть ли релевантное вверху»), но игнорирует остальные релевантные ниже. Это про ранг первого попадания, а не про полноту, охват каталога или время ответа.

  3. #recsys_metrics3 / 5
    Что учитывает MAP@K (mean average precision), чего не видит обычный Precision@K?
    A)Ровно то же самое: MAP@K — это более длинное название для Precision@K, и обе возвращают одинаковое значение на выдаче
    B)Скорость формирования топ-K выдачи, усреднённую по всем пользователям тестовой выборки
    C)Позиции релевантных внутри топа: precision пересчитывается на каждой релевантной позиции и усредняется
    D)Долю пользователей, у которых в топ-K попал хотя бы один релевантный товар из их истории
    показать ответ и разбор
    +C)Позиции релевантных внутри топа: precision пересчитывается на каждой релевантной позиции и усредняется

    // разбор: Precision@K — просто доля релевантных в топ-K, безразличная к тому, стоят они первыми или последними. Average Precision усредняет precision, замеренную на КАЖДОЙ релевантной позиции, поэтому вознаграждает, когда релевантные подняты выше; MAP@K — среднее AP по пользователям. Так метрика чувствительна к порядку внутри топа. Долю юзеров с хотя бы одним попаданием меряет hit rate, а не MAP.

  4. #recsys_metrics4 / 5
    Модель максимизирует только точность, но продукт страдает. Какие метрики «за рамками точности» смотрят?
    A)Офлайн-accuracy и NDCG — остальные метрики рекомендаций не несут полезной информации
    B)Скорость инференса и потребление памяти сервисом рекомендаций под нагрузкой
    C)Доля пользователей, открывших блок рекомендаций хотя бы раз за отчётный период времени
    D)Coverage, diversity, novelty, serendipity: охват каталога, разнообразие, новизна и приятная неожиданность
    показать ответ и разбор
    +D)Coverage, diversity, novelty, serendipity: охват каталога, разнообразие, новизна и приятная неожиданность

    // разбор: Оптимизация одной точности часто ведёт к унылой, популярной и однообразной выдаче. Beyond-accuracy метрики измеряют другие грани качества: coverage (какая доля каталога вообще рекомендуется), diversity (насколько товары в выдаче непохожи), novelty (насколько они неочевидны/непопулярны), serendipity (полезная неожиданность). Их держат в балансе с точностью, потому что именно они двигают долгосрочное удержание. Это не про скорость и не про охват аудитории.

  5. #recsys_metrics5 / 5
    Что такое hit rate@K в оффлайн-оценке рекомендаций?
    A)Доля пользователей, у которых хотя бы один релевантный товар попал в топ-K рекомендаций
    B)Среднее число кликов на одного пользователя по всему блоку рекомендаций за сессию просмотра
    C)Отношение размера выдачи K к общему числу товаров в каталоге, усреднённое по всем пользователям
    D)Число релевантных товаров в каталоге, которые модель не сумела показать ни одному пользователю
    показать ответ и разбор
    +A)Доля пользователей, у которых хотя бы один релевантный товар попал в топ-K рекомендаций

    // разбор: Hit rate@K (он же hit ratio) — доля пользователей, для которых модель «попала»: в их топ-K оказался хотя бы один товар из отложенного релевантного набора (например, следующий купленный). Простая и интуитивная метрика «нашли ли вообще что-то нужное», популярная в leave-one-out оценке. Она не различает, сколько именно релевантных и на каком месте — это уже область Recall@K, MAP и NDCG.

дальше

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

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