Какие метрики для оценки рекомендательных систем вы знаете?

Ответ

Метрики для рекомендательных систем оценивают разные аспекты: точность предсказаний, качество ранжирования, разнообразие и бизнес-эффект.

1. Метрики точности предсказания рейтингов: Используются, когда система предсказывает явную оценку (например, звезды).

  • RMSE (Root Mean Squared Error): Квадратичная ошибка, более чувствительна к большим отклонениям.
  • MAE (Mean Absolute Error): Средняя абсолютная ошибка, более интерпретируема.
    from sklearn.metrics import mean_squared_error, mean_absolute_error
    rmse = mean_squared_error(y_true, y_pred, squared=False)
    mae = mean_absolute_error(y_true, y_pred)

2. Ранговые метрики (для топ-N рекомендаций): Оценивают порядок, в котором элементы предлагаются пользователю.

  • Precision@k: Доля релевантных элементов среди первых k рекомендованных. Precision@k = (# of relevant items in top k) / k
  • Recall@k: Доля охваченных релевантных элементов из всех возможных. Recall@k = (# of relevant items in top k) / (total # of relevant items)
  • NDCG@k (Normalized Discounted Cumulative Gain): Учитывает не только релевантность, но и позицию в списке, присваивая больший вес релевантным элементам наверху.

3. Метрики разнообразия и охвата:

  • Coverage: Доля уникальных элементов из всего каталога, которые когда-либо были рекомендованы. Низкое покрытие означает, что система рекомендует только популярные товары.
  • Средняя персональная диверсификация: Оценивает, насколько разные элементы внутри одного списка рекомендаций для конкретного пользователя (например, через расстояние между эмбеддингами товаров).

4. Онлайн (бизнес) метрики:

  • CTR (Click-Through Rate): Процент случаев, когда пользователь кликнул по рекомендованному элементу.
  • Conversion Rate: Процент рекомендаций, приведших к целевому действию (покупка, просмотр).

На практике для оффлайн-валидации часто используют Recall@k и NDCG@k, так как они хорошо отражают качество ранжирования, а для A/B-тестов — бизнес-метрики вроде CTR.

Ответ 18+ 🔞

Слушай, давай разберёмся с этими вашими метриками для рекомендашек, а то у меня уже терпения ноль, ебать. Представь, ты построил систему, которая советует людям, что посмотреть или купить. Как понять, что она не полная хуйня? Вот для этого и нужны цифры, которые всё покажут, как на ладони.

1. Метрики, которые считают, насколько ты промахнулся с оценкой. Это когда твоя система пытается угадать, какую оценку (звёзды там, лайки) поставит пользователь. Тут всё просто: чем меньше ошибка, тем лучше, епта.

  • RMSE (Среднеквадратичная ошибка): Суровая метрика. Если ты сильно облажался и предсказал 5 звёзд вместо 1, она тебе так въебает по баллам, что мало не покажется. Квадрат ошибки — он жестокий, но справедливый.
  • MAE (Средняя абсолютная ошибка): Более спокойный чувак. Просто берёт модуль разницы и усредняет. Ошибся на 4 звёзды — получи 4 балла штрафа. Всё честно и понятно, как божий день.
    from sklearn.metrics import mean_squared_error, mean_absolute_error
    rmse = mean_squared_error(y_true, y_pred, squared=False)
    mae = mean_absolute_error(y_true, y_pred)

2. Метрики для топа, или "А что ты мне в первую пятёрку суёшь?" А вот это уже интереснее. Пользователю-то похуй на точную оценку, ему главное — чтобы в первых строчках выдачи было что-то годное. Тут оценивают именно порядок.

  • Precision@k (Точность для первых k): Считает, сколько в твоей топовой пятёрке (или десятке) оказалось реально нужного пользователю дерьма. Формула проще некуда: (сколько годного в топе) / k. Если из 5 рекомендаций 2 были релевантны — precision@5 = 0.4. Не айс, но жить можно.
  • Recall@k (Полнота для первых k): А эта хитрая жопа смотрит по-другому. Она отвечает на вопрос: "А сколько ты из ВСЕГО нужного пользователю говна смог запихнуть в этот топ?" Если у пользователя в истории 10 любимых фильмов, а ты в топ-5 запихнул 2 из них, то recall@5 = 0.2. В общем, овердохуища возможностей для роста.
  • NDCG@k: Самый умный пацан в этой компании. Он не только смотрит, что годное есть в топе, но и РАНЖИРУЕТ это годное. Поставил самый крутой фильм на первое место — молодец, получи конфетку. Засунул его на пятую позицию — уже не так здорово. Эта метрика это всё учитывает и нормализует, чтобы у всех была общая шкала. Красота, ебать.

3. Метрики, которые кричат: "Давай что-нибудь новенькое, заколебал!" А то ведь можно тупо рекомендовать всем одно и то же — "Зелёную книгу", "Игру в кальмара" и "Брат". Precision будет высокий, а пользователи сдохнут от скуки.

  • Coverage (Покрытие): Показывает, насколько твоя рекомендательная система — распиздяй, который юзает только 10% самого популярного контента, или же она — щедрый король, который задействует почти весь каталог. Считается просто: (сколько уникальных товаров из каталога хоть раз кому-то порекомендовали) / (всего товаров).
  • Средняя персональная диверсификация: А это уже про то, насколько разношёрстный плейлист ты подсунул КОНКРЕТНОМУ Васе. Не будет же он смотреть 10 боевиков подряд (хотя... может и будет). Считается через схожесть эмбеддингов товаров внутри одного списка. Чем они менее похожи — тем лучше.

4. Бизнес-метрики, от которых у менеджеров встаёт. Всё это, конечно, академично и красиво, но бизнесу похуй на твой NDCG. Ему нужны клики и бабло.

  • CTR (Click-Through Rate): Процент, который отвечает на вопрос "Сколько раз пользователь, увидев твою рекомендацию, таки кликнул на эту поебень?". Если из 100 показов кликнули 2 — CTR = 2%. Всё, можно идти переписывать резюме.
  • Conversion Rate (Коэффициент конверсии): А это уже серьёзнее. Сколько раз твоя рекомендация привела не просто к клику, а к ЦЕЛЕВОМУ действию — покупке, подписке, долгому просмотру. Вот за это уже платят деньги, ебать колотить.

Итог, ёпта: Пока ты кайфуешь от оффлайн-экспериментов, гоняй Recall@k и NDCG@k — они покажут, не идиот ли ты. Но как только выкатываешь систему на живых людей, забудь про них и смотри только на CTR и Conversion Rate. Потому что если бизнес-метрики не растут, то твоя умная модель — просто хуй в пальто, а не рекомендательная система.