Прогноз цен на автомобили: веб-приложение сквозного машинного обучения

ВВЕДЕНИЕ

Здесь мы получаем данные с автомобильного веб-сайта CarDekho.com, наполненные информацией о самых разных автомобилях, включая их цену продажи и текущую цену. Мы понимаем, что можем использовать эти данные, чтобы убедиться, что купим новую машину по выгодной цене. В частности, мы можем точно определить, сколько нужно платить за конкретный тип автомобиля.

Мотивация

Решить, стоит ли подержанный автомобиль заявленной цены, когда вы видите списки в Интернете, может быть сложно. Несколько факторов, включая пробег, марку, модель, год выпуска и т. д., могут повлиять на фактическую стоимость автомобиля. С точки зрения продавца адекватная цена подержанного автомобиля также представляет собой дилемму. На основе существующих данных цель состоит в том, чтобы использовать алгоритмы машинного обучения для разработки моделей прогнозирования цен на подержанные автомобили.

О наборе данных

Этот набор данных содержит информацию о подержанных автомобилях, перечисленных на www.cardekho.com. Эти данные можно использовать для многих целей, таких как прогнозирование цен, чтобы проиллюстрировать использование линейной регрессии в машинном обучении. Столбцы в данном наборе данных выглядят следующим образом:

  • Car_Name
  • Год
  • Цена продажи
  • Текущая_Цена
  • Kms_Driven
  • Тип топлива
  • Seller_Type
  • Передача инфекции
  • Владелец

Исследователи чаще предсказывают цены на продукты, используя некоторые предыдущие данные, как и Pudaruth's, которые предсказывали цены на автомобили на Маврикии, и эти автомобили были не новыми, а подержанными. Он использовал множественную линейную регрессию, k-ближайших соседей, наивный байесовский алгоритм и алгоритм деревьев решений для прогнозирования цен. Сравнение результатов прогнозирования этих методов показало, что цены этих методов близко сопоставимы. Однако было обнаружено, что алгоритм дерева решений и наивный метод Байеса не могут классифицировать и предсказывать числовые значения. Исследование Пударута также пришло к выводу, что ограниченное количество экземпляров в наборе данных не обеспечивает высокой точности прогнозов.

МЕТОДОЛОГИЯ

Это исследование направлено на разработку хорошей модели регрессии, чтобы предложить точный прогноз цены автомобиля. Для этого нам нужны некоторые предыдущие данные о подержанных автомобилях, для которых мы используем цену и некоторые другие стандартные атрибуты. Цена автомобиля рассматривается как зависимая переменная, а остальные атрибуты — как независимые переменные.

Random Forest — это регрессионная модель, основанная на ансамблевом обучении. Он использует модель, называемую деревом решений, в частности, как следует из названия, несколько деревьев решений для создания ансамблевой модели, которая в совокупности дает прогноз. Преимущество этой модели заключается в том, что деревья создаются параллельно и относительно не коррелированы, что дает хорошие результаты, поскольку каждое дерево не подвержено индивидуальным ошибкам других деревьев. Это некоррелированное поведение частично обеспечивается за счет использования агрегации Bootstrap или пакетирования, обеспечивающего случайность, необходимую для создания надежных и некоррелированных деревьев. Поэтому эта модель была выбрана для учета большого количества функций в наборе данных и сравнения метода мешков со следующими методами повышения градиента.

Визуализация данных

Визуализация данных — это графическое представление информации и данных. Используя визуальные элементы, такие как диаграммы, графики и карты, инструменты визуализации данных предоставляют доступный способ увидеть и понять тенденции, выбросы и закономерности в данных.

Корреляции каждой функции в наборе данных:

Категориальные переменные представляют типы данных, которые можно разделить на группы. Примерами категориальных переменных являются раса, пол, возрастная группа и уровень образования.

Здесь у нас есть 4 категориальных признака данных,

Трансмиссия- [ручная, автоматическая]

