天池二手车交易价格预测Task2-赛题理解与数据探索性分析(EDA)

本文深入探讨了天池二手车交易价格预测的赛题,包括赛题概述、预测指标以及数据探索性分析(EDA)。数据集包含40w+条记录,涉及31个特征,其中15个为匿名特征。赛题目标是预测二手车价格,评估指标为MAE。在EDA部分,对数据进行了统计分析,检查了缺失值、异常值,并分析了特征的相关性,为后续的数据预处理和特征工程提供了基础。
摘要由CSDN通过智能技术生成

一、赛题理解

1.1赛题概述

赛题以预测二手车的交易价格为任务,该数据来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取15万条作为训练集,5万条作为测试集A,5万条作为测试集B,同时会对name、model、brand和regionCode等信息进行脱敏。
具体的数据表如下图:
SaleID - 销售样本ID
name - 汽车编码
regDate - 汽车注册时间
model - 车型编码
brand - 品牌
bodyType - 车身类型
fuelType - 燃油类型
gearbox - 变速箱
power - 汽车功率
kilometer - 汽车行驶公里
notRepairedDamage - 汽车有尚未修复的损坏
regionCode - 看车地区编码
seller - 销售方
offerType - 报价类型
creatDate - 广告发布时间
price - 汽车价格
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’ 【匿名特征,包含v0-14在内15个匿名特征】
数字全都脱敏处理,都为label encoding形式,即数字形式

1.2预测指标

赛题的预测评估指标为MAE(MeanAbsoluteError)
在这里插入图片描述
其中 yi 代表第 i 个样本的真实值,其中 ^yi 代表第 i 个样本的预测值。
对于回归预测类常见的评估指标如下:
平均绝对误差(Mean Absolute Error,MAE),均方误差(Mean Squared Error,MSE),平均绝对百分误差(Mean Absolute Percentage Error,MAPE),均方根误差(Root Mean Squared Error), R2(R-Square)
在这里插入图片描述

二、 EDA-数据探索性分析

EDA (Exploratory Data Analysis),也就是对数据进行探索性的分析,从而为之后的数据预处理和特征工程提供必要的结论
学习参考链接1:https://www.jianshu.com/p/9325c9f88ee6

学习参考链接2:https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12281978.0.0.68021b43qQHjp5&postId=95457

2.1 内容介绍

1.载入各种数据科学以及可视化库:
数据科学库 pandas、numpy、scipy;可视化库 matplotlib、seabon;其他;
2.载入数据:
载入训练集和测试集;简略观察数据(head()+shape);
3.数据总览:
通过describe()来熟悉数据的相关统计量;通过info()来熟悉数据类型
4.判断数据缺失和异常:
查看每列的存在nan情况;异常值检测
5.了解预测值的分布:
总体分布概况(无界约翰逊分布等);查看skewness and kurtosis;查看预测值的具体频数
6.特征分为类别特征和数字特征,并对类别特征查看unique分布
7.数字特征分析:
相关性分析;查看几个特征的偏度和峰值;每个数字特征得分布可视化;数字特征相互之间的关系可视化;多变量互相回归关系可视化
8.类型特征分析:
unique分布;类别特征箱形图可视化;类别特征的小提琴图可视化;类别特征的柱形图可视化类别;特征的每个类别频数可视化(count_plot)
9.用pandas_profiling生成数据报告

2.2数据总览

1.载入各种数据科学以及可视化库
整体数据把握:包括读入数据之后,首先利用.shape查看数据维度,然后利用.head()与.tail()查看数据的前五行和最后五行了解其列数以及每列的具体value.

  • pandas 是基于NumPy
    的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
  • NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested
    list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。
  • Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。
  • Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。
  • missingno库提供了一个灵活易用的可视化工具来观察数据缺失情况,是基于matplotlib的,接受pandas数据源。
#coding:utf-8
#导入warnings包,利用过滤器来实现忽略警告语句。
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns # seabon是一个做可视化非常nice的包,它的别名sns是约定俗成的的东西,还有一段很有意思的故事
import missingno as msno # 用来检测缺失值
#载入训练集和测试集;
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=' ')

