Как посчитать money recall для рекомендаций
Две модели имеют похожие Precision@k и Recall@k, но одна приносит больше денег, потому что рекомендует более дорогие релевантные товары. Как адаптировать offline-метрику?
Короткий ответ
Обычный Recall@k можно заменить weighted recall: в числителе сумма gain по релевантным товарам, попавшим в top-k, в знаменателе сумма gain по всем релевантным товарам. gain выбирают из GMV, маржи, комиссии или сглаженной цены.
Полный разбор
Формулировка:
money_recall@k = sum gain(item) по item из top-k, которые были релевантны / sum gain(item) по всем релевантным item.
Если релевантность - покупка, то в числителе суммируем не единицы, а ценность купленных товаров, которые модель успела показать в top-k. В знаменателе суммируем ценность всех купленных релевантных товаров в holdout. Так модель, которая нашла дорогой релевантный товар, получает больше credit, чем модель, которая нашла только дешевый товар.
Главное - выбрать корректный gain. В маркетплейсе это может быть цена, GMV, маржа, комиссия, profit или log/clip/quantile transform от цены, чтобы не дать одному дорогому товару полностью доминировать метрику. Money recall полезен как offline proxy, но его нужно проверять online и держать guardrails: конверсия, пользовательское качество, diversity и fairness к дешевым товарам.
Теория
Это weighted ranking metric. Та же идея переносится на Precision@k, NDCG@k и MAP: вместо бинарного gain использовать business value.
Типичные ошибки
- Умножить итоговый Recall@k на среднюю цену, а не взвешивать конкретные hits.
- Использовать price, хотя бизнес зарабатывает на марже или комиссии.
- Не обсудить риск bias в сторону дорогих товаров.
Как отвечать на собеседовании
- Сразу запиши числитель и знаменатель weighted recall.
- Спроси, что именно является деньгами: GMV, маржа, комиссия или profit.