Система рекомендаций ведет учет того, какие рекомендации были сделаны конкретному пользователю и принимает ли этот пользователь рекомендацию. Это как
user_id item_id result
1 4 1
1 7 -1
5 19 1
5 80 1
где 1 означает, что пользователь принял рекомендацию, а -1 означает, что пользователь не ответил на рекомендацию.
Вопрос: Если я собираюсь давать рекомендации группе пользователей на основе описанного выше вида журнала и хочу максимально увеличить баллы MAP @ 3, как мне поступить с неявными данными (1 или -1)?
Моя идея состоит в том, чтобы рассматривать 1 и -1 как рейтинги и прогнозировать рейтинг, используя алгоритмы машинного типа факторизации. Но это не кажется правильным, учитывая асимметрию неявных данных (-1 не означает, что пользователю не нравятся рекомендации).
Редактировать 1 Давайте подумаем об этом в контексте подхода матричной факторизации. Если мы будем рассматривать -1 и 1 как рейтинги, возникнут некоторые проблемы. Например, пользователю 1 нравится фильм А, который получает высокие оценки по одному фактору (например, имеет великолепную фоновую музыку) в пространстве скрытых факторов. Система рекомендует фильм B, который также имеет высокие оценки в «великолепной фоновой музыке», но по какой-то причине пользователь 1 слишком занят, чтобы рассмотреть рекомендацию, и у нас есть фильм с рейтингом -1, равный -1. , тогда система может отговорить рекомендовать фильм с великолепной фоновой музыкой пользователю 1, в то время как пользователь 1 все еще любит фильм с великолепной фоновой музыкой. Я думаю, что этой ситуации следует избегать.
Ответы:
Ваша система не просто обучена на предметах, которые рекомендуются правильно? Если это так, у вас есть большой цикл обратной связи здесь. Вы хотите учиться на всех кликах / просмотрах, я надеюсь.
Вы предполагаете, что не глядя на предмет является негативным сигналом. Я настоятельно рекомендую вам не относиться к этому так. Не взаимодействовать с чем-то почти всегда лучше всего рассматривать как отсутствие информации. Если у вас есть явный сигнал, который указывает на неприязнь, например, отрицательное голосование (или, возможно, просмотрели 10 секунд видео и остановили), возможно, это действительно так.
Я бы не стал воспринимать эти данные как данные, подобные рейтингу. (Хотя в вашем случае вам это может сойти с рук.) Вместо этого думайте о них как о весах, что в точности отражено в статье Ху Корена Волинского о ALS, которую @Trey упоминает в комментарии. Это позволяет записывать относительную силу положительных / отрицательных взаимодействий.
Наконец, я хотел бы отметить, что этот документ, хотя, скорее всего, будет именно тем, что вы ищете, не содержит отрицательных весов. Это просто расширить таким образом. Если вы продвинетесь так далеко, я могу указать вам на простое расширение, которое существует уже в двух известных мне реализациях, в Spark и Oryx .
источник