Post recommendation system using CatBoost, BERT embeddings, and dimensionality reduction
Этот проект направлен на создание рекомендательной системы для социальной сети студентов karpov.courses. Вместо случайной ленты постов пользователи будут получать персонализированные рекомендации на основе индивидуальных характеристик, прошлой активности и содержимого самих постов. С точки зрения разработки необходимо реализовать сервис, который будет для каждого юзера в любой момент времени возвращать посты, которые наиболее вероятно ему понравятся.
- Набор пользователей фиксирован, и новых добавляться не будет.
- Чекер будет проверять модель в рамках того же временного периода, что и в базе данных.
- Формат запроса\ответа:
Формат запроса:
| Название поля | Описание |
|---|---|
id |
ID user’а для которого запрашиваются посты |
time |
Объект типа datetime: datetime.datetime(year=2021, month=1, day=3, hour=14) |
limit |
Количество постов для юзера |
Формат ответа:
| Название поля | Описание |
|---|---|
id |
ID user’а для которого запрашиваются посты |
text |
Текстовое содержание поста |
topic |
Основная тематика |
- Сервис должен работать быстро: < 0.5 сек/запрос, использовать < 4 ГБ памяти.
- Модели не обучаются заново при использовании сервисов. Код должен импортировать уже обученную модель и применять её.
Задание состоит из двух независимых этапов, каждый из которых оценивается по метрике HitRate@5:
-
Классическое ML-решение
- Используются алгоритмы машинного обучения и feature engineering
- Требуемое качество: HitRate@5 > 0.52
- Достигнутое качество: 0.597
-
Улучшение имеющегося решениия с помощью Deep Learning-подхода
- Обязательное применение нейронных сетей
- Требуемое качество: HitRate@5 > 0.57
- Достигнутое качество: 0.604
Дополнительно: Реализация разбиения пользователей на контрольную и тестовую группы для проведения A/B-тестирования
Сервис должен:
- Поддерживать использование двух различных моделей рекомендаций
- Автоматически разбивать пользователей на контрольную и тестовую группы
- Залоггировать, какая модель была использована
| Название поля | Описание |
|---|---|
user_id |
Уникальный идентификатор пользователя |
age |
Возраст пользователя (указан в профиле) |
city |
Город пользователя (указан в профиле) |
country |
Страна пользователя (указана в профиле) |
gender |
Пол пользователя |
os |
Операционная система устройства, с которого осуществляется вход в соцсеть |
source |
Источник трафика: органический или реклама |
exp_group |
Экспериментальная группа, к которой принадлежит пользователь (зашифрованная категория) |
| Название поля | Описание |
|---|---|
id |
Уникальный идентификатор поста |
text |
Текстовое содержание поста |
topic |
Основная тематика |
| Название поля | Описание |
|---|---|
timestamp |
Время, когда был произведен просмотр |
user_id |
id пользователя, который совершил просмотр |
post_id |
id просмотренного поста |
action |
Тип действия: просмотр или лайк |
target |
1 у просмотров, если почти сразу после просмотра был совершен лайк, иначе 0. У действий like пропущенное значение. |