二手车价格预测-TASK2-EDA数据分析

本文探讨了数据分析(EDA)在特征选择中的关键作用,包括数据分布、异常值检测、缺失值处理、变量相关性分析和标签分布。通过实例展示了如何利用箱型图、小提琴图和统计分布来评估变量的信息增益,以及如何通过转换数据分布改善机器学习模型的性能。
摘要由CSDN通过智能技术生成

数据分析(EDA):(为特征筛选准备)

数据分析这一步对整个模型建立有十分重要的意义,数据分析这一步囊括了对变量的分析,从它数据的频数分布与y的相关联程度与其他变量的相关性出发,我们可以得到一些结论,这这些结论均指向一点,这个变量如果被选入特征能提供多大的信息量

对于一开始就可以看出不能提供信息量的,比如说数据全部是相同的值或者缺失值占比十分大的,我们要做好不把它选入特征的准备,因为根据熵的定义,这个变量提供不了信息增益。可以理解为如果按该变量的值进行分类,分类后数据被误分类的概率和分类前差不多。(我们以后在决策树那一章会用图画详细解释信息增益这个概念)

有信息增益的好处用白话解释,就是加入了特征后,预测数据时误判的概率是否会减小。

而对于那些可以提供信息增益的变量,我们需要研究怎么放大它的信息量,例如:有些变量的分布为偏态分布(如下图),这意味着在坐标轴的大部分区域(正偏态的峰值偏右的区域,同负偏态的峰值偏左的区域),值的变化都不大,而在小部分区域值(靠近峰值的区域)才会有比较大的波动。这会产生一个后果,机器对数据变化不那么明显的区域,要找到变量的变化对y的影响是比较困难的。因此,我们可以将数据转换为正态分布,单纯让数据频数的平均落差增大一些,从而利于机器计算
偏态分布

对于一些提供相同信息的变量,或者信息被另一个变量覆盖的变量而言,我们在选择特征时可能就只选其中信息较大的变量。例如,在相关性分析中(线性相关和非线性相关),我得到两个变量的相关性十分大,如果特征太多我需要削减的话那可以从其中一个变量中选择。

一、数据概览:

1. 数据分布(四分位数、均值、方差、最大值、最小值等) describe:

  • a)min max远超过平均值或者中位数,那么可能是有异常值,或者是偏态分布。
  • b)train和test的均值、标准差等是否一致,如果不一致说明训练集和测试集的分布不同
    分布不同可能需要对训练集进行采样,使其和测试集分布一样,从而达到更好的效果。

2. 数据类型与缺失值 info:

了解数据type,有助于理解除了nan以外的特殊符号异常(object)。
了解缺失值,isnull value_counts,如果出现有的数据特别少,那么它是不具有统计意义的

二、数据分析:(1.看单个变量分布、与y的规律;2.单个变量的统计分布;3.多个变量之间的相关性(不仅限于线性相关)和独立性;4.标签y值的分布)

0. 数据清洗

把所有的变量按照时间数据类别数据数值数据分开,单独处理。

  • 时间数据:将字符型转换为日期格式数据
  • 类别数据:查看缺失值,填补;或者在特征工程那一步做labelEncoder、onehotEncoder时再截断或填充缺失值。

1. 定性分析:(画图)

1.1 分布:

  • 时序图:观察是否具有周期性、震荡幅度、
  • 直方图、密度分布图:观察数据分布,是否为正态分布。如果不是正态分布,可以用对数变换将偏态分布转换为近似正态分布,但有时用无界约尔逊分布转换更近似于正态分布。
import scipy.stats as st
y = Train_data['price']
plt.figure(1); plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu)
plt.figure(2); plt.title('Normal')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)
  • 箱型图:便于查看异常情况。上限和下线分别为Q3+1.5(Q3-Q1),Q1-1.5(Q3-Q1),这个异常值的临界点到底距离四分位点多远是由我们决定的。(箱型图就是把一个字段的所有值都打在一个该字段的x值上,然后我们画一些辅助的线段来区分出这些值的中位数、上下四分位数,连起来就形成了箱型图)
  • 小提琴图:进阶的箱型图,可以看到数据分布的频率。(就是对箱型图中的这些离散点估计出概率密度函数,是连续变量,通过有限个样本点去估计概率密度分布用核密度估计)

hue表示对数据再进行分类,观察分类后数据在每一类中的概率密度分布。

小提琴图的分支:

1.2 相关性

多变量互相回归关系可视化
fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6), (ax7, ax8), (ax9, ax10)) = plt.subplots(nrows=5, ncols=2, figsize=(24, 20))

v_12_scatter_plot = pd.concat([Y_train,Train_data[‘v_12’]],axis = 1)
sns.regplot(x=‘v_12’,y = ‘price’, data = v_12_scatter_plot,scatter= True, fit_reg=True, ax=ax1)

seaborn的pairplot(数值特征):每个小图每一行共享y轴,每一列共享x轴。对角线默认的为某个变量的直方图(如果都为连续变量也可以换成概率密度函数),图上每个点都是x到y的散点图。

jointplot联合分布图:

heat热力图观察线性相关性:(用协方差公式可以度量两个变量大小和方向的不一致性)

2. 定量分析:

2.1 分布:

偏度、峰度 skew,kurt
方差

2.2 相关性:

定序变量的排序是有意义的,但是具体差值没有意义。
spearman相关系数:可以衡量级别的相关性,而pearson只能描述线性相关性。
eta系数:判断一个类别变量和一个连续变量的关联强度
pearson相关系数:用来衡量两个数据集合是否在一条线上面

独立性分析:MVTEST

最后用pandas_profiling生成数据报告

import pandas_profiling

pfr = pandas_profiling.ProfileReport(Train_data)
pfr.to_file("./example.html")

先码一个,稍后来补充

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值