О проекте

Архитектура и алгоритмы системы рекомендаций

Цель проекта

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

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

Архитектура системы

Frontend

Клиентская часть приложения реализована с использованием HTML5, CSS3 и фреймворка Bulma для создания адаптивного пользовательского интерфейса. Frontend обеспечивает взаимодействие пользователя с системой, отображение каталога книг, интерфейс для ввода оценок и визуализацию персональных рекомендаций. Все компоненты интерфейса спроектированы с учётом принципов юзабилити и доступности.

Backend

Серверная часть приложения построена на Python с использованием веб-фреймворка Flask или Django. Backend обрабатывает запросы от клиента, выполняет вычисления алгоритма коллаборативной фильтрации, взаимодействует с базой данных для получения и сохранения пользовательских оценок. Алгоритм рекомендаций реализован на стороне сервера для обеспечения безопасности данных и оптимизации производительности.

База данных

Для хранения данных используется реляционная база данных, которая содержит таблицы пользователей, книг и оценок. Структура базы данных оптимизирована для быстрого извлечения матрицы пользователь-книга, необходимой для вычисления сходства между пользователями. Индексация ключевых полей обеспечивает эффективность выполнения запросов при работе с большими объёмами данных.

Алгоритм рекомендаций

Система использует подход user-based collaborative filtering (коллаборативная фильтрация на основе пользователей) для генерации персональных рекомендаций. Данный алгоритм основан на предположении, что пользователи со схожими предпочтениями в прошлом будут иметь схожие предпочтения в будущем.

Этапы работы алгоритма:

  1. Формирование матрицы пользователь-книга: Создаётся матрица R, где элемент R[i][j] представляет оценку пользователя i для книги j. Отсутствующие оценки обозначаются как нулевые значения или не учитываются при вычислениях.
  2. Вычисление сходства между пользователями: Для определения степени сходства между пользователями применяется метрика косинусного сходства (cosine similarity). Формула вычисления: sim(u, v) = (R[u] · R[v]) / (||R[u]|| × ||R[v]||), где R[u] и R[v] — векторы оценок пользователей u и v соответственно.
  3. Поиск ближайших соседей: Для целевого пользователя выбирается множество k наиболее похожих пользователей (k-nearest neighbors) на основе вычисленного сходства. Значение k определяется эмпирически и влияет на баланс между точностью и разнообразием рекомендаций.
  4. Генерация рекомендаций: На основе оценок ближайших соседей вычисляется прогнозируемый рейтинг для книг, которые целевой пользователь ещё не оценивал. Рекомендации ранжируются по убыванию прогнозируемого рейтинга и представляются пользователю в виде упорядоченного списка.

Используемые технологии

Python

Язык программирования Python выбран в качестве основного инструмента разработки благодаря богатой экосистеме библиотек для машинного обучения и научных вычислений, а также простоте реализации алгоритмов обработки данных.

ML-библиотеки

Для реализации алгоритмов машинного обучения используются библиотеки NumPy для работы с многомерными массивами и матрицами, Pandas для обработки структурированных данных, и Scikit-learn для реализации метрик сходства и валидации моделей.

Веб-технологии

Frontend построен на HTML5 и CSS3 с использованием фреймворка Bulma для создания адаптивного и современного интерфейса. Backend реализован с использованием веб-фреймворка Flask или Django для обработки HTTP-запросов и управления сессиями.