赛题:零基础入门数据挖掘 - 二手车交易价格预测
地址:https://tianchi.aliyun.com/competition/entrance/231784/information
时间:2020.03.21
数据:训练集 - 15万;测试集A - 5万;测试集B - 5万;对 name、model、brand 和 regionCode 等信息进行脱敏
train.csv
SaleID - 销售样本ID # ID不可用特征
name - 汽车编码
regDate - 汽车注册时间
model - 车型编码 # IF 丰田 进口丰田 一汽丰田,车牌号
brand - 品牌 # IF, 二手车更看重质量,物美价廉,品牌决定下限
bodyType - 车身类型 # 两厢车 三厢车 掀背车 旅行车 硬顶敞篷车 软顶敞篷车 跑车 MPV SUV
fuelType - 燃油类型 # 燃料价格和车身类型 IF, 汽油油价 - SUV
gearbox - 变速箱 # 手动变速箱 IF
power - 汽车功率 # IF
kilometer - 汽车行驶公里 # IF
notRepairedDamage - 汽车有尚未修复的损坏 # IF,试车须知
regionCode - 看车地区编码 # IF,不同地方,不同经济水平,不同地理环境,适用车型不同
seller - 销售方 # 一般二手车商会去拍卖会,4s店等地方拿车,然后再在市场销售
offerType - 报价类型
creatDate - 广告发布时间 # 可能和当时社会经济有关
price - 汽车价格 # IF
# 【匿名特征,包含v0-14在内15个匿名特征】
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'
# 个人补充特征
当时的社会经济状况 - 当燃油汽车被新能源取代,国家扶持政策等
二手烟 - 吸烟与不吸烟
汽车颜色 - 那种颜色更好? IF
轮胎新旧
改装车
保值率高低因素影响 - 汽车的性能、价格变动幅度、可靠性、配件价格及维修便捷程度等
保养的好坏对价格的影响最值得关注
年限对二手车价位的影响是起决定性作用的
保险金和过户费
。。。先这些, 部分特征有交集。。。
二手车交易价格预测的模型评价标准为 MAE(Mean Absolute Error):
M A E = ∑ i = 1 n ∣ y i − y ^ i ∣ n MAE = \frac{∑^n_{i=1}|yi−\hat{y}_{i}|}{n} MAE=n∑i=1n∣yi−y^i∣
其中 y i y_i yi代表第i
个样本的真实值,其中 y ^ i \hat{y}_{i} y^i代表第i
个样本的预测值。MAE
代表平均绝对误差,是回归预测常用的评价指标。MAE
值越小,表示误差越小,模型效果越好。
这里拓展一下其它的分类和回归评价指标:
分类算法常见的评估指标:
accuracy
,[Precision
,Recall
,F-score
,Pr曲线
],ROC-AUC曲线
accuracy
, [宏平均和微平均
,F-score
]准确率、精确率、召回率、F-score、宏平均和微平均
回归预测类常见的评估指标:
平均绝对误差(Mean Absolute Error,MAE) 平均绝对误差,其能更好地反映预测值与真实值误差的实际情况,其计算公式如下:
M A E = ∑ i = 1 n ∣ y i − y ^ i ∣ n MAE = \frac{∑^n_{i=1}|yi−\hat{y}_{i}|}{n} MAE=n∑i=1n∣yi−y^i∣
均方误差(Mean Squared Error,MSE),均方误差,其计算公式为:
M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 MSE=\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-\hat{y}_{i}\right)^{2} MSE=N1i=1∑N(yi−y^i)2
R 2 R^2 R2(R-Square)的公式为:
残差平方和:
S S r e s = ∑ ( y i − y ^ i ) 2 SS_{res}=\sum\left(y_{i}-\hat{y}_{i}\right)^{2} SSres=∑(yi−y^i)2
总平均值:
S S t o t = ∑ ( y i − y ‾ i ) 2 SS_{tot}=\sum\left(y_{i}-\overline{y}_{i}\right)^{2} SStot=∑(yi−yi)2
其中 y ‾ \overline{y} y表示y的平均值, R 2 R^2 R2表达式为:
R 2 = 1 − S S r e s S S t o t = 1 − ∑ ( y i − y ^ i ) 2 ∑ ( y i − y ‾ ) 2 R^{2}=1-\frac{SS_{res}}{SS_{tot}}=1-\frac{\sum\left(y_{i}-\hat{y}_{i}\right)^{2}}{\sum\left(y_{i}-\overline{y}\right)^{2}} R2=1−SStotSSres=1−∑(yi−y)2∑(yi−y^i)2
R 2 R^2 R2用于度量因变量的变异中可由自变量解释部分所占的比例,取值范围是 0~1, R 2 R^2 R2越接近1,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,用x
的变化来解释y
值变化的部分就越多,回归的拟合程度就越好。所以 R 2 R^2 R2也称为拟合优度(Goodness of Fit)的统计量。
y i y_i yi表示真实值, y ^ i \hat{y}_i y^i表示预测值, y ‾ i \overline{y}_i yi表示样本均值。 R 2 R^2 R2得分越高拟合效果越好。
xgb、lgb、catboost、pandas、numpy、matplotlib、seabon、sklearn、keras
等工具分析EDA
来挖掘数据的联系和自我熟悉数据# pandas 读取数据
import pandas as pd
import numpy as np
## 1) 载入训练集和测试集;
path = './datalab/231784/'
Train_data = pd.read_csv(path+'used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv(path+'used_car_testA_20200313.csv', sep=' ')
print('Train data shape:',Train_data.shape) # (150000, 31)
print('Test_A data shape:',Test_data.shape) # (50000, 30)
# 分类指标评价计算示例
## accuracy
from sklearn.metrics import accuracy_score
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 1]
print('ACC:',accuracy_score(y_true, y_pred)) # 0.75
## Precision,Recall,F1-score
from sklearn import metrics
y_pred = [0, 1, 0, 0]
y_true = [0, 1, 0, 1]
print('Precision',metrics.precision_score(y_true, y_pred)) # 1.0
print('Recall',metrics.recall_score(y_true, y_pred)) # 0.5
print('F1-score:',metrics.f1_score(y_true, y_pred)) # 0.666
## AUC
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print('AUC socre:', roc_auc_score(y_true, y_scores)) # 0.75
# 回归指标评价计算示例
from sklearn import metrics
## MAPE需要自己实现
def mape(y_true, y_pred):
return np.mean(np.abs((y_pred - y_true) / y_true))
y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])
y_pred = np.array([1.0, 4.5, 3.8, 3.2, 3.0, 4.8, -2.2])
## MSE
print('MSE:', metrics.mean_squared_error(y_true, y_pred))
## RMSE
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_true, y_pred)))
## MAE
print('MAE:', metrics.mean_absolute_error(y_true, y_pred))
## MAPE
print('MAPE:', mape(y_true, y_pred))
## R2-score
from sklearn.metrics import r2_score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print('R2-score:', r2_score(y_true, y_pred))
赛题理解是极其重要的,对于赛题的理解甚至会影响后续的特征工程构建以及模型的选择,最主要是会影响后续发展工作的方向,比如挖掘特征的方向或者解决问题的方向。主要分为几个方面:
Datawhale
是一个专注于数据科学与AI领域的开源组织,汇集了众多领域院校和知名企业的优秀学习者,聚合了一群有开源精神和探索精神的团队成员。Datawhale
以“for the learner,和学习者一起成长”为愿景,鼓励真实地展现自我、开放包容、互信互助、敢于试错和勇于担当。同时 Datawhale
用开源的理念去探索开源内容、开源学习和开源方案,赋能人才培养,助力人才成长,建立起人与人,人与知识,人与企业和人与未来的联结。
— End —
By: AI蜗牛车