Я разрабатываю приложение, которое включает в себя систему рекомендаций, основанную на взаимодействии с пользователем (совместная фильтрация). Пользователю на его домашней странице предоставляется набор из 6 элементов для взаимодействия. Будет от 50 до 300 предметов. Возможны следующие действия:
- нажмите на элемент (сильный интерес)
- обновить элемент (некоторый интерес)
- открыть диалоговое окно для чтения (некоторый интерес)
- ничего не делай дальше (нет интереса)
Эти данные собираются и хранятся. Система должна рекомендовать интересующие пользователя элементы. Я подумываю превратить эти данные в рейтинговую систему.
Вариант A) если пользователь нажимает на элемент, это преобразуется в неявный рейтинг жизненного цикла 5. обновление элемента - 4 и так далее. Итак, моя матрица user->item будет выглядеть так:
item 1 | item 2 | item 3
john 5 4
jane 4
В этом примере Джон щелкнул элемент 1 и обновил элемент 3. На самом деле рейтинг может только повышаться, т. е. если пользователь ранее обновлял элемент, я пишу 4 и обновляю только до 5, если элемент щелкнут позже.
Вариант Б) каждый раз, когда пользователь выполняет одно из вышеуказанных действий, я буду увеличивать скалярное значение для элемента, что означает, что он может расти неограниченно.
item 1 | item 2 | item 3
john 55 1 30
jane 41 9
Может в этом и проблема, так как теперь цифры сложнее перевести в оценочную шкалу от 1 до 10
Вариант C) Я считаю каждое взаимодействие отдельно
item 1 click | item 1 refresh | item 1 read
john 3 1
jane 1 1
Здесь проблема в том, что «чтение информации» об элементе, вероятно, выполняется только один раз.
Независимо от того, какой вариант я выберу, моя идея состоит в том, чтобы сначала найти похожих пользователей, используя что-то вроде косинусного сходства или корреляции Пирсона. Затем выберите от 10 до 30 лучших пользователей из этого списка и составьте топ-лист их любимых элементов. Затем из этого списка я буду рекомендовать элементы, с которыми текущий пользователь мало взаимодействовал в прошлом.
Это то, что может сработать? Я беспокоюсь, что поиск похожих пользователей устранит шанс найти интересные (новые) элементы для текущего пользователя.