Seller_type- [Дилер, физическое лицо]

Fuel_type- [Бензин, Дизель, СПГ]

Владелец- [0, 1, 3]

Чтобы рассчитать возраст автомобиля, мы добавляем новый столбец, и разница между текущим годом и годом автомобиля будет возрастом автомобиля.

Здесь мы видим, что эти 4 функции (Transmission, Seller_type, Fuel_type и Owner) являются категориальными данными и влияют на цену продажи автомобиля.

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

Возраст автомобиля оказывает негативное влияние, так как цена продажи старого автомобиля снижается.

Предварительная обработка данных

В любом процессе машинного обучения предварительная обработка данных — это этап, на котором данные преобразовываются или кодируются, чтобы привести их в такое состояние, в котором теперь машина может легко их анализировать. Другими словами, теперь алгоритм может легко интерпретировать особенности данных.

Признак – это индивидуальное измеряемое свойство или характеристика наблюдаемого явления.

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

Чтобы создать фактическую фиктивную кодировку из DataFrame, нам нужно передать drop_first=True.

Важность функции

Здесь мы используем ExtraTreeRegressor, чтобы получить важные функции в наборе данных.

Здесь мы видим, что текущая цена важнее других характеристик.

Теперь разделите данные на поезд и тест для построения модели.

Моделирование

Здесь я использовал алгоритм Random Forest Regressor для прогнозирования цены автомобиля. Он основан на деревьях решений.

Затем я использовал настройку гиперпараметров для повышения производительности модели и алгоритма. Я использовал RandomizerSearchCV для настройки гиперпараметров.

В машинном обучении оптимизация или настройка гиперпараметров — это проблема выбора набора оптимальных гиперпараметров для алгоритма обучения. Гиперпараметр — это параметр, значение которого используется для управления процессом обучения. Напротив, значения других параметров (обычно веса узлов) изучаются.

rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid,scoring=’neg_mean_squared_error’, n_iter = 10, cv = 5, verbose=2, random_state=42, n_jobs = 1)

Теперь поместите данные в модель, и для обучения модели потребуется время.

Оценка модели

Это лучший способ выбрать модель, увидев ее производительность. И это очень важная и неотъемлемая часть разработки модели.

Mean Absolute Error (MAE): 0.9047490109890105
Mean Squared Error (MSE): 4.098584280417587
Root Mean Squared Error (RMSE): 2.024496055915542

Построение модели с помощью Flask API

Для построения модели сначала выберите модель, которую вы создали в Jupyter.

Создайте новый файл app.py. Теперь импортируйте все важные модули и библиотеки для развертывания модели. Также загрузите модель в файл app.py.

Для веб-приложения вам нужно создать html-файл для структуры веб-сайта, и вы можете добавить CSS и JS для стилей и прочего.

Все файлы и код доступны по этой ссылке на GitHub: gaurav21s/CarPricePrediction

Развертывание на Heroku

Чтобы развернуть модель на Heroku, разместите свой проект на GitHub и создайте учетную запись на Heroku. Пожалуйста, используйте Python в качестве языка программирования при настройке учетной записи.

Затем создайте новое приложение, подключите свой репозиторий github к Heroku.

Теперь перейдите в раздел развертывания, подключите учетную запись github, прокрутите вниз до пункта «Развертывание вручную» и нажмите «Развернуть».

Для развертывания любой модели очень важным файлом является файл requirements.txt. В этом упоминаются все библиотеки и зависимости. Будьте осторожны при создании этого файла. Используйте строку ниже, чтобы заморозить (создать) ваш файл требований в конце.

pip freeze > requirements.txt

Пожалуйста, используйте новую среду для этого проекта.

Ура!! Теперь вы развернули веб-приложение на Heroku.

Поздравляю! вы закончили этот проект.

Спасибо.

Пожалуйста, посетите мой профиль в LinkedIn: Gaurav Shrivastav | LinkedIn