一、赛题背景与目的
随着社会经济的发展,二手车交易市场日益活
跃。然而,二手车的定价受到多种因素的影
响,如车辆品牌、车龄、行驶里程、车况等。因此,准确预测二手车的交易价格对买卖双方都具有重要意义。阿里云天池二手车交易价格预测赛题旨在通过机器学习方法,基于给定的二手车数据集,建立模型来预测二手车的交易价格。
二、数据读取
首先,需要报名参加比赛并下载比赛数据集。成功报名后可进入数据页面将数据文件下载至本地。
使用 Python 的 pandas 库读取数据,示例代码如下:
import pandas as pd
# 提交示例
submit_sample = pd.read_csv('used_car_sample_submit.csv')
# 训练集,以空格为分隔符
df_train = pd.read_csv('used_car_train_20200313.csv', sep=' ')
# 测试集,以空格为分隔符
df_test = pd.read_csv('used_car_testb_20200421.csv', sep=' ')
三、对数据字段的理解与分析
1. 加载所需的包
import pandas as pd
import numpy as np
pd.plotting.register_matplotlib_converters()
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
2. 分析每个字段的取值、范围和类型
将训练集和测试集进行合并以便统一分析,同时添加一个'from'列来标记数据来源。
train = df_train.drop(("price"), axis=1) # 去掉价格列
test = df_test
# 检查训练集与测试集的列名完全一样
# all(train.columns == test.columns)
train['from'] = 'train'
test['from'] = 'test'
features = pd.concat((train, test), axis=0)
查看特征变量的缺失值和数据类型:
features.info()
查看各数值型特征的统计特征:
features.describe()
3. 绘制每个变量的分组分布图
绘制定量变量分布直方图:
cols = use_feature # 需定义 use_feature 为要分析的特征列名列表
df = features
plt.figure(figsize=(25, 30))
for i in range(len(cols)):
plt.subplot(6, 5, i + 1)
sns.distplot(a=df[df['from'] == 'train'][cols[i]], label="train", kde=False)
sns.distplot(a=df[df['from'] == 'test'][cols[i]], label="test", kde=False)
plt.title('{} by data group'.format(cols[i]))
plt.legend()
绘制定量变量的 density 分布图:
cols = use_feature
df = features
plt.figure(figsize=(25, 30))
for i in range(len(cols)):
plt.subplot(6, 5, i + 1)
sns.kdeplot(data=df[df['from'] == 'train'][cols[i]], label="train", shade=True)
sns.kdeplot(data=df[df['from'] == 'test'][cols[i]], label="test", shade=True)
plt.title('{} by data group'.format(cols[i]))
plt.legend()
从分布图中可以观察到一些情况,例如个别变量的取值恒定,像'seller'变量在后续建模中可考虑去掉;测试集的分布与训练集基本一致。
4. 计算特征字段与标签的相关性
绘制相关系数矩阵热图:
plt.figure(figsize=(30, 30))
sns.heatmap(data=df_train.corr(), annot=True)
5. 选择与标签强相关的特征字段,绘制其与标签的分布关系图
首先找出与价格强相关的前几个特征字段,然后绘制它们与价格的联合分布图(joint plot):
# 选择特征字段中与标签强相关的 3 个字段,绘制其与标签的分布关系图
df_train.corr().price.abs().sort_values(ascending=False).head(4)
sns.jointplot(x=df_train['price'], y=df_train['v_3'], kind="kde")
sns.jointplot(x=df_train['price'], y=df_train['v_12'], kind="kde")
sns.jointplot(x=df_train['price'], y=df_train['v_8'], kind="kde")
四、对标签进行数据分析并进行 log 转换
1. 使用 pandas 对标签字段进行数据分析
df_train.price.describe()
df_train.price.hist()
2. 使用 log 对标签字段进行转换
y_log = np.log((1 + df_train['price']))
y_log.describe()
y_log.hist()
通过以上步骤,可以对阿里云天池二手车数据进行初步的分析和处理,为后续的建模和预测做准备。在实际操作中,还需要根据数据的特点和问题,进一步进行特征工程、选择合适的算法进行建模等工作。
此外,比赛数据可能会随着时间而更新或变化,所以在参加比赛时,还需要参考比赛官方的最新说明和要求。同时,特征工程是提高模型性能的关键步骤,例如处理缺失值、异常值,构造新的特征,进行特征筛选等,这需要根据数据特点和领域知识进行深入探索和尝试。常用的特征工程方法包括但不限于:
1. 数据清洗:处理缺失值、异常值等。
2. 特征构造:如构造统计量特征、时间特征、地理信息特征,进行非线性变换、特征组合等。
3. 特征筛选:可采用过滤式、包裹式、嵌入式等方法筛选出对结果有意义的特征。