二手车价格预估-1

此比赛为天池长期赛,可到天池算法大赛->学习赛里面去找。

早在6月份的时候,刚接触这个比赛,就做了个xgb的baseline,得分大概在670左右。最近又重新做这个比赛,这次直接上NN,线上提升了一百多分。

环境:Google Colab

1.获得google 云盘的权限

数据集放在Google 云盘上,所以需要获得相应权限来访问数据。

from google.colab import drive
drive.mount('/content/drive')
%cd /content/drive/My Drive
!ls

2.导入工具包

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from tensorflow import keras
from sklearn.metrics import mean_absolute_error

3.读取数据

# 1) 获取数据
data_train = pd.read_csv('比赛/二手车交易价格预估-天池/二手车交易价格预测/dataset/used_car_train_20200313.csv', sep=' ')
data_test = pd.read_csv('比赛/二手车交易价格预估-天池/二手车交易价格预测/dataset/used_car_testB_20200421.csv', sep=' ')
data_train.info()

4.数据预处理

4.1 数据清洗

# 缺失值处理
data_train.replace(to_replace='-', value=np.nan, inplace=True)
data_test.replace(to_replace='-', value=np.nan, inplace=True)
data_train.fillna(data_train.median(), inplace=True)
data_test.fillna(data_train.median(), inplace=True)
# 异常值处理
data_train['power'][data_train['power'] > 600] = 600
data_test['power'][data_test['power'] > 600] = 600

5.特征工程

选取合适的特征

tags = ['model', 'brand', 'bodyType', 'fuelType', 'regionCode',  'kilometer','regDate','creatDate',
        'notRepairedDamage', 'power', 'car_age_year','v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6',
        'v_7', 'v_8', 'v_9', 'v_10', 'v_11', 'v_12', 'v_13', 'v_14']
# 特征归一化
min_max_scaler = MinMaxScaler()
min_max_scaler.fit(data_train[tags].values)
x = min_max_scaler.transform(data_train[tags].values)
x_ = min_max_scaler.transform(data_test[tags].values)
# 因变量
y = data_train['price'].values
# 3) 数据集划分
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22)

6.建立模型

model = keras.Sequential([
        keras.layers.Dense(250, activation='relu', input_shape=[26]),
        keras.layers.Dense(250, activation='relu'),
        keras.layers.Dense(250, activation='relu'),
        keras.layers.Dense(1)])
model.compile(loss='mean_absolute_error',
              optimizer='Adam')
model.fit(x_train, y_train, batch_size=2048, epochs=50)

7.模型评估

# 比较训练集和测试集效果
error_train = mean_absolute_error(y_train, model.predict(x_train))
error_test = mean_absolute_error(y_test, model.predict(x_test))
print(error_train,error_test)

8.线上测试集

# 输出预测结果
y_ = model.predict(x_)
data_test_price = pd.DataFrame(y_, columns=['price'])
results = pd.concat([data_test['SaleID'], data_test_price], axis=1)
results.to_csv('比赛/二手车交易价格预估-天池/二手车交易价格预测/results0827.csv', sep=',', index=None)

这个baseline得分是570左右,没有做复杂的特征,也没有用多模型融合。
我加了车的使用年限之后得分提高了5分,说明这个也是比较重要的特征。

9. 后续努力

  • 做一些交叉特征,选择和price相关比较大的特征
  • 继续用单模型来提升,如果不行的话,再加入lgb等树模型来融合。

任重道远啊!争取明天继续上分!

猜你喜欢

转载自blog.csdn.net/weixin_44127327/article/details/108266539
今日推荐