数据挖掘-二手车价格预测 Task01:赛题理解

数据挖掘-二手车价格预测系列

在这里插入图片描述

1.赛题概况

赛题以预测二手车的交易价格为任务,数据集来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取15万条作为训练集,5万条作为测试集A,5万条作为测试集B,同时会对name、model、brand和regionCode等信息进行脱敏。

赛题链接零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池

2.分析赛题

  1. 此题为传统的数据挖掘问题,通过数据科学以及机器学习深度学习的办法来进行建模得到结果。

  2. 此题是一个典型的回归问题。

  3. 主要应用xgb、lgb、catboost,以及pandas、numpy、matplotlib、seabon、sklearn、keras等等数据挖掘常用库或者框架来进行数据挖掘任务。

  4. 通过EDA来挖掘数据的联系和自我熟悉数据。

3.数据概况

train.csv

SaleID - 销售样本ID

name - 汽车编码

regDate - 汽车注册时间

model - 车型编码

brand - 品牌

bodyType - 车身类型

fuelType - 燃油类型

gearbox - 变速箱

power - 汽车功率

kilometer - 汽车行驶公里

notRepairedDamage - 汽车有尚未修复的损坏

regionCode - 看车地区编码

seller - 销售方

offerType - 报价类型

creatDate - 广告发布时间

price - 汽车价格

数字全都脱敏处理,都为label encoding形式,即数字形式

数据特征查看:

Train_data.head()

Train_data.info()

Train_data.desc()

import numpy as np
import pandas as pd
#载入数据集
Train_data=pd.read_csv('car_train_0110.csv',sep=' ')
Test_data=pd.read_csv('car_testA_0110.csv',sep=' ')
print('Train data shape:',Train_data.shape)
print('TestA data shape:',Test_data.shape)

Train data shape: (250000, 40)
TestA data shape: (50000, 39)

Train_data.head()
SaleID    name    regDate    model    brand    bodyType    fuelType    gearbox    power    kilometer    ...    v_14    v_15    v_16    v_17    v_18    v_19    v_20    v_21    v_22    v_23
0    134890    734    20160002    13.0    9    NaN    0.0    1.0    0    15.0    ...    0.092139    0.000000    18.763832    -1.512063    -1.008718    -12.100623    -0.947052    9.077297    0.581214    3.945923
1    306648    196973    20080307    72.0    9    7.0    5.0    1.0    173    15.0    ...    0.001070    0.122335    -5.685612    -0.489963    -2.223693    -0.226865    -0.658246    -3.949621    4.593618    -1.145653
2    340675    25347    20020312    18.0    12    3.0    0.0    1.0    50    12.5    ...    0.064410    0.003345    -3.295700    1.816499    3.554439    -0.683675    0.971495    2.625318    -0.851922    -1.246135
3    57332    5382    20000611    38.0    8    7.0    0.0    1.0    54    15.0    ...    0.069231    0.000000    -3.405521    1.497826    4.782636    0.039101    1.227646    3.040629    -0.801854    -1.251894
4    265235    173174    20030109    87.0    0    5.0    5.0    1.0    131    3.0    ...    0.000099    0.001655    -4.475429    0.124138    1.364567    -0.319848    -1.131568    -3.303424    -1.998466    -1.279368
5 rows × 40 columns

4.评价指标

基于混淆矩阵的评价指标

如果某个二元分类问题,训练拟合得到了几个模型假设,那么通常我们选择在验证集上,F1 Score 数值最大的那个模型假设。

1)召回率(查全率):反映预测对的正例数占真正的正例数的比率

Recall=\frac{TP}{TP+FN}

2)准确率:反映分类器对整个样本的判定能力,能将正的判定为正,负的判定为负

Accuracy =\frac{TP+TN}{TP+FP+TN+FN}

3)查准率:所得数值与真实值之间的精确程度;预测正确的正例数占预测为正例总量的比率

Precision=\frac{TP}{TP+FP}

分类指标评价计算示例

import numpy as np
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))
ACC: 0.75
accuracy_score 分类准确率分数是指所有分类正确的百分比。

## AUC
import numpy as np
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))
AUC socre: 0.75


AUC是衡量二分类模型优劣的一种评价指标,其他评价指标有精确度、准确率、召回率,而AUC比这三者更为常用。因为一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。AUC能很好描述模型整体性能的高低。从一定程度上讲,它可以描述预测结果中正例排在负例前面的概率。 

AUC(Area under the Curve of ROC)是ROC曲线下方的面积,是判断二分类预测模型优劣的标准。ROC(receiver operating characteristic curve)属于信号检测理论。通俗点的解释:从正样本中随机抽取一个样本,从负样本中随机抽取一个样本,通过二分类模型对其进行预测,得到正样本的预测概率为p1,负样本的为p2,p1>p2的可能性或概率就是AUC。 
ROC曲线的横坐标是伪阳性率(也叫假正类率,False Positive Rate),纵坐标是真阳性率(真正类率,True Positive Rate),这的计算方法如下: 
伪阳性率(FPR)  判定为正例却不是真正例的概率 真阳性率(TPR)  判定为正例也是真正例的概率 x轴与y轴的值域都是[0, 1],随着判定正例的阈值不断增加,我们可以得到一组(x, y)的点,相连便作出了ROC曲线,示例图如下:  
 
ROC图从直观上看能得出两个结论:曲线点越接近右下角表示当前阈值预测正例出错的概率越高,准确性较低;曲线点越接近左上角。

回归指标评价计算
 

# coding=utf-8
import numpy as np
from sklearn import metrics
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))
print('RMSE:',np.sqrt(metrics.mean_squared_error(y_true,y_pred)))
print('MAE:',metrics.mean_absolute_error(y_true,y_pred))
print('MAPE:',mape(y_true,y_pred))


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值