Построение модели определения стоимости автомобиля
Сервис по продаже автомобилей с пробегом разрабатывает приложение для привлечения новых клиентов. В нём можно быстро узнать рыночную стоимость своего автомобиля. На основе исторические данные необходимо построить модель для определения стоимости автомобиля.
Задача
Сервис по продаже автомобилей с пробегом «Не бит, не крашен» разрабатывает приложение для привлечения новых клиентов. В нём можно быстро узнать рыночную стоимость своего автомобиля. В нашем распоряжении исторические данные: технические характеристики, комплектации и цены автомобилей. Нам нужно построить модель для определения стоимости.
Заказчику важны:
- качество предсказания;
- скорость предсказания;
- время обучения.
Ноутбук
Выводы
Сервис по продаже автомобилей с пробегом «Не бит, не крашен» разрабатывает приложение для привлечения новых клиентов. В нём можно быстро узнать рыночную стоимость своего автомобиля. В нашем распоряжении исторические данные: технические характеристики, комплектации и цены автомобилей. Нам нужно было построить модель для определения стоимости.
Заказчику важны:
- качество предсказания;
- скорость предсказания;
- время обучения.
Нам доступен файл с примерно 350 тысячами записей об автомобилях. В некоторых колонках файла (VehicleType
, Gearbox
, Model
, FuelType
, NotRepaired
) довольно много пропусков данных, которые надо было обработать. Также мы отметили, что названия колонок записаны в CamelCase, и для аккуратности их можно перевести их в snake_case.
В колонках данных содержатся следующие сведения:
-
DateCrawled
— дата скачивания анкеты из базы -
VehicleType
— тип автомобильного кузова -
RegistrationYear
— год регистрации автомобиля -
Gearbox
— тип коробки передач -
Power
— мощность (л. с.) -
Model
— модель автомобиля -
Kilometer
— пробег (км) -
RegistrationMonth
— месяц регистрации автомобиля -
FuelType
— тип топлива -
Brand
— марка автомобиля -
NotRepaired
— была машина в ремонте или нет -
DateCreated
— дата создания анкеты -
NumberOfPictures
— количество фотографий автомобиля -
PostalCode
— почтовый индекс владельца анкеты (пользователя) -
LastSeen
— дата последней активности пользователя
Целевой признак:
-
Price
— цена (евро)
Мы провели исследовательский анализ, обработку и финальную подготовку данных.
В процессе исследовательского анализа были выявлены и устранены некоторые проблемы с данными. В ряде колонок были обнаружены и обработаны пропуски данных. Часть колонок содержали небольшое количество подозрительных или явно ошибочных данных. Такие данные пришлось удалить, чтобы они не исказили результаты работы обученных моделей.
На этапе финальной подготовки данных были отобраны колонки, которые будут использоваться для обучения моделей. Остальные колонки были отброшены, так как содержащиеся в них данные явно не связаны с определением цены автомобиля.
Затем мы обучили четыре модели: CatBoost, нейросеть, LightGBM и “глупую” модель, которая всегда предсказывала среднее. Заказчика интересует время обучения, время предсказаний и значения метрики RMSE.
Все показатели мы свели в единую таблицу.
Модель | Время обучения | Время предсказаний | RMSE (вал.) |
---|---|---|---|
CatBoost | 51 сек | 859 миллисек | 1408 |
Нейросеть | 2 мин 19 cсек | 3 сек | 1604 |
LightGBM | 420 миллисек | 371 миллисек | 1461 |
Из таблицы видно, что наилучшую точность предсказаний обеспечила модель CatBoost. Однако у модели LightGBM точность предсказаний сравнима, но время обучения и время предсказаний значительно меньше. При этом следует учитывать, что в отличие от CatBoost и нейронной сети LightGBM была собрана без поддержки GPU, а значит все вычисления производились на обычном процессоре. При компиляции библиотеки с поддержкой видеокарт следует ожидать дополнительного увеличения производительности.
На основании полученных данных мы можем порекомендовать заказчику использовать модель на основе библиотеки LightGBM. Интересующие заказчика характеристики модели представлены в таблице ниже.
Модель | Время обучения | Время предсказаний | RMSE (вал.) | RMSE (тест) |
---|---|---|---|---|
LightGBM | 420 миллисек | 371 миллисек | 1461 | 1471 |