9.1 KiB
9.1 KiB
Выбор бизнес-целей¶
Задача регрессии:¶
Цель: Предсказать цену автомобиля (Price) на основе других характеристик.
Применение: Это может быть полезно для автосалонов, онлайн-площадок по продаже автомобилей, а также для частных лиц, которые хотят оценить рыночную стоимость своего автомобиля.
Задача классификации:
Цель: Классифицировать автомобили по категориям (например, "Эконом", "Средний", "Премиум") на основе цены и других характеристик.
Применение: Это может быть полезно для маркетинговых кампаний, определения целевой аудитории, а также для анализа рынка автомобилей.
In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
from sklearn.metrics import mean_squared_error, f1_score, accuracy_score, roc_auc_score, confusion_matrix, classification_report
df = pd.read_csv("./static/csv/car_price_prediction.csv")
print(df.head())
print(df.columns)
Предобработка данных
In [4]:
# Проверка наличия пропущенных значений
print(df.isnull().sum())
# Очистка столбца 'Levy' от нечисловых значений
df['Levy'] = pd.to_numeric(df['Levy'], errors='coerce')
df['Mileage'] = pd.to_numeric(df['Levy'], errors='coerce')
# Заполнение пропущенных значений
df['Levy'].fillna(df['Levy'].median(), inplace=True)
df['Mileage'].fillna(df['Mileage'].median(), inplace=True)
In [5]:
# Определение числовых и категориальных признаков
numeric_features = ['Levy', 'Prod. year', 'Engine volume', 'Mileage', 'Cylinders', 'Airbags']
categorical_features = ['Manufacturer', 'Model', 'Category', 'Leather interior', 'Fuel type', 'Gear box type', 'Drive wheels', 'Doors', 'Wheel', 'Color']
# Преобразование категориальных признаков в числовые
df = pd.get_dummies(df, columns=categorical_features, drop_first=True)
Разделение данных на тренировочный и тестовый наборы¶
In [6]:
# Задача регрессии
X_reg = df.drop(['ID', 'Price'], axis=1)
y_reg = df['Price']
# Задача классификации
df['Category'] = pd.cut(df['Price'], bins=[0, 10000, 20000, np.inf], labels=['Эконом', 'Средний', 'Премиум'])
X_class = df.drop(['ID', 'Price', 'Category'], axis=1)
y_class = df['Category']
X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)
X_train_class, X_test_class, y_train_class, y_test_class = train_test_split(X_class, y_class, test_size=0.2, random_state=42)