661K+
объявлений в основной таблице.
01 / Case Study
ML-система скоринга объявлений недвижимости
Классификация объявлений по потенциальному спросу с последующим batch-инференсом и сохранением результатов в production-пайплайне.
SmartScore определяет объявления с высоким потенциальным спросом относительно объектов в том же городе и сегменте.
Итоговый score может использоваться как дополнительный сигнал для ранжирования объявлений.
объявлений в основной таблице.
городов представлены в данных.
исходных признака listings.
Использовались данные listings, calendar и reviews. В данных присутствуют характеристики объектов, хозяев, цены, рейтинги, доступность и история отзывов.
Расчёт выполнялся отдельно для комбинации город + тип жилья.
Для сегментов рассчитывались медианы отзывов, цены и рейтинга.
Объект относился к целевому классу при выполнении всех заданных условий относительно медиан сегмента.
Признаки, участвующие в формировании target или содержащие потенциальную информацию о будущем спросе, исключались из модели для снижения риска data leakage.
CatBoost обрабатывает категориальные признаки без One-Hot Encoding.
Текстовые поля очищались и передавались в CatBoost для внутреннего преобразования.
Созданы признаки цены, длительности проживания, качества объявления и характеристик хозяина.
| 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 |
Финальная модель с лучшими показателями по основным метрикам.
Основная метрика выбора модели из-за дисбаланса классов.
Использовалась для автоматического подбора гиперпараметров.
iterations: 984 learning_rate: 0.09884 depth: 10 l2_leaf_reg: 7.4489 random_strength: 2.2944 bagging_temperature: 0.6931
0.9796
Большая часть объектов целевого класса обнаруживается моделью.
0.9378
Высокое качество ранжирования положительного класса при дисбалансе.
Batch inference запускается через Apache Airflow. Данные поступают из PostgreSQL, модель и артефакты хранятся в S3, а результаты возвращаются в PostgreSQL.
Для каждого объявления формируется числовой SmartScore, который сохраняется вместе с идентификатором объекта и датой инференса.
listing_id score inference_date
Score может использоваться как дополнительный сигнал для ранжирования объявлений.