Skip to content

Рекомендательная система для публикаций социальной сети

Notifications You must be signed in to change notification settings

garick161/recommender_system

Repository files navigation

Рекомендательная система для публикаций социальной сети

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

Алгоритм работы сервиса

По ID пользователя и на текущую дату сервис должен выдавать 5 наиболее релевантых публикаций для данного user. Метрика оценки качества Hitrate@5

Этапы проекта

  1. Загрузка данных из базы данных. Проведение EDA анализа
  2. Подготовка качественных признаков для обучения модели
  3. Выбор оптимальной модели машинного обучения. Оценка качества
  4. Загрузка предподготовленных признаков в базу данных
  5. Написание сервиса: загрузка модели -> получение признаков для модели по user_id -> предсказание постов, которые лайкнут -> возвращение ответа

Использованные инструменты

ML модель: XGBoostClassifier

EDA: python, pandas, numpy, mathplotlib, seaborn, scikit-learn

Feature engeneering: pytorch, transformers

Бэкэнд-сервис: FastApi, SQLAlchemy,

Краткое описание таблиц в базе данных

  • user_data - сведения о пользователях при регистрации(id, пол, возраст, город, страна и др.)
  • post_text_df - описание публикаций(id, текс, топик (тема))
  • feed_post - пользовательский опыт за определенный период(id юзера, id поста, действие (лайк/просмотр)

EDA, обучение и выбор модели, оценка качества

В рабочей директории к проекту вы можете найти JupiterNotebook recom_system_EDA_ML.ipynb, где подробным образом отображены все этапы проекта от EDA анализа, отбора и генерации новых признаков, выбор оптимальной модели, оценки качества

custom_transformer_ohe_mte.py - кастомный класс-трансформер для кодирования категориальных признаков. Сохраняет прозрачность преобразований и структуру исходного датафрейма, что особоенно важно на этапе исследования. Описание атрибутов и методов класса можно увидеть в документации к классу или изучить скрипт в корневом каталоге

get_distilbet_emdedding.py - скрипт для получения эмбеддингов с помощью DistilBertModel

Рабочие файлы приложения (директория service)

xgb_model_auc_069.pkl - предобученная модель

table_loader.py - скрипт, в котором происходят следущие этапы:

  • выгрузка предподготовленных признаков для обучения модели из базы данных
  • загрузка предобученной модели
  • формирование массива признаков для модели по конктретному пользователю
  • получение массива вероятностей(что пост будет лайкнут) - результат работы модели

schemas.py - модели pydentic

endpoint.py - ендпойнт: получаем в качестве запроса id пользователя и текущую дату -> формируем массив признаков для модели по одному пользователю -> получаем предсказания модели -> выбираем топ-5 с наибольшей вероятностью

requirements.txt - необходимые библиотеки

About

Рекомендательная система для публикаций социальной сети

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published