#简略观察数据(head()+shape)训练集
Train_data.head().append(Train_data.tail())
Train_data.shape
#测试集
Test_data.head().append(Test_data.tail())
Test_data.shape

#通过describe()来熟悉数据的相关统计量
Train_data.describe()
Test_data.describe()
#通过info()来熟悉数据类型
Train_data.info()
Test_data.info()
  • 用describe()来对数据进行基本统计量的分析,关于describe()的基本参数如下(且其默认只对数值型数据进行分析,如果有字符串,时间序列等的数据,会减少统计的项目):
    count:一列的元素个数;
    mean:一列数据的平均值;
    std:一列数据的均方差;(方差的算术平方根,反映一个数据集的离散程度:越大,数据间的差异越大,数据集中数据的离散程度越高;越小,数据间的大小差异越小,数据集中的数据离散程度越低)
    min:一列数据中的最小值;
    max:一列数中的最大值;
    25%:一列数据中,前 25% 的数据的平均值;
    50%:一列数据中,前 50% 的数据的平均值;
    75%:一列数据中,前 75% 的数据的平均值;
  • 用info()来查看数据类型,并主要查看是否有异常数据

2. 判断数据缺失和异常
包括利用.info()查看列索引名称,每列有多少缺失值以及每列的数据类型(float,object等等);利用.describe()查看每列个数,平均值,最大值,最小值,3/4分位数,标准差等等值。

pandas内置了isnull()可以用来判断是否有缺失值,它会对空值和NA进行判断然后返回True或False。

# 查看每列的存在nan情况
Train_data.isnull().sum()

运行结果:

SaleID                  0
name                    0
regDate                 0
model                   1
brand                   0
bodyType             4506
fuelType             8680
gearbox              5981
power                   0
kilometer               0
notRepairedDamage       0
regionCode              0
seller                  0
offerType               0
creatDate               0
price                   0
v_0                     0
v_1                     0
v_2                     0
v_3                     0
v_4                     0
v_5                     0
v_6                     0
v_7                     0
v_8                     0
v_9                     0
v_10                    0
v_11                    0
v_12                    0
v_13                    0
v_14                    0
dtype: int64

可以看出,bodyType 、fuelType 、gearbox有存在缺失值

#查看每列的存在nan情况用sum计数
Test_data.isnull().sum()
#nan可视化
#如果缺失值少可以尝试用规律填充,如果很小一般选择填充,如果使用lgb等树模型可以直接空缺,让树自己去优化,
#但如果nan存在的过多、可以考虑删掉
missing = Train_data.isnull().sum()
missing = missing[missing > 0]
#sort_value函数来进行排序,设置inplace=True让排序后的结果替换原来的数据,默认值为False
missing.sort_values(inplace=True)
missing.plot.bar()
  • 同时我们也可以通过missingno库查看缺省值的其他属性。

    矩阵图matrix
    柱状图bar
    热力图heatmap
    树状图dendrogram
    Matrix是使用最多的函数,能快速直观地看到数据集的完整性情况,矩阵显示;bar可以简单的展示无效数据的条形图

msno.matrix(Train_data.sample(250))
msno.bar(Train_data.sample(1000))
msno.matrix(Test_data.sample(250))
msno.bar(Test_data.sample(1000))

缺省热力图:热力图表示两个特征之间的缺失相关性,即一个变量的存在或不存在如何强烈影响的另一个的存在。如果x和y的热度值是1,则代表当x缺失时,y也百分之百缺失。如果x和y的热度相关性为-1,说明x缺失的值,那么y没有缺失;而x没有缺失时,y为缺失。至于 矩阵图,与柱状图没有查看的必要,我们可以用缺省热力图观察一下情况:

msno.heatmap(Train_data.sample(10000))

在这里插入图片描述

msno.heatmap(Test_data.sample(10000))

在这里插入图片描述
树状图:树形图使用层次聚类算法通过它们的无效性相关性(根据二进制距离测量)将变量彼此相加。在树的每个步骤,基于哪个组合最小化剩余簇的距离来分割变量。变量集越单调,它们的总距离越接近零,并且它们的平均距离(y轴)越接近零。

msno.dendrogram(Train_data.sample(10000))
msno
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值