Ответ
Метрики для рекомендательных систем оценивают разные аспекты: точность предсказаний, качество ранжирования, разнообразие и бизнес-эффект.
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. Потому что если бизнес-метрики не растут, то твоя умная модель — просто хуй в пальто, а не рекомендательная система.