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

Данные

Я взял эти данные с cars45.com, онлайн-рынка в Нигерии, который связывает покупателей с продавцами подержанных автомобилей.

Во-первых, давайте импортируем важные библиотеки

Теперь давайте импортируем наши данные о ценах на автомобили в Нигерии, полученные из Интернета.

Данные состоят из 4095 автомобилей и 10 характеристик, одна из которых будет зависимой переменной, которую мы будем прогнозировать (цена).

Методология

EDA и очистка данных

Чтобы лучше понять данные и узнать, как распределены числовые столбцы, давайте воспользуемся методом описания:

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

Теперь давайте воспользуемся методом .info(), чтобы получить больше информации.

Первое, что мы можем заметить, это то, что в некоторых столбцах отсутствуют значения, что неудивительно для нас, поскольку некоторые люди, выставляющие свои автомобили на продажу, могут не знать некоторых технических деталей своих автомобилей, таких как объем двигателя.

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

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

Из нашего нового понимания мы видим, что цены на наши автомобили варьируются от 458 000 до 58 800 000 найр, наше среднее значение составляет 4,2 миллиона найр, а наше стандартное отклонение составляет 4,9 миллиона найр.

Теперь давайте посмотрим, сколько у нас пропущенных значений.

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

Это нормальное распределение, которое является наиболее желательным распределением.

Теперь давайте посмотрим PDF (функция плотности вероятности) столбца пробега.

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

Давайте попробуем это исправить, убедившись, что все значения попадают в 99-й процентиль переменной «пробег». Таким образом, мы эффективно удалим верхний 1% данных о пробеге.

Теперь давайте посмотрим новую раздачу

Это намного лучше, и теперь это выглядит как нормальное распределение.

Теперь давайте посмотрим PDF-файл размера двигателя.

Это похоже на PDF столбца пробега. Чтобы попытаться исправить это, я проверил самый большой объем двигателя автомобиля и обнаружил, что самый большой из них - 8382 куб.см, а самый маленький - 624 куб.см.

Итак, давайте удалим данные выше и ниже этих пороговых значений.

Теперь давайте посмотрим PDF

Это более желательно.

Поскольку мы удалили некоторые точки данных, давайте посмотрим, сколько пропущенных значений у нас осталось.

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

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

Мы можем заметить, что автомобили, выпущенные совсем недавно, стоят больше, чем старые автомобили (черт возьми, Шерлок), а автомобили с меньшим пробегом также стоят больше, чем автомобили с большим пробегом. Но главная проблема, на которую следует обратить внимание, заключается в том, что она образует экспоненциальное распределение.

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

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

Теперь давайте визуализируем категориальные столбцы

Перечисленных автомобилей с автоматической коробкой передач больше, чем других перечисленных автомобилей (вместе взятых). В Нигерии большинство автомобилей автоматические, за исключением, может быть, пикапов и такси. Я не знал, что существуют такие типы трансмиссии, как AMT (автоматическая механическая трансмиссия) и CVT (постоянно регулируемая трансмиссия), пока не начал этот проект. Если вы, как и я, только что узнали о трансмиссии CVT и AMT, вы должны знать, что есть еще одна, которой нет в списке на сайте, и это DCT (Dual Clutch Transmission).

Теперь давайте визуализируем тип топлива

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

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

Теперь давайте посмотрим, какая автомобильная марка чаще всего упоминается в списках, а также общее количество автомобильных марок в наших наборах данных.

Возможно, Toyota задолжала Нигерии больше сборочных заводов.

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

Итак, давайте удалим этот столбец и столбец «Без пометки: 0», который ничего не предлагает для нашего набора данных.

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

Теперь давайте подготовим наши данные для обучения. Мы начнем с работы с отсутствующими значениями столбца Build. Я также хотел удалить этот столбец сразу после того, как собирал данные, но я чувствовал, что внедорожники дороже, чем обычные автомобили, и это может улучшить предсказуемость нашей модели.

Теперь давайте определим наши зависимые и независимые переменные

Теперь, чтобы импортировать библиотеки, мы будем использовать их для заполнения оставшихся пропущенных значений, кодирования категориальных столбцов и масштабирования числовых столбцов. После этого мы разделим данные на обучающий и тестовый наборы. Мы поместим 80% данных в тренировочный набор, а оставшиеся 20% — в тест.

Давайте получим наши категориальные и числовые столбцы

Определение нашего конвейера предварительной обработки

Обучение

Теперь, когда мы закончили предварительную обработку, давайте поместим несколько моделей машинного обучения в обучающий набор с помощью перекрестной проверки и выясним, какая из них лучше всего подходит для наших данных. Мы будем использовать RMSE (среднеквадратическую ошибку), чтобы оценить, насколько хороша наша модель.

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

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

Теперь, чтобы увидеть лучшие параметры и использовать их при создании объекта xgboost

Мы обучили модель. Теперь, чтобы проверить это, мы должны сделать наши тестовые данные похожими на обучающие данные. Обратите внимание, что мы будем только преобразовывать данные вместо использования подходящего преобразования, чтобы предотвратить утечку данных.

Теперь давайте конвертируем наши прогнозы обратно в найру и посмотрим, насколько хороша наша модель.

Ошибка в 1,69 миллиона — это хорошо, учитывая диапазон наших цен от 458 000 до 58,8 миллиона найр.

Результат

В этом проекте я использовал регрессор Xgboost для прогнозирования цен на автомобили в Нигерии. Он показал отличную производительность, имея среднеквадратичную ошибку в 1,69 миллиона найр.

Давайте посмотрим на распределение наших прогнозируемых цен и фактических цен.

Мы видим, что наша модель хорошо имитировала цену.

Давайте посмотрим на некоторые из наших лучших прогнозов

На этом можно сказать, что наша цель по созданию модели, способной оценить стоимость автомобилей, достигнута.

Заключение

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

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

Чтобы просмотреть код веб-скрейпинга этого проекта, посетите: segun7/nigerian-cars-price-prediction (github.com)

Спасибо за чтение.