Я пытаюсь создать простую систему рекомендаций для книг , где у меня нет никаких оценок (нет комментариев, нет лайков, нет 1-5 звездочек, ...).
У меня есть DataFrame, который выглядит примерно так:
number type username product price model publishing_dt genres
0 6 access kerrigan 2345 12.99 printedbook 2020-02-01 fantasy,kids
1 4 access kerrigan 897 14.95 printedbook 2019-03-05 fantasy
2 1 orderline 45michael 86833 2.65 ebook 2020-02-04 action,war
3 1 orderline kerrigan 86833 2.65 ebook 2020-02-04 action,war
1 1 borderline 45michael 897 14.95 printedbook 2019-03-05 fantasy
Где type - это классификация доступа, сделанного пользователем: если это был заказ ( orderline ) или, если это был просто просмотр ( access ), в случае type = access number указывает количество раз, которое пользователь Получил доступ к книге, и product является уникальным идентификатором книги (я думаю, что другие поля говорят сами за себя).
Поскольку у меня нет никакой оценки, я ' я пытаюсь использовать купленный или не купленный в качестве основной информации для алгоритма, поэтому у меня будет матрица, которая выглядит следующим образом:
product 2345 897 86833
username
45michael 0.0 1.0 1.0
kerrigan 0.0 0.0 1.0
У меня есть проверял Surprise Library, так как она кажется очень популярной опцией для систем рекомендаций, но, читая документацию, я понял, что при этом для прогнозирования использовались бы только значения из этой матрицы, поэтому, если 45michael купил книгу 897 и 86833, а kerrigan также купил 86833, я предполагаю, что это предсказывает, что kerrigan также купит 897 из-за сходства между обоими пользователями (что не является ошибочным предположением).
Но я также хотел бы, чтобы система использовала скрытые факторы, например, жанры. Таким образом, было бы две дополнительные матрицы:
Одна, представляющая особенности книги -
genre fantasy kids action war
product
2345 1.0 1.0 0.0 0.0
897 1.0 0.0 0.0 0.0
86833 0.0 0.0 0.0 0.0
И другая, представляющая отношение между пользователями и функциями книги (принимая во внимание только те книги, которые пользователь купил) -
genre fantasy kids action war
username
45michael 1.0 0.0 1.0 1.0
kerrigan 0.0 0.0 1.0 1.0
Как реализовать SVD, чтобы он учитывал эти две матрицы для прогнозирования окончательных результатов?