Привет, мир!

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

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

Введение

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

В 2018–2019 годах, когда продажи новых автомобилей были зафиксированы на уровне 3,6 млн единиц, было куплено и продано около 4 млн подержанных автомобилей. Наблюдается замедление продаж новых автомобилей, и это может означать, что спрос смещается в сторону рынка подержанных автомобилей. Фактически, некоторые продавцы автомобилей заменяют свои старые автомобили подержанными автомобилями вместо того, чтобы покупать новые. В отличие от новых автомобилей, где цена и предложение довольно детерминированы и управляются OEM-производителями (производителями оригинального оборудования / за исключением скидок на уровне дилеров, которые вступают в силу только на последнем этапе пути клиента), подержанные автомобили — это совсем другие звери с огромной неопределенностью в отношении как ценообразование, так и предложение. Имея это в виду, схема ценообразования на эти подержанные автомобили становится важной для роста на рынке.

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

В этом анализе я:

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

Данные

Набор данных находится в формате файла CSV, имеет 14 столбцов и 7 253 строки. Каждая строка представляет данные, собранные о каждом компоненте в столбцах. Вы можете найти набор данных здесь.

Вот столбцы, которые я использовал для этого анализа:

  • Год выпуска автомобиля
  • Название — название автомобиля, которое включает в себя марку и название модели.
  • Местоположение - Место, в котором автомобиль продается или доступен для покупки (города)
  • Seats — Количество мест в машине.
  • Новая цена — цена нового автомобиля той же модели в лакхах индийских рупий (1 лакх = 100 000 индийских рупий).
  • Пробег — стандартный пробег, предлагаемый автомобильной компанией, в км/ч или км/кг.
  • Engine in CC — Объем смещения двигателя в кубических сантиметрах
  • Мощность - максимальная мощность двигателя в л.с.
  • Пройденные километры — общее количество километров, пройденных автомобилем предыдущим владельцем (владельцами) в км.
  • Тип топлива — тип топлива, используемого автомобилем (бензин, дизель, электричество, КПГ, СНГ).
  • Трансмиссия - тип трансмиссии, используемой автомобилем (автоматическая/механическая).
  • Owner Type- Тип собственности

Анализ

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

Я начал с импорта pandas, matplotlib и seaborn в свой блокнот. Это общие библиотеки Python, используемые для анализа и визуализации данных.

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

Я заметил, что Mileage, Engine и Power являются столбцами типа object, тогда как они должны быть отформатированы как числовые. Для столбца Mileage я смог сделать это с помощью функции str.split(), а затем приступил к созданию двух новых столбцов: mileage_num и mileage_unit для номера пробега и единицы измерения пробега соответственно. Тот же процесс был применен к Engine и Power.

df_mileage = df["Mileage"].str.split(" ", expand=True)
df_mileage.head()

# let's verify that there are two units
df_mileage[1].value_counts()

# create two new columns for mileage values and units
df["mileage_num"] = df_mileage[0].astype(float)
df["mileage_unit"] = df_mileage[1]

# Checking the new dataframe
df.head()

# Let's check if the units correspond to the fuel types
df.groupby(by=["Fuel_Type", "mileage_unit"]).size()

Разработка функций

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

# checking number of unique values
df["Name"].nunique()

# extracting brand names
df["Brand"] = df["Name"].apply(lambda x: x.split(" ")[0].lower())
df.head()

# checking the unique values and their number of occurences
df["Brand"].value_counts()

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

# extracting model names
df["Model"] = df["Name"].apply(lambda x: x.split(" ")[1].lower())
df.head()

# checking the unique values and their number of occurences
df["Model"].value_counts()

Здесь в данных 218 различных моделей автомобилей.

После изучения отсутствующих значений и удаления избыточных столбцов была проверена статистическая сводка.

Значения Kilometers_Driven имеют невероятно высокий диапазон, чего и следовало ожидать. Чтобы получить представление о данных, необходимо исследовать несколько экстремальных значений. В среднем в машине 5 мест, что вполне правдоподобно. Есть подержанные автомобили, которые продаются по цене менее 1 лакха индийских рупий и до 160 лакхов индийских рупий, как я видел ранее для Lamborghini. Вот почему важно проверять выбросы, чтобы построить надежную модель. Переменные, такие как минимальный пробег, равный 0, вызывают беспокойство и должны быть исследованы. Кроме того, средние и медианные значения Power и Engine не сильно различаются. Человек со знанием автомобильного инженера сможет подробнее прокомментировать эти атрибуты. Наконец, новый ценовой диапазон кажется правильным. Здесь в наличии есть как бюджетные автомобили Maruti, так и Lamborghini. Среднее значение, почти в два раза превышающее медианное значение, предполагает, что существует всего несколько брендов с очень высоким ассортиментом, что опять же имеет смысл.

