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

一、研究背景

随着我国的机动车数量不断增长,人均保有量也随之增加,机动车以“二手车”形式在流通环节,包括二手车收车、二手车拍卖、二手车零售、二手车置换等环节的流通需求越来越大。二手车作为一种特殊的“电商商品”,因为其“一车一况”的特性比一般电商商品的交易要复杂得多,究其原因是二手车价格难于准确估计和设定,不但受到车本身基础配置,如品牌、车系、动力等的影响,还受到车况如行驶里程、车身受损和维修情况等的影响,甚至新车价格的变化也会对二手车价格带来作用。。。。。

二、实证分析

本文数据共包含3个子数据,分别为估价训练数据,估价验证数据,门店历史交易数据。本文数据都是以txt格式展示,故在后续处理中要注意数据格式。

基于给定的二手车交易样本数据(附件 1:估价训练数据),选用合适的估价方法,构建模型,预测二手车的零售交易价格,数据中会对 id 类,主要特征类等信息进行脱敏。主要数据包括车辆基础信息、交易时间信息、价格信息等,包含 36 列变量信息,其中15 列为匿名变量。字段如下:

元素数据如下图,由于元素数据为txt格式且没有特征名称,故利用上表所给的特征名称表进行补充并且进行读取和展示数据,同时测试集也如此,展示如下图:

数据和代码

报告代码和数据

train_data=pd.read_csv('附件1:估价训练数据.txt',sep='\t',header=None,names=columns) 

 随后对数据的特征变量进行描述性统计(此处只展示训练集的数据),展示结果如下:

从上图中可以看出,对于训练集的描述性统计,对各个特征变量的计数、均值、标准差、最大最小值,以及分位数均进行了展示。随后推断数据类型,让数据更规范以及查看数据的基础信息,结果如下(仍是以训练数据集为例),这一步是为了对数据做预处理做准备。

train_data.infer_objects()
test_data.infer_objects()

接下来对数据进行预处理,首先导入缺失值可视化missingno包,该包可以很直观的看出每个特征的缺失程度,故可以很好的对特征进行筛选,可视化结果如下,在每个特征中白色越多就表明数据越缺失。

import missingno as msno
msno.matrix(train_data)

随后,对于缺失程度太大的特征就剔除,特征缺失程度一般的话就填充,填充方法一般由先前填充和向后填充、均值和中位数填充,在本文中是运用的中位数向前填充并且针对数值型特征和非数值型特征数据进行处理,例如进行独热编码等等。

#缺失到一定比例就删除
miss_ratio=0.15
for col in train_data.columns:
    if  train_data[col].isnull().sum()>train_data.shape[0]*miss_ratio:
        print(col)
        train_data.drop(col,axis=1,inplace=True)
train_data.fillna(train_data.median(),inplace=True)   #mode,mean
train_data.fillna(method='ffill',inplace=True)   #pad,bfill/backfill
 
test_data.fillna(test_data.median(),inplace=True)   
test_data.fillna(method='ffill',inplace=True)
#剩下的变量独热处理
train_data=pd.get_dummies(train_data)
test_data=pd.get_dummies(test_data)
dis_cols = 7                   #一行几个
dis_rows = len(columns)
plt.figure(figsize=(4 * dis_cols, 4 * dis_rows))
 
for i in range(len(columns)):
    plt.subplot(dis_rows,dis_cols,i+1)
    sns.boxplot(data=train_data[columns[i]], orient="v",width=0.5)
    plt.xlabel(columns[i],fontsize = 20)
plt.tight_layout()
#plt.savefig('特征变量箱线图',formate='png',dpi=500)
plt.show()

 

从图中可以看出仍然存在一些特征存在离群点,在后续进行处理,在图中没有出现箱线图的特征是因为我们对该特征进行了one-hot编码。

 

