Datawhale 练习之二手车价格预测
本攻略旨在帮助参与 Datawhale 练习之二手车价格预测的选手们完成任务,包括了赛题分析、数据处理、特征工程、模型选择和训练、模型评估和提交等一系列环节。
赛题分析
首先我们需要理解赛题,明确目标和数据。二手车价格预测的目标是根据一系列特征预测二手车的价格。而数据集是二手车信息,包括了二手车的品牌、车系、上牌时间、公里数等等特征。我们需要根据这些特征建立合适的模型,完成二手车价格预测。
数据处理
在赛题分析之后,我们需要进行数据处理,包括数据清洗、缺失值填充、数据转换、特征筛选等等。其中,在缺失值填充方面,我们可以选择用均值、中位数、众数等填充;在特征筛选方面,可以通过 IV 值、WOE 值、随机森林等方法进行。
以下是样例代码:
# Import necessary libraries
import pandas as pd
import numpy as np
# Load data
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
# Data cleaning
train_data = train_data.drop(['SaleID', 'name', 'regDate', 'model', 'brand', 'regionCode', 'seller', 'creatDate', 'offerType'], axis=1)
test_data = test_data.drop(['SaleID', 'name', 'regDate', 'model', 'brand', 'regionCode', 'seller', 'creatDate', 'offerType'], axis=1)
# Data transformation
train_data['power'] = train_data['power'].apply(lambda x: np.log(x) if x > 0 else 0)
test_data['power'] = test_data['power'].apply(lambda x: np.log(x) if x > 0 else 0)
# Missing value filling
train_data = train_data.fillna(train_data.median())
test_data = test_data.fillna(test_data.median())
# Feature screening
from sklearn.feature_selection import SelectKBest, mutual_info_regression
selector = SelectKBest(mutual_info_regression, k=20)
selector.fit(train_data.drop(['price'],axis=1), train_data['price'])
selected_features = selector.get_support(indices=True)
train_data = train_data.iloc[:,selected_features]
test_data = test_data.iloc[:,selected_features]
特征工程
在数据处理之后,我们需要开展特征工程,包括特征构造、特征编码、特征组合等步骤。其中,常用的特征构造包括时间、距离等;特征编码可以用 One-Hot 编码、二进制编码等;特征组合可以根据业务知识和统计方法进行。
以下是样例代码:
# Feature construction
train_data['used_day'] = (pd.to_datetime(train_data['creatDate'], format='%Y%m%d', errors='coerce') - pd.to_datetime(train_data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
train_data['used_year'] = train_data['used_day'] // 365
test_data['used_day'] = (pd.to_datetime(test_data['creatDate'], format='%Y%m%d', errors='coerce') - pd.to_datetime(test_data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
test_data['used_year'] = test_data['used_day'] // 365
# Feature encoding
train_data = pd.get_dummies(train_data, columns=['bodyType', 'fuelType', 'gearbox'], prefix=['bodyType', 'fuelType', 'gearbox'])
test_data = pd.get_dummies(test_data, columns=['bodyType', 'fuelType', 'gearbox'], prefix=['bodyType', 'fuelType', 'gearbox'])
# Feature combination
train_data['power_bin'] = pd.cut(train_data['power'], bins=[-np.inf, np.log(60), np.log(120), np.log(250), np.inf], labels=[1, 2, 3, 4])
test_data['power_bin'] = pd.cut(test_data['power'], bins=[-np.inf, np.log(60), np.log(120), np.log(250), np.inf], labels=[1, 2, 3, 4])
模型选择和训练
在特征工程之后,我们需要选择适合的模型进行训练。在二手车价格预测中,我们可以选择线性回归、决策树、随机森林、XGBoost 等模型。在训练过程中,我们需要注意超参的选择和调试。
以下是样例代码:
# Model selection and training
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
model = LinearRegression()
model.fit(train_data.drop(['price'],axis=1), train_data['price'])
# Prediction and evaluation
y_pred = model.predict(test_data)
mae = mean_absolute_error(test_data['price'], y_pred)
print('MAE: {:.2f}.'.format(mae))
模型评估和提交
最后,我们需要对模型进行评估和提交。在评估过程中,可以选择 MAE、RMSE 等指标;在提交过程中,需要将预测结果进行格式化,上传到在线评测平台。
以下是样例代码:
# Model evaluation
from sklearn.metrics import mean_squared_error
y_pred_train = model.predict(train_data.drop(['price'],axis=1))
rmse_train = np.sqrt(mean_squared_error(train_data['price'], y_pred_train))
print('RMSE_train: {:.2f}.'.format(rmse_train))
# Submission
submission = pd.DataFrame()
submission['SaleID'] = test_data.index
submission['price'] = y_pred
submission.to_csv('submission.csv', index=False, header=True)
示例说明
以下是两个示例说明:
- 特征构造
# Feature construction
train_data['used_day'] = (pd.to_datetime(train_data['creatDate'], format='%Y%m%d', errors='coerce') - pd.to_datetime(train_data['regDate'], format='%Y%m%d', errors='coerce')).dt.days
train_data['used_year'] = train_data['used_day'] // 365
在此示例中,我们利用创建日期和注册日期,构造出二手车的使用天数和使用年限,作为新的特征,用于提高模型的预测性能。
- 模型选择和训练
# Model selection and training
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
model = RandomForestRegressor(n_estimators=100, max_depth=20, random_state=42)
model.fit(train_data.drop(['price'],axis=1), train_data['price'])
# Prediction and evaluation
y_pred = model.predict(test_data)
mae = mean_absolute_error(test_data['price'], y_pred)
print('MAE: {:.2f}.'.format(mae))
在此示例中,我们选择随机森林回归模型,并调试了其 n_estimators 和 max_depth 超参数,对模型进行训练和预测。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Datawhale练习之二手车价格预测 - Python技术站