Алгоритм рекомендации друзей на основе сходства - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь создать алгоритм рекомендации друзей, который каждую неделю рекомендует пользователям нового друга. Скажем, у меня есть база данных

user A
user B
user C
...

, и у них есть список увлечений

user A has interests [hobby1, hobby2, hobby3, etc...]
user B has interests [hobby3, hobby6, hobby8, etc...]
user C has interests [hobby1, hobby3, hobby4, etc...]
...

Как мне построить алгоритм, который парами выбирает хорошие рекомендации для всех, кто умеет он должен быть разным каждую неделю?

Неделя 1

user A -> user C [2 hobbies in common]
user B -> user A [1 hobby in common]
user C -> user B [1 hobby in common]
...

Неделя 2

user A -> user B [1 hobby in common]
user B -> user C [1 hobby in common]
user C -> user A [2 hobbies in common]
...

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

1 Ответ

1 голос
/ 21 июня 2020

Во-первых, вам нужна функция, которая принимает 2 пользователя (A и B) и выводит «оценку сходства». Самый простой способ сделать это - посчитать количество общих увлечений. Затем найдите пользователя, который имеет лучший «показатель сходства» с A, и порекомендуйте его A.
Ведите таблицу, содержащую все рекомендации (назовем ее t_recommendations), которые были сделаны определенному человеку, таким образом, В следующий раз, когда вам нужно будет порекомендовать нового человека группе А, возьмите человека с наивысшим «показателем сходства», т.е. не в t_recommendations.

Таблица t_recommendations будет иметь следующие столбцы:

  • recommended_to: идентификатор пользователя, получившего рекомендацию
  • recommended: идентификатор пользователь, которому рекомендовано recommended_to
  • recommendation_date: это необязательно, но может быть полезно, если вы хотите снова начать рекомендовать людей через некоторое время.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...