Исследовательский анализ данных (EDA)

Одномерный EDA

  • Price: Цена подержанного автомобиля является целевой переменной и имеет сильно асимметричное распределение со средним значением около 53,5 лакха индийских рупий. К этому столбцу было применено логарифмическое преобразование, чтобы уменьшить асимметрию. Рабочий объем двигателя, максимальная мощность двигателя и цена нового автомобиля той же модели сильно коррелируют с ценой подержанного автомобиля.
  • Mileage: Этот атрибут имеет близкое к нормальному распределение. С увеличением пробега объем и мощность двигателя уменьшаются.
  • Engine: Есть несколько верхних выбросов, указывающих на то, что есть несколько автомобилей с большим рабочим объемом двигателя. Дорогие автомобили имеют больший объем двигателя. Он также сильно коррелирует с максимальной мощностью двигателя.
  • Power: Есть несколько верхних выбросов, указывающих на то, что есть несколько автомобилей с более высокой мощностью. Более дорогие автомобили имеют более высокую максимальную мощность. Он также сильно коррелирует с рабочим объемом двигателя.
  • Kilometers_driven: Количество километров, которые проезжает подержанный автомобиль, имеет сильно асимметричное распределение со средним значением около 53,5 тысяч. К этому столбцу было применено логарифмическое преобразование, чтобы уменьшить асимметрию.
  • New_Price: Цена подержанного автомобиля является целевой переменной и имеет сильно асимметричное распределение со средним значением около 11,3 лакха индийских рупий. К этому столбцу было применено логарифмическое преобразование, чтобы уменьшить асимметрию.
  • Seats: 84% автомобилей в наборе данных — 5-местные.
  • Year: Более половины автомобилей в данных были произведены в 2014 году или позже. Цена на подержанные автомобили с годами выросла.
  • Brand: Большинство автомобилей в данных принадлежат Maruti или Hyundai. Цена на подержанные автомобили ниже для бюджетных брендов, таких как Porsche, Bentley, Lamborghini и т. д. Цена на подержанные автомобили выше для премиальных брендов, таких как Maruti, Tata, Fiat и т. д.
  • Model: Maruti Swift — самая распространенная машина для перепродажи. Набор данных содержит подержанные автомобили как роскошных, так и бюджетных брендов.
  • Location: Хайдарабад и Мумбаи пользуются наибольшим спросом на подержанные автомобили. Цена на подержанные автомобили имеет большой IQR в Коимбатуре и Бангалоре.
  • Fuel_Type: Около 1% автомобилей в наборе данных не работают на дизельном или бензиновом топливе. Электромобили имеют самую высокую медианную цену, за ними следуют дизельные автомобили.
  • Transmission: Более 70% автомобилей имеют механическую коробку передач. Цена выше на подержанные автомобили с автоматической коробкой передач.
  • Owner_Type: Более 80% автомобилей с пробегом продаются впервые. Цена на автомобили снижается по мере их перепродажи.

Двумерный EDA

Вопреки интуиции, Kilometers_Driven, похоже, не имеет отношения к цене. Price имеет положительную связь с Year, т. е. чем новее автомобиль, тем выше цена. Временной элемент вариации фиксируется в столбце года. 2-местные автомобили — это все роскошные варианты. Автомобили на 8–10 мест относятся исключительно к среднему и высокому ценовому диапазону. Пробег, похоже, не сильно связан с ценой подержанных автомобилей. Объем двигателя и мощность автомобиля имеют положительную зависимость от цены. New_Price и цена подержанного автомобиля также имеют положительную корреляцию, что и ожидалось. Kilometers_Driven имеет особые отношения с переменной Year. Как правило, чем новее автомобиль, тем меньшее расстояние он проехал, но это не всегда так. Автомобили, работающие на сжатом природном газе, бросаются в глаза, когда дело доходит до Mileage. Пробег этих автомобилей очень большой. Пробег и мощность новых автомобилей увеличиваются благодаря достижениям в области технологий. Пробег имеет отрицательную корреляцию с рабочим объемом и мощностью двигателя. Чем мощнее двигатель, тем больше топлива он потребляет.

Многовариантный EDA

