Как бы вы выбирали похожие сущности, которые могли бы максимально заинтересовать пользователя? Например, видео.
У вас есть ID и категории текущего видео. Пользователь может быть анонимом, а может быть зарегистрированным. Если он зарегистрированный, то у вас есть список его любимых видео. У каждого видео есть кол-во лайков и дислайков, кол-во просмотров. Видео хранится в базе данных “video”. Категории к видео хранятся в столбце под названием “categories” в виде ID этих категорий через запятую (1,23,40). Лайки - “likes”, дислайки - “dislikes”, просмотры - “views”.
Какой алгоритм, который бы работал в условиях высоких нагрузок, вы могли-бы предложить? Не обязательно использовать все данные.
Была создана таблица video_popular, для каждого видео на основе лайков и дизлайков высчитывается баллы (Нижняя граница доверительного интервала Вильсона (Wilson) для параметра Бернулли) и записываются в video_popular
Данные в таблицу video_popular - записываются когда пользователь ставит Like или Dislike
Максимальное количество самых популярных видо для категории ограничивается константой MAX_POPULAR_VIDEO_IN_CATEGORY
Рекомендации выбираются из таблицы video_popular на основе категорий просматриваемого видео. Выводятся 5 случайных популярных видео для указанных категорий.
Вывод самых популярных видео для не авторизированных пользователей на главной старнице
Для авторизированных пользователей брать из понравившихся ему видео выбрать чаще всего встречающиеся категории и получит список самых популярных видео для них.
Что бы улучшить качество рекомендаций можно использовать "коллаборативную фильтрацию" на основе понравившихся пользователю видео
Генерацию популярных видео по расписанию а не при установке лайков и дизлайков