二手车交易价格预测方案——数据分析EDA


目的是对二手车的交易情况进行分析以及建立模型预测二手车的交易价格

题目解析

这个比赛是天池的一个数据挖掘入门赛,要求根据提供的数据预测二手车的交易价格,属于回归问题,推荐系统最常用的模型是LightGBM和XGBoost等。

1.此题为传统的数据挖掘问题,通过数据科学以及机器学习深度学习的办法来进行建模得到结果。
2.此题是一个典型的回归问题。
3.主要应用xgb、lgb、catboost,以及pandas、numpy、matplotlib、seabon、sklearn、keras等等数据挖掘常用库或者框架来进行数据挖掘任务。
4.通过EDA来挖掘数据的联系和自我熟悉数据。

数据分析(记录一些python的语法)
在这里插入图片描述

赛题概况

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

数据概况

想要预测二手车的价格,就要知道如:汽车的注册时间,汽车的身份码,汽车的品牌,汽车的车身类型(是轿车、大巴车、敞篷车、商务车。。。),汽车是手动还是自动,汽车的燃油类型(汽油、电动、柴油。。),汽车已行驶多少公里,汽车有没有修复过,汽车上线时间(即开始售卖时间)。。。。。。。
共31列变量信息(数据信息,其中15列为匿名变量)

在这里插入图片描述

数据脱敏

具体指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样可以使数据本身的安全等级降级,就可以在开发、测试和其它非生产环境以及外包或云计算环境中安全地使用脱敏后的真实数据集。借助数据脱敏技术,屏蔽敏感信息,并使屏蔽的信息保留其原始数据格式和属性,以确保应用程序可在使用脱敏数据的开发与测试过程中正常运行。
脱敏详情

评价指标

评估指标即是我们对于一个模型效果的数值型量化。(有点类似与对于一个商品评价打分,而这是针对于模型效果和理想效果之间的一个打分)
在这里插入图片描述

本竞赛评测标准使用MAE平均绝对误差,能更好地反映预测值与真实值误差的实际情况:
在这里插入图片描述
测试数据集中的点,距离模型的平均距离越小,该模型越精确

EDA目标

EDA-数据探索性分析 部分,带你来了解数据,熟悉数据,和数据做朋友,欢迎大家后续多多交流。
在这里插入图片描述

读取数据

head(),tail(),describe()

读取excel文件,用pandas,生成了DataFrame类型。
head()方法为读取前5行,头读取
在这里插入图片描述
tail()方法为读取倒数5行,尾读取
在这里插入图片描述
全部读取:
在这里插入图片描述
可以看出,数据的分散程度很大,有整型,有浮点,有正数,有负数,还有日期,当然可以当成是字符串。另外如果数据都换算成数值的话,数据间差距特别大,有些成千上万,有些几分几厘,这样在预测时就难以避免地会忽视某些值的作用,所以需要对其进行归一化

数据总览和异常值检查 describe(),info()

用describe()来对数据进行基本统计量的分析,关于describe()的基本参数如下(且其默认只对数值型数据进行分析,如果有字符串,时间序列等的数据,会减少统计的项目):
在这里插入图片描述
当数据的方差很小时,极限来说全是相等的数值,那么这个特征对于模型的训练就没有什么用了。

用iloc来观察特定行和列的数据概况:(除匿名特征外的数据概况)
Traindata.describe().iloc[:,11:15]
可以看到offerType,seller有异常,
在这里插入图片描述
power中有异常值,max值异常了。
在这里插入图片描述

用info()来查看数据类型,并主要查看是否有异常数据
可以看到model缺1个,bodyType缺,fuelType缺,gearbox缺,
notRepairedDamage是object类型,有20个浮点型,10个整数型。
在这里插入图片描述

数据异常处理

由info方法输出数据类型中发现除了notRepairedDamage 为object类型,其他都为数字,这里把这列的的不同值显示。

object数据类型是dataframe中特殊的数据类型,当**某一列出现数字、字符串、特殊字符和时间格式两种及以上时,就会出现object类型,**即便把不同类型的拆分开,仍然是object类型.

注意:pandas中.value_counts()的用法
value_counts()是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值。
一般在DataFrame中使用时,需要指定对哪一列或行使用

可以看到:0值有111361个,-值有24324个,1值有14315个,总和正好150000个
这里出现了数字和特殊字数两种,即为object类型。
由于“-”为空缺值,很多模型对nan有直接的处理,可以将“-”替换成nan
在这里插入图片描述
-替换成nan:
在这里插入图片描述
seller和offerType:一共两个值,其中一个值占了99.99999%,就是不均衡
由于两个类别特征严重倾斜,一般不会对预测有什么帮助,故删掉
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

power功率的范围在[0,600],所以把>600的power数据全都替换成600
在这里插入图片描述

