Представьте…

Вы работали годами, чтобы накопить деньги, и, наконец, пришло время перейти от ржавой консервной банки, которую родители подарили вам на 16-летие, к чему-то, что вы можете водить с гордостью 😎.

Но откуда вы знаете, получаете ли вы хорошую сделку или нет?

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

Вот тут-то и появляется линейная регрессия!

Мы можем полностью использовать алгоритм линейной регрессии, чтобы сделать это и сэкономить немного денег. Давайте поговорим о том, как:

№1. Импорт некоторых данных и библиотек

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

Теперь мы можем импортировать необходимые библиотеки в python. Pandas и Numpy — это пакеты, которые действительно помогают в создании алгоритмов машинного обучения. С Pandas и Numpy мы можем относительно легко организовывать данные и управлять ими. Нам также понадобятся некоторые пакеты для выполнения некоторых задач по визуализации данных, поэтому давайте импортируем seaborn и matplotlib. Давайте также воспользуемся sklearn и импортируем оттуда нашу linear_model. Sklearn — это обширная библиотека машинного обучения, в которой мы можем использовать множество эффективных инструментов для создания алгоритмов и прогностических моделей. Наконец, мы также собираемся использовать os и gdown для навигации по нашим компьютерным файлам и легкого импорта данных.

# 2: Как выглядят наши данные?

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

Несколько замечаний по характеристикам:

  • Car_Name: в этом столбце должно быть указано название автомобиля.
  • Возраст. В этом столбце должно быть указано количество лет, прошедших с момента выпуска автомобиля.
  • Selling_Price: в этом столбце должна быть указана цена, по которой владелец хочет продать автомобиль (в лакхах).
  • Kms_Driven: это расстояние, пройденное автомобилем в км.
  • Fuel_Type: определяет, использует ли автомобиль бензин, дизель или СПГ.
  • Seller_Type: определяет, является ли продавец дилером или физическим лицом.
  • Трансмиссия. Определяет, является ли автомобиль механическим или автоматическим.

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

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

  • Продажная_цена и возраст

  • Продажная_цена и пробег в километрах

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

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

  • Selling_Price и Seller_Type

  • Продажная_цена по сравнению с ценой продажи. Передача

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

Но как мы можем использовать эти результаты?

#4: Линейная регрессия

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

Давайте попробуем это на некоторых наших данных!

  • Продажная_цена и возраст

  1. Первое, что мы собираемся сделать, это определить наши значения x и y. Поскольку возраст влияет на цену продажи, мы определяем возраст как x, а цену продажи как y.
  2. Затем мы настраиваем и обучаем нашу модель линейной регрессии с помощью модуля sklearn.linear_model.
  3. Наш следующий шаг — использовать метод .predict() для настройки наших прогнозируемых значений y (цена) на основе наших значений x (возраст) с использованием линейной модели.
  4. Наконец, мы можем увидеть, как выглядит эта линия наилучшего соответствия, настроив диаграмму рассеяния и используя метод .show().

Мы также можем вычислить уравнение нашей линии, используя пару простых функций из sklearn:

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

Давайте использовать эти концепции на некоторых других функциях!

# 5: Множественная линейная регрессия: использование нескольких входных данных

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

  • Во-первых, мы создаем новые столбцы в нашем наборе данных с именами TransmissionNumber и SellerNumber.
  • Затем мы должны назначить этим новым столбцам те же данные, что и исходным столбцам данных Transmission и Seller_Type.
  • Наконец, мы можем использовать метод .replace(), чтобы заменить любые экземпляры качественных данных числовыми данными.
  • В этом случае мы заменяем «Вручную» и «Автоматически» в столбце «Передача», чтобы получить новые значения 0 или 1; Затем мы делаем то же самое в наборе данных продавца, заменяя "Дилер" и "Индивидуальный" на 0 и 1 соответственно.

Давайте проверим наш обновленный набор данных:

Теперь мы просто отправляем наши новые функции, а также наши старые в модель линейной регрессии:

#6: Сравнение моделей

Мы также можем проверить эффективность этой новой модели с новыми функциями по сравнению со старой моделью, взглянув на «оценку» обеих моделей. Этот показатель эффективности известен как r-квадрат (𝑅²) или коэффициент детерминации.

Оценка R² — это статистическая оценка от 0 до 1, которая может определить точность нашей линии наилучшего соответствия нашей модели. Оценка 0 соответствует абсолютно ужасной модели, в которой ничего не соответствует данным, а оценка R² 1 соответствует модели, которая идеально соответствует данным.

Сравним две модели:

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

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

# 7: Поиск лучшего предложения

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

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

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

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

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

Теперь мы можем создать новый столбец в нашем фрейме данных, который сможет сравнить разницу между прогнозируемой ценой и реальной ценой продажи автомобиля. Назовем этот новый столбец «Оценка сделки»:

Затем мы можем определить наши лучшие и худшие сделки, используя «оценку сделки». На данный момент, используя функцию pandas sort_values, мы можем определить 50 худших и лучших сделок в нашем наборе данных.

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

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

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