Аналогично, в БД разницы нет, что добавление в избранное, что автоматическое добавление в список просмотренных. Разве что психологическое различие — действие производится больше автоматически. Но YouTube, как и другие большие проекты, скорее всего использует гибридный метод.
Надо усложнить, сделать профиль хабраюзера на внешнем сайте, связать его с реальным профилем и прикрутить 10 бальные оценки.
Тогда можно будет делать более точные рекомендации.
Опробовал систему рекомендаций на себе — ни одна из рекомендованных статей не заинтересовала.
То ли что-то глючит, то ли рекомендации по этому алгоритму не работают.
Сделал поиск локальным, N-top user-based filtering. Т.е. сначала определяем neighbourhood пользователя, например 15 самых схожих. Потом делаем всё тоже самое только для этого локального подпространства.
Если сделать поиск глобальным, то самая примитивная регуляризация т.е. деление на np приводит к отвратительным результатам.
Упрощенно говоря, у нас есть один пользователь похожий на нас на 0.5 и он рекомендует статью Неведомая хрень и еще десять пользователей рекомендующих статью Хабр всё еще торт, в том числе два пользователя похожих на нас аж на 0.9 (супер высокий показатель), и еще 8 похожих на нас на 0.01.
Тогда для первой статьи Неведомая хрень: 0.5 / 1 ==> ранг 0.5
Для второй Хабр всё еще торт: ( 0.9 + 0.9 + 0.01*8 )/10 ==> ранг 0.19
Т.е. получается, что «далёкие» пользователи создают шум при регуляризации оценки.
Тоже попробовал на себе, ни одна статья не по теме моих интересов. Хотя в избранном немало статей.
А так идея очень хорошая.
И можно применить ее было бы на своих проектах. Скажем как вариант вытащить данные с поиска или контекстных сетей и показывать рекомендуемые материалы на основе этих данных.
Не, я попытался сильно упростить алгоритм и в итоге получилась лажа. Сейчас внёс небольшие изменения в код; можете посмотреть осмысленность текущей выдачи?
Пишем простую систему рекомендаций на примере Хабра