在处理完特征变量之后,对响应变量的分布也要考察,若存在异常值的情况也会对模型的泛化能力有影响,在此画出响应变量的箱线图、直方图和和核密度图,如下图:

plt.figure(figsize=(6,2),dpi=128)
plt.subplot(1,3,1)
y.plot.box(title='响应变量箱线图')
plt.subplot(1,3,2)
y.plot.hist(title='响应变量直方图')
plt.subplot(1,3,3)
y.plot.kde(title='响应变量核密度图')
#sns.kdeplot(y, color='Red', shade=True)
#plt.savefig('响应变量.png')
plt.tight_layout()
plt.show()

可以从箱线图中看到,该响应变量存在异常值,故我们要对异常值做处理,在本文中,结合数据,我们将响应变量的阈值设为小于200,处理之后的响应变量如下图: 

 

y=y[y <= 200]
plt.figure(figsize=(6,2),dpi=128)
plt.subplot(1,3,1)
y.plot.box(title='响应变量箱线图')
plt.subplot(1,3,2)
y.plot.hist(title='响应变量直方图')
plt.subplot(1,3,3)
y.plot.kde(title='响应变量核密度图')
#sns.kdeplot(y, color='Red', shade=True)
#plt.savefig('响应变量.png')
plt.tight_layout()
plt.show()

 

plt.figure(figsize=(20,8))
plt.boxplot(x=X_s,labels=train_data.columns)
#plt.hlines([-10,10],0,len(columns))
plt.show()

 

随后对特征变量进行相关系数的计算以及热力图的展示,如下图: 

corr = plt.subplots(figsize = (20,16),dpi=128)
corr= sns.heatmap(train_data.assign(Y=y).corr(method='spearman'),annot=True,square=True)

从图中可以看出每个特征变量之间的相关性。但是我们最关心的是看二手车价格和那个特征变量的相关性更高,从图中可以看出,newprice,也就是新车的价格相关性最高。

在特征工程完成之后,便可进行机器学习:

 首先对数据集进行划分,划分为训练集和验证集。本文的划分比例为0.8,随后将数据标准化,训练集、验证集和测试集均如此。。。。

from sklearn.linear_model import LinearRegression
from sklearn.linear_model import ElasticNet
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from xgboost.sklearn import XGBRegressor
from lightgbm import LGBMRegressor
from sklearn.svm import SVR
from sklearn.neural_network import MLPRegressor
#线性回归
model1 = LinearRegression()
 
#弹性网回归
model2 = ElasticNet(alpha=0.05, l1_ratio=0.5)
 
#K近邻
model3 = KNeighborsRegressor(n_neighbors=10)
 
#决策树
model4 = DecisionTreeRegressor(random_state=77)
 
#随机森林
model5= RandomForestRegressor(n_estimators=500,  max_features=int(X_train.shape[1]/3) , random_state=0)
 
#梯度提升
model6 = GradientBoostingRegressor(n_estimators=500,random_state=123)
 
#极端梯度提升
model7 =  XGBRegressor(objective='reg:squarederror', n_estimators=1000, random_state=0)
 
#轻量梯度提升
model8 = LGBMRegressor(n_estimators=1000,objective='regression', # 默认是二分类
                      random_state=0)
 
#支持向量机
model9 = SVR(kernel="rbf")
 
#神经网络
model10 = MLPRegressor(hidden_layer_sizes=(16,8), random_state=77, max_iter=10000)
 
model_list=[model1,model2,model3,model4,model5,model6,model7,model8,model9,model10]
model_name=['线性回归','惩罚回归','K近邻','决策树','随机森林','梯度提升','极端梯度提升','轻量梯度提升','支持向量机','神经网络']

线性回归方法在验证集的准确率为:0.7584680526870519

随机森林方法在验证集的准确率为:0.9641697798108289

梯度提升方法在验证集的准确率为:0.9618323536976034

轻量梯度提升方法在验证集的准确率为:0.9705572612616453

