Для вычисления центра и разброса года используются накопленные суммы:
где:
-
$R$ — оценка пользователя. -
$Y$ — год выпуска оцененного аниме. -
$\mu$ — центр предпочтений по годам (взвешенное среднее). -
$\sigma_{user}^2$ — дисперсия предпочтений пользователя («гибкость» вкуса по годам). -
$N$ — количество положительных оценок. -
$m$ — константа сглаживания (рекомендуется m = 5) -
$\sigma^2_{prior}$ — априорная дисперсия годов (рекомендуемое значение:$9-25$ , соответствует разбросу 3-5 лет). -
$\sigma^2$ — итоговая дисперсия, используемая в формулах.
Чтобы учесть уверенность пользователя, общая сумма оценок умножается на логарифмический коэффициент количества оценок:
где:
-
$\sum R_g = S_g$ — простая сумма всех оценок, поставленных аниме этого жанра. -
$N_g$ — количество оценок в этом жанре. -
$W_g$ — итоговый вес жанра.
где:
-
$Y$ — год выпуска рассматриваемого аниме. -
$w_{year}$ — коэффициент близости года к предпочтениям.
где:
-
$s$ $\in$ $Studios(a)$ . -
$P_s$ — накопленный вес предпочтения к студии$s$ (может быть отрицательным). -
$R_a$ — оценка пользователя за аниме$a$ . -
$Studios(a)$ — студии, участвовавшие в создании аниме$a$ .
где:
-
$U$ — пользовательский вектор жанров и студий. -
$A$ — вектор аниме жарнов и студий. -
$Score$ — финальная метрика релевантности аниме.
Если у вас есть идеи по улучшению этого алгоритма / сомнения в его работоспособности, я буду рад видеть вас в Discussions
- Установите зависимости для сервера и фронтенда:
npm install
npm --prefix server install
npm --prefix client install-
Настройте Yandex OAuth в
server/.envна основеserver/.env.example. -
Запустите сервис:
npm run dev- Откройте в браузере:
- фронтенд:
http://localhost:5173 - сервер:
http://localhost:4000