ЦЕЛЬ ПРОЕКТА:
Построить несколько прототипов моделей для определения цены автомобилей по их характеристикам
.
Предсказания позволят клиентам онлайн-сервиса
по продаже автомобилей быстро оценивать их рыночную стоимость.
Результат работы моделей будем оценивать по 3-м критериям:
- качество предсказаний
- скорость предсказаний
- время обучения
В нашем распоряжении данные с характеристиками автомобилей, собранные из разных анкет автовладельцев.
ЛИЧНАЯ ЦЕЛЬ:
-
Познакомиться с основными возможностями бустера
LightGBM
и сравнить его работу с RandomForest. -
Научиться использовать пайплайны c помощью классов
Pipeline
иColumnTransformer
для кодирования категорий и построения моделей. -
Испытать подход с ресемплингом для задач EDA.
-
Попробовать свои силы в Feature Engineering категорий для задач регрессии и найти возможности для улучшения результатов предсказаний!
✔️ Модели с LightGBM ✔️ Поиск аномалий ✔️ RandomizedSearch
✔️ Пайплайны для кодирования категорий ✔️ Предобработки данных
✔️ Библиотека category_encoders ✔️ Feature Engineering
✔️ OneHot ✔️ Ordinal ✔️ Dummy ✔️ Target encoding
✔️ Оценка скорости алгоритмов ✔️ Time resampling для анализа данных
-
LightGBM - уникальный алгоритм, по результатам видно, что внутри он работает совершенно по-другому.
-
Скорость
- может летать как ракета (wall time), а может "загрузить" весь ноутбук на 40 минут всего 20-ю деревьями. Сильно зависит от среды выполнения. -
Качество
- можно быстро добиться хороших результатов. При этом деревья измеряются сотнями, чтобы получать высокие значения метрик. -
Overfitting
- низкий, если сравнивать 20 деревьев в RandomForest и 1000 деревьев в LightGBM -
Процессорное время обучения в целом значительно меньше, чем время для генерации предсказаний.
-
-
Мы протестировали работу
Ordinal
,One-Hot
иTarget encoding
для разных характеристик автомобилей-
Подходы к кодированию категорий могут сильно изменять результаты моделей
-
Обучение с
ColumnTransformer
работает намного быстрее, чем варианты сPipeline
-
Feature_importance
позволяет понять, как кодирование влияет на набор ключевых признаков для предсказаний -
Объединение маленьких категорий в одну улучшает качество предсказаний RandomForest c OHE-encoding
-
Мы построили несколько моделей для предсказания стоимости автомобилей.
Алгоритмы RandomForest
и LightGBM
дали примерно одинаковые и достаточно хорошие результаты:
-
На кросс-валидации
R2-score = 0.96
. -
Результаты на тесте:
- RandomForest (20 деревьев)__| Тестовая выборка => R2-score: 1459.59 R2-score: 0.89
- LightGBM (1000 деревьев)____| Тестовая выборка => R2-score: 1441.37 R2-score: 0.90
- LightGBM (400 деревьев)_____| Тестовая выборка => R2-score: 1478.05 R2-score: 0.89
Для получения более высоких метрик можно сузить круг рассматриваемых автомобилей (в зависимости от специфики работы онлайн-сервиса).
Например, задать более высокую нижнюю планку для мощности двигателей
и стоимости автомобилей
.
import pandas as pd
df = pd.read_csv('/datasets/autos.csv')
display(df.iloc[:, :9].head(3))
df.iloc[:, 9:].head(3)
DateCrawled | Price | VehicleType | RegistrationYear | Gearbox | Power | Model | Kilometer | RegistrationMonth | |
---|---|---|---|---|---|---|---|---|---|
0 | 2016-03-24 11:52:17 | 480 | NaN | 1993 | manual | 0 | golf | 150000 | 0 |
1 | 2016-03-24 10:58:45 | 18300 | coupe | 2011 | manual | 190 | NaN | 125000 | 5 |
2 | 2016-03-14 12:52:21 | 9800 | suv | 2004 | auto | 163 | grand | 125000 | 8 |
FuelType | Brand | NotRepaired | DateCreated | NumberOfPictures | PostalCode | LastSeen | |
---|---|---|---|---|---|---|---|
0 | petrol | volkswagen | NaN | 2016-03-24 00:00:00 | 0 | 70435 | 2016-04-07 03:16:57 |
1 | gasoline | audi | yes | 2016-03-24 00:00:00 | 0 | 66954 | 2016-04-07 01:46:50 |
2 | gasoline | jeep | NaN | 2016-03-14 00:00:00 | 0 | 90480 | 2016-04-05 12:47:46 |