支持向量机方法在验证集的准确率为:0.7259004919925829

神经网络方法在验证集的准确率为:0.9318712490163676

交叉验证和对比

plt.subplots(1,4,figsize=(16,3))
for i,col in enumerate(lgb_crosseval.columns):
    n=int(str('14')+str(i+1))
    plt.subplot(n)
    plt.plot(lgb_crosseval[col], 'k', label='LGB')
    plt.plot(xgb_crosseval[col], 'b-.', label='XGB')
    plt.plot(rf_crosseval[col], 'r-^', label='RF')
    plt.title(f'不同模型的{col}对比')
    plt.xlabel('重复交叉验证次数')
    plt.ylabel(col,fontsize=16)
    plt.legend()
plt.tight_layout()
plt.show()

 

在对模型进行预测之后,还可以画出其特征变量对二手车价格影响的重要性排序,如下图:

可以看到对二手车价格影响最大的变量是车龄age,车跑的里程数mileage,还有同款新车的价格newprice。

三、结论

轻量梯度提升方法在验证集上表现最佳,可作为预测二手车价格的首选模型。车龄、里程数和同款新车价格是影响二手车价格的最重要因素。进一步提升模型预测能力可通过交叉验证和网格搜索等方法优化模型参数。。。。。

创作不易,希望大家多点赞关注评论!!!(类似代码或报告定制可以私信)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/739330.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nacos的创建

nacos压缩包 链接&#xff1a;https://pan.baidu.com/s/1AYVKZvosDkcMMbTIB48Iew?pwd1234 提取码&#xff1a;1234 首先将下载好的nacos压缩包上传到linux环境中&#xff0c;然后解压缩&#xff08;解压缩命令&#xff09; tar -zxvf nacos-server-2.3.0.tar.gz解压成功后如…

美的集团员工自爆工资+年终奖收入明细,网友说:这待遇,老婆根本不让跳槽!...

发现需求&#xff1a;研究与实践是关键 在任何领域&#xff0c;只要深入研究&#xff0c;就会发现无数的需求。如果没有发现需求&#xff0c;那只能说明对行业的了解还不够透彻。学校通过考试发现学生的问题&#xff0c;职场上也一样&#xff0c;通过不断实践发现问题。理论知识…

[职场] 提升学历考研再就业有必要吗 #其他#知识分享

提升学历考研再就业有必要吗 有很多人觉得自己学历不够高&#xff0c;求职第一关可能就通过不了。因此想要继续攻读&#xff0c;最近有人问小编提升学历考研有必要吗&#xff1f;“硕士学历和三年的工作经验哪个更重要?” 这个还是要针对具体岗位而言。综合类型的岗位往往不需…

OpenSSL命令手册

正文共&#xff1a;999 字 10 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们前面编译安装了OpenSSL命令工具&#xff08;CentOS编译安装OpenSSL 3.3.1&#xff09;&#xff0c;这是一个强大的安全套接字层密码库&#xff0c;可以用于实现各种加密和认证协议&#xff0c;如…

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库&#xff0c;以加强Java应用程序处理和渲染CAD图纸&#xff0c;而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

金融行业专题|某头部期货基于 K8s 原生存储构建自服务数据库云平台

为了进一步提升资源交付效率&#xff0c;不少用户都将数据库应用从物理环境迁移到容器环境。而对于 Kubernetes 部署环境&#xff0c;用户不仅需要考虑数据库在性能方面的需求&#xff0c;还要为数据存储提供更安全、可靠的高可用保障。 近期&#xff0c;某头部期货机构基于 S…

HTML静态网页成品作业(HTML+CSS)——家乡泉州介绍网页(3个页面)(表格布局)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;table布局&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。…

想拥有一个独一无二的AI人物?Lora炼丹训练模型教程来啦

