Перед нами классичесая социальная сеть, в которой пользователи могут общаться, заводить новых друзей, присоединяться к группам, просматривать публикации в персональной ленте или ленте своих друзей. Мы заинтересованы, чтобы показанные публикации пользователям были наиболее релевантными. Что увеличит вовлечение наших клиентов в социальную сеть и они будут проводить больше времени в ней
По ID пользователя и на текущую дату сервис должен выдавать 5 наиболее релевантых публикаций для данного user. Метрика оценки качества Hitrate@5
- Загрузка данных из базы данных. Проведение EDA анализа
- Подготовка качественных признаков для обучения модели
- Выбор оптимальной модели машинного обучения. Оценка качества
- Загрузка предподготовленных признаков в базу данных
- Написание сервиса: загрузка модели -> получение признаков для модели по 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 поста, действие (лайк/просмотр)
В рабочей директории к проекту вы можете найти JupiterNotebook recom_system_EDA_ML.ipynb, где подробным образом отображены все этапы проекта от EDA анализа, отбора и генерации новых признаков, выбор оптимальной модели, оценки качества
custom_transformer_ohe_mte.py - кастомный класс-трансформер для кодирования категориальных признаков. Сохраняет прозрачность преобразований и структуру исходного датафрейма, что особоенно важно на этапе исследования. Описание атрибутов и методов класса можно увидеть в документации к классу или изучить скрипт в корневом каталоге
get_distilbet_emdedding.py - скрипт для получения эмбеддингов с помощью DistilBertModel
xgb_model_auc_069.pkl - предобученная модель
table_loader.py - скрипт, в котором происходят следущие этапы:
- выгрузка предподготовленных признаков для обучения модели из базы данных
- загрузка предобученной модели
- формирование массива признаков для модели по конктретному пользователю
- получение массива вероятностей(что пост будет лайкнут) - результат работы модели
schemas.py - модели pydentic
endpoint.py - ендпойнт: получаем в качестве запроса id пользователя и текущую дату -> формируем массив признаков для модели по одному пользователю -> получаем предсказания модели -> выбираем топ-5 с наибольшей вероятностью
requirements.txt - необходимые библиотеки