← Назад к портфолио

01 / Case Study

SmartScore

ML-система скоринга объявлений недвижимости

Классификация объявлений по потенциальному спросу с последующим batch-инференсом и сохранением результатов в production-пайплайне.

CatBoost LightGBM PostgreSQL Airflow S3 MLOps
system running slowly
ROC-AUC 0.9919
PR-AUC 0.9378
Recall 0.9796
01

О проекте

SmartScore определяет объявления с высоким потенциальным спросом относительно объектов в том же городе и сегменте.

Итоговый score может использоваться как дополнительный сигнал для ранжирования объявлений.

02

Данные

661K+

объявлений в основной таблице.

10

городов представлены в данных.

64

исходных признака listings.

Использовались данные listings, calendar и reviews. В данных присутствуют характеристики объектов, хозяев, цены, рейтинги, доступность и история отзывов.

03

Target Engineering

Сегментация

Расчёт выполнялся отдельно для комбинации город + тип жилья.

Медианы

Для сегментов рассчитывались медианы отзывов, цены и рейтинга.

High Demand

Объект относился к целевому классу при выполнении всех заданных условий относительно медиан сегмента.

Признаки, участвующие в формировании target или содержащие потенциальную информацию о будущем спросе, исключались из модели для снижения риска data leakage.

04

Feature Engineering

price_per_person avg_stay_nights stay_ratio host_age_days host_quality_score name_length name_word_count desc_length amenities_count bathrooms_per_guest beds_per_guest

Категории

CatBoost обрабатывает категориальные признаки без One-Hot Encoding.

Текст

Текстовые поля очищались и передавались в CatBoost для внутреннего преобразования.

Бизнес-признаки

Созданы признаки цены, длительности проживания, качества объявления и характеристик хозяина.

05

Model Development

Model ROC-AUC PR-AUC F1 Recall
Logistic Regression 0.9262 0.6229 0.5812 0.8514
CatBoost 0.9919 0.9378 0.8223 0.9796
LightGBM 0.9684 0.8130 0.6768 0.9345
XGBoost 0.9655 0.7998 0.6485 0.9454

CatBoost

Финальная модель с лучшими показателями по основным метрикам.

PR-AUC

Основная метрика выбора модели из-за дисбаланса классов.

Optuna

Использовалась для автоматического подбора гиперпараметров.

06

Hyperparameter Optimization

iterations: 984
learning_rate: 0.09884
depth: 10
l2_leaf_reg: 7.4489
random_strength: 2.2944
bagging_temperature: 0.6931
07

Evaluation

Recall

0.9796

Большая часть объектов целевого класса обнаруживается моделью.

PR-AUC

0.9378

Высокое качество ранжирования положительного класса при дисбалансе.

08

Production Architecture

Batch inference запускается через Apache Airflow. Данные поступают из PostgreSQL, модель и артефакты хранятся в S3, а результаты возвращаются в PostgreSQL.

PostgreSQL Input data
Airflow Orchestration
S3 Model + artifacts
Predictions PostgreSQL
09

MLOps Pipeline

01 check_s3 Проверка артефактов
02 load_data Загрузка данных
03 preprocess Подготовка признаков
04 predict Batch inference
05 save_results Запись результатов
10

Result

Для каждого объявления формируется числовой SmartScore, который сохраняется вместе с идентификатором объекта и датой инференса.

listing_id
score
inference_date

Score может использоваться как дополнительный сигнал для ранжирования объявлений.

11

Technology Stack

Python CatBoost Pandas NumPy Scikit-learn Optuna PostgreSQL Apache Airflow S3 boto3 Git
12

Project