之前答应过大家放出来的Lora本地训练教程&#xff0c;终于写好啦。 会训练lora&#xff0c;代表着你可以生成属于你的独一无二的角色。 你可以让这个角色在各种不同背景的地方出现&#xff0c;可以让它摆出各种姿势&#xff0c;满足你的无限幻想。 还有的商家&#xff0c;用…

24.6.16

星期一&#xff1a; 补cf global round26 C2 cf传送门 思路&#xff1a;有效操作2只有一次&#xff0c;且反转后不会再出现负数&#xff0c;即后面能贡献 2^n-i个方案&#xff0c;再乘上前面 2^(k>0的次数) 代码如下&…

Linux源码阅读笔记05-进程优先级与调度策略-实战分析

基础知识 Linux 内核当中有 3 种调度策略&#xff1a; SCHED_OTHER 分时调度策略&#xff1b;SCHED_FIFO 实时调度策略&#xff0c;先到先服务&#xff1b;SCHED_RR 实时调度策略&#xff0c;时间片轮转。 如果有相同优先级的实时进程&#xff08;根据优先级计算的调度权值是…

用一个实例看如何分享大量照片 续篇一

继续上篇的实例分享&#xff0c;在此罗列一些应该注意的细节&#xff0c;以便在下次可以更加省时省力。 最重要的是呈现构想&#xff0c;如按活动/主题、班级/板块、地区/国家等等&#xff0c;这些都应该事先计划好&#xff0c;事后改动工作量巨大&#xff0c;因为太容易出错&a…

redis高可用-主从同步

目录 一&#xff1a;背景 二&#xff1a;实现方式 三&#xff1a;实际使用 一&#xff1a;背景 上一节我们介绍了centos下redis下的安装配置&#xff0c;是在单台服务器部署一个redis服务&#xff0c;这种模式是单机模式下使用的&#xff0c;如果出现服务故障&#xff0c;re…

windows11关闭microsoft defender实时保护后会自动打开,怎么不让他打开

Windows 11中关闭Microsoft Defender的实时保护 打开windows安全中心 --> 点击病毒和威胁防护 --> 点击管理设置 -->关闭实时保护 单关闭后系统可能会在一段时间后自动重新开启以确保系统安全。如果你确实需要永久关闭实时保护&#xff0c;可以尝试以下方法。但请注…

RecyclerVIew->加速再减速的RecyclerVIew平滑对齐工具类SnapHelper

XML文件 ItemView的XML文件R.layout.shape_item_view <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"100dp"android:layout_heig…

199.罗马数字转整数(力扣)

代码解决 class Solution { public:// 定义一个哈希表来存储罗马数字符号及其对应的整数值unordered_map<char, int> res {{I, 1},{V, 5},{X, 10},{L, 50},{C, 100},{D, 500},{M, 1000},};// 将罗马数字字符串转换为整数的函数int romanToInt(string s) {int num 0; …

【golang学习之旅】Go中的变量——基本数据类型(2)

系列文章 【golang学习之旅】使用VScode安装配置Go开发环境 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 p…

pdf压缩大小,PDF压缩大小不影响清晰度

你是否曾为PDF文件过大而烦恼&#xff1f;想要分享或上传文件时&#xff0c;却因为它的体积而束手无策&#xff1f;别担心&#xff0c;今天我将为大家分享一些简单实用的 PDF 压缩技巧&#xff0c;让你的文件轻松压缩pdf。 打开“轻云处理pdf官网”&#xff0c; 的网站。然后上…

解决Element-ui的el-table固定列后出现的表格错位问题

问题情况大致是这样的&#xff1a; 查看官网 解决办法&#xff1a;

《计算机英语》 Unit 4 Information Management 信息管理

Section A Information Storage 信息存储 1. The importance of Information信息的重要性 词汇 reside vi属于&#xff0c;驻留 tablet n平板电脑 laptop n笔记本电脑 repository n仓库 claim n索赔 regulatory n法规 contractua…