在这里插入图片描述

判断数据缺失

pandas内置了isnull()可以用来判断是否有缺失值,它会对空值和NA进行判断然后返回True或False。用 True 表示具有 NaN 值的元素,用 False 表示非 NaN 值的元素。nan的意思为缺失值/异常值/非数。
查看每列的存在nan情况:
Train_data.isnull().sum(),在 Pandas 中,逻辑值 True 的数字值是 1,逻辑值 False 的数字值是 0。因此,我们可以通过数逻辑值 True 的数量数出 NaN 值的数量。
在这里插入图片描述

关于NaN值

在能够使用大型数据集训练学习算法之前,我们通常需要先清理数据, 也就是说,我们需要通过某个方法检测并更正数据中的错误。

任何给定数据集可能会出现各种糟糕的数据,例如离群值或不正确的值,但是我们几乎始终会遇到的糟糕数据类型是缺少值。

Pandas 会为缺少的值分配 NaN 值。
缺失值处理——删除,填充(均值,众数,中位数,前后相邻值),插值(拉格朗日插值,牛顿插值)

主要的目的在于 nan存在的个数是否真的很大,如果很小一般选择填充,如果使用lgb等树模型可以直接空缺,让树自己去优化,但如果nan存在的过多、可以考虑删掉

数据分析

结合变量说明,我们可以把变量分成三种类型:

分类变量:name、model、brand、bodyType、fueltype、gearbox、notRepairedDamage、regionCode、seller、offerType

数值变量:power、kilometer、price、v_0-v_14

时间变量:regDate、creatDate

并且通过对于数据的描述我们可以发现,除去SaleID以外总共有30个变量,并且每个变量都有15000行数, 但是对于model/bodyType/fuelType/gearbox都存在一定程度的缺失。
在这里插入图片描述

  1. price分布较大,平均价格为5923元,中位数为3250元,最大值为99999元
  2. seller和offerType为异常数据,需进一步分析是否需要删除
  3. power存在极大值,题目要求将>600的数据全都替换成600
  4. 可以看出,notRepairedDamage并没有显示出来,判断其中应该有非数值型数据,需要进一步处理
  5. kilometer正常,观察得出有一半以上的汽车行驶公里在15公里以上

预测值price的分布

大部分模型都是基于标签分布为正态分布设计的,符合大部分情况
在这里插入图片描述
price大部分值集中在0-20000元的范围,大于20000元的数据较少。
可以看出price不服从正态分布,经对数变换后较为符合,故对price需要进行对数化处理
可以看出,经对数处理之后,price比较符合正态分布

特征分为类别特征和数字特征

类别特征:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
数字特征:
在这里插入图片描述

判断与价格的相关性

如何确定每个指标的重要性,所以研究每个特征之间的相关性就显得尤为重要。
在这里插入图片描述

变量选择

通常来说,原始数据集的变量不可能每个变量值都和预测值强相关,有时候会存在无关或者该预测值本身方差很小,
如果是这样的话,这个预测引入或者去除将对结果影响不大。
针对变量选择的方式分为:1.单变量选择,2.Li—Based即L1,3.Tree—Based即L2。本次使用单变量法:
在这里插入图片描述
求每个变量与price的相关系数:
相关系数0-0.3弱相关,0.3-0.6中等程度相关,0.6-1强相关;删除相关系数小于0.3的变量

总结

探索性数据分析的目的,就是先对数据有个整体的把握,熟悉数据,为接下来的特征工程和 模型构造打下基础。

探索性数据分析一般会从数据类型、变量的数值分布、缺失值情况和变量之间的相关关系来分析数据。

1.通过info()函数我们可知:
存在缺失值的列有:model、 bodyType、 fuelType、 gearbox。
唯一的有个字符串类型的变量为notRepairedDamage。
训练集各变量的数值分布在这里插入图片描述
2.查看训练集各变量的数值分布,绘制图出来。
可以观察到哪些数据分布是异常的。
从上面的柱形图来看,训练数据种分布有点异常的变量有:creatDate、offerType、seller、power。
creatDate 所有都取同一个值
offerType 所有都取同一个值
seller 所有都为0值
power也有异常
在这里插入图片描述
在这里插入图片描述
下面具体看一下这些变量数值分布:
在这里插入图片描述
其他同理。
总结来说:
在这里插入图片描述
3.相关性分析:(这一步仅仅是删除一些,后面再特征工程中会具体分析,先进行这一步可以排除掉大量的变量,这可以减少后面根据模型来做特征帅选的时间)
通过相关性分析,把一些无关变量去点。
计算各列与价格price之间的相关性:
通过公式,求每个变量与price的相关系数:
相关性的阈值设置为较小的0.1。相关性的绝对值小于0.1,将会被删除。

在这里插入图片描述

  • 8
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值