Были использованы переменные Mileage, Name, price_log, так как очень важно увидеть корреляцию между тремя переменными. Обе гистограммы слегка скошены вправо. Большинство покупателей покупали в Мумбаи подержанные автомобили по средней цене от 13 до 14 лакхов и с пробегом от 15 до 20 км/ч. Средние и медианные цены аналогичны по ценам и пробегу.

Построение линейной модели

Необходимо спрогнозировать переменную цену подержанного автомобиля (Price). Поскольку Price является искаженной переменной, модель была построена с использованием как фактической переменной, так и ее нормализованной версии price_log. Перед построением модели я должен закодировать категориальные признаки. Разделение данных на поезд и тест поможет мне оценить модель, которую я строю на данных поезда. Я также построю модель линейной регрессии, используя данные поезда, а затем проверю ее производительность.

Также использовались метрические функции, определенные в sklearn для MAPE, RMSE, MAE и 𝑅². Средняя абсолютная процентная ошибка (MAPE) измеряет точность прогнозов в процентах и ​​может быть рассчитана как средняя абсолютная процентная ошибка для каждого прогнозируемого значения минус фактические значения, деленные на фактические значения. Это работает лучше всего, если в данных нет экстремальных значений и ни одно из фактических значений не равно 0.

Глядя на переменную Price, давайте назовем эту модель Модель 1.

MAE указал, что текущая модель способна прогнозировать цены на подержанные автомобили со средней ошибкой в ​​4,7 лакха на тестовых данных. Единицы как RMSE, так и MAE одинаковы, в данном случае лакхи. Но RMSE был больше, чем MAE, потому что он больше наказывал выбросы. MAPE 43,55 на тестовых данных показал, что модель может прогнозировать в пределах ~ 44% от цены подержанного автомобиля.

Глядя на переменную price_log, назовем эту модель Модель 2.

И R-квадрат, и скорректированный R-квадрат нашей модели выше, чем раньше, и модель способна объяснить до 94% дисперсии цен на подержанные автомобили. RMSE и MAE данных поезда и испытаний близки и намного ниже, чем у предыдущих моделей. MAE указывает, что текущая модель способна прогнозировать цены на подержанные автомобили со средней ошибкой 1,3 лакха на тестовых данных. MAPE 12,96 на тестовых данных указывает на то, что модель может предсказывать в пределах ~ 13% от цены подержанного автомобиля.

Наконец, пришло время проверить производительность модели по фактическим ценам, а не по значениям журнала, создать функцию, которая будет преобразовывать цены журнала в фактические цены, а затем проверить производительность, использовать метрические функции, определенные в sklearn для RMSE, MAE и 𝑅² и определите функцию для расчета MAPE и скорректированного 𝑅².

# training performance comparison

models_train_comp_df = pd.concat(
    [lin_reg_model1_perf_train.T, lin_reg_model2_perf_train.T,], axis=1,
)

models_train_comp_df.columns = [
    "Linear Regression (Price)",
    "Linear Regression (price_log)",
]

print("Training performance comparison:")
models_train_comp_df

# test performance comparison

models_test_comp_df = pd.concat(
    [lin_reg_model1_perf_test.T, lin_reg_model2_perf_test.T,], axis=1,
)

models_test_comp_df.columns = [
    "Linear Regression (Price)",
    "Linear Regression (price_log)",
]

print("Test performance comparison:")
models_test_comp_df

И R-квадрат, и скорректированный R-квадрат модели выше, чем раньше, и модель способна объяснить до 94% дисперсии цен на подержанные автомобили. RMSE и MAE данных поезда и испытаний близки и намного ниже, чем у предыдущих моделей. MAE указывает, что текущая модель способна прогнозировать цены на подержанные автомобили со средней ошибкой 1,3 лакха на тестовых данных. MAPE 12,96 на тестовых данных указывает на то, что модель может предсказывать в пределах ~ 13% от цены подержанного автомобиля. В целом, lin_reg_model2 (модель, использующая price_log в качестве цели) считается окончательной моделью.

Бизнес-аналитика и рекомендации

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

Надеюсь, вам понравился этот пост. Если вы хотите увидеть полный блокнот, вы можете найти его здесь. Не стесняйтесь оставлять комментарии или любые рекомендации по использованию линейной регрессии или чего-либо в целом. Если вы хотите увидеть больше этого контента, лайкните этот пост и, пожалуйста, подпишитесь на меня! Вы также можете найти меня здесь, в LinkedIn. Спасибо за чтение!

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai