大数据分析案例-基于XGBoost算法构建二手车价格评估模型

3f6a7ab0347a4af1a75e6ebadee63fc1.gif

‍♂️ 个人主页:@艾派森的个人主页

✍作者简介:Python学习者
希望大家多多支持,我们一起进步!
如果文章对你有帮助的话,
欢迎评论 点赞 收藏 加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

大数据分析案例合集
大数据分析案例-基于随机森林算法预测人类预期寿命
大数据分析案例-基于随机森林算法的商品评价情感分析
大数据分析案例-用RFM模型对客户价值分析(聚类)
大数据分析案例-对电信客户流失分析预警预测
大数据分析案例-基于随机森林模型对北京房价进行预测
大数据分析案例-基于RFM模型对电商客户价值分析
大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
大数据分析案例-基于决策树算法构建员工离职预测模型

大数据分析案例-基于KNN算法对茅台股票进行预测

大数据分析案例-基于多元线性回归算法构建广告投放收益模型
大数据分案例-基于随机森林算法构建返乡人群预测模型
大数据分析案例-基于决策树算法构建金融反欺诈分类模型

目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.3.1分析平均价格最高的前10个品牌

4.3.2分析销量最多的前10个品牌

4.3.3各大品牌车系数量占比前10

4.4特征工程

4.5模型构建

4.6模型预测

5.实验总结

源代码


 

1.项目背景

        近年来,随着我国经济的迅速发展,人们的生活质量水平也得到了明显的提高。在出行旅游、日常上下班等等都离不开汽车这一交通工具。在一些发达国家中,二手车的交易量一般要高于新车的交易量,比如美国、日本、德国这三个国家的二手车交易量与新车交易量的比值达到3.9:1、1.5:1、2.4:1。但是我国2021年的二手车交易量与新车交易量的比值仅仅只有0.68:1。

        一方面截至2021年底,我国机动车保有量为3.95亿辆,当中汽车保有量高达3.05亿辆。机动车驾驶人数高达4.81亿人。如此雄厚的汽车保有量以及如此巨大的机动车驾驶人数规模,这为我国二手车市场发展提供了强有力的支撑。另一方面,随着互联网近几年来的快速发展,“互联网”"进入人们的视线。互联网为二手车市场的发展提供了动力,二手车电商平台也是与日俱增。包括 B2B模式的车易拍、优信拍、博车网以及最为人熟悉的C2C模式的人人车、瓜子二手车等等平台。在庞大的汽车保有量以及蓬勃发展的互联网行业下,我国二手车市场得以快速发展。

        二手车交易量从2012年的794万辆到2021年的 1758.51万辆,同比增长高达121.47%。2022年我国二手车市场又迎来了重大利好消息,国家发展改革委等七部门印发《促进绿色消费实施方案》。它要求我国推动二手车行业的发展,要求取消二手车限迁,便于加快二手车在市场上流通[7。有关部门预计2022年我国二手车的交易量将会超过1900万辆。

        我国二手车市场在近十年取得了巨大的发展,但是仍然存在诸多不足,特别是二手车价格的问题。价格一直是被人们所重视的,一辆二手车的价格直接会影响到购买者的消费意愿。我国仍然缺少成熟的价格评估体系,对于二手车价格更多的是人为的评估,但是人为的评估往往带有感情色彩以及评估人的专业性会直接影响到汽车价格的评估。为二手车建立一套完善的评估体系,一方面可以为消费者提供更多的信息,让消费者在众多的二手车中选择心仪的车辆,做出最合适的决策;另一方面,可以为平台提供更规范、合理的评估体系。减少专业人士在评估上所花费的时间精力,大大降低了人力成本,这对于各个二手车交易平台颇有益处。

        那么,创建一套科学、合理、完善的二手车价格评估体系就显得格外重要,这可以让二手车交易变得可靠、便捷、公平。同时,减少由于价格、质量等问题引起的社会纠纷,这对于我国二手车市场的健康发展具有深刻的意义并在一定程度上能推动我国经济社会的发展。

2.项目简介

2.1项目说明

        本项目使用Python网络爬虫技术爬取了58同城二手车数据并对数据进行加工处理,尝试用精准、简洁、科学的变量,利用机器学习模型建立起较为准确的二手车估价模型。

2.2数据说明

数据集来源于58同城二手车

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第1张图片

具体字段信息如下:

1.brand:车的品牌  

2.title:车的标题  

3.start_time:车的出厂时间  

4.distance:车已行驶的公里数  

5.volumn:车的油箱容量  

6.gear:车是自动档还是手动挡  

7.tag:车的标签  

8.price:车的价格

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

         XGBoost(Extreme Gradient Boosting),即一种高效的梯度提升决策树算法。他在原有的GBDT基础上进行了改进,使得模型效果得到大大提升。作为一种前向加法模型,他的核心是采用集成思想——Boosting思想,将多个弱学习器通过一定的方法整合为一个强学习器。即用多棵树共同决策,并且用每棵树的结果都是目标值与之前所有树的预测结果之差 并将所有的结果累加即得到最终的结果,以此达到整个模型效果的提升。XGBoost是由多棵CART(Classification And Regression Tree),即分类回归树组成,因此他可以处理分类回归等问题。
大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第2张图片

4.项目实施步骤

4.1理解数据

首先导入本次实验用到的第三方库,然后加载二手车数据集并查看前五行

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第3张图片

查看数据大小 

 164dc9a02a994b9cbb03427c307af75e.png

 从结果中看出原始数据集共有3640行,8列。

查看数据基本信息

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第4张图片

 从结果中可看出各变量的类型以及有多少个非空值。

查看数值型数据的描述性统计情况

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第5张图片

从结果中可看出变量的均值、方差、最大最小值、四分位数等信息。

查看非数值数据的描述性统计

 大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第6张图片

 从结果中可看出各变量的总数、唯一值数、频率最高的值及其出现的次数。

4.2数据预处理

首先对缺失值和重复值进行删除处理

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第7张图片

 从结果看出,有3640-3258=382条缺失或重复的数据被删除。

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第8张图片

 从价格的箱线图来看,异常值有点多,需要进行删除处理,避免后面对模型的影响。

我们筛选出价格小于30的数据,打印数据大小并再次用箱线图查看 

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第9张图片

这里我们对tag标签这一列数据进行处理,将其处理成哑变量的类型 

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第10张图片

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第11张图片

4.3探索性数据分析

4.3.1分析平均价格最高的前10个品牌

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第12张图片

         从结果中看出,平均价格最高的前十名车品牌有保时捷、雷克萨斯、路虎、领克、凯迪拉克、奔驰、奥迪等,其中保时捷平均价格最高。

4.3.2分析销量最多的前10个品牌

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第13张图片

          从结果中看出,销量最高的前十名车品牌有大众、别克、丰田、本田、福特、现代、马自达、雪佛兰等,其中大众和别克最高。

4.3.3各大品牌车系数量占比前10

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第14张图片

从饼图看出,大众和别克占比最多,其次就是本田和丰田 。

4.4特征工程

首先删除与建模无关变量title,接着对出厂时间、公里数、容量三个变量进行处理成数值型数据

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第15张图片

 对处理后的数据进行one-hot编码处理大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第16张图片

 准备特征变量和目标变量,拆分数据集为训练集和测试集,其中测试集比例为0.2大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第17张图片

4.5模型构建

首先定义一个训练模型并评估的函数

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第18张图片

 构建多元线性回归模型

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第19张图片

构建GBDT梯度提升决策树模型 

 大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第20张图片

构建xgboost模型 

 大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第21张图片

 通过三个模型的评估指标来看,xgboost模型的各个指标均优于其他两个模型,其准确率为0.9499,模型R方为0.86。

4.6模型预测

使用xgboost模型来预测

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第22张图片

大数据分析案例-基于XGBoost算法构建二手车价格评估模型_第23张图片

 从结果中可看出,模型预测的值和真实值较为吻合,误差较小,说明模型效果较为不错。

5.实验总结

        本次实验通过使用机器学习中的多元线性回归、GBDT、xgboost三大算法构建了二手车价格预测模型,最后选择了效果最好的xgboost算法模型,模型准确率为0.9499,模型均方误差为1.04。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

源代码

**数据集介绍:**  
1.brand:车的品牌  
2.title:车的标题  
3.start_time:车的出厂时间  
4.distance:车已行驶的公里数  
5.volumn:车的油箱容量  
6.gear:车是自动档还是手动挡  
7.tag:车的标签  
8.price:车的价格

import pandas as pd
import numpy as np
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font="SimHei")
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示
data = pd.read_csv('data.csv')
data.head()
data.shape
data.info()
data.describe()
data.describe(include='O').T
data.dropna(inplace=True) # 删除缺失值
data.drop_duplicates(inplace=True)  # 删除重复值
data.shape 
sns.boxplot(data=data,y='price')
plt.show()
data = data[data['price']<30]
print(data.shape)
sns.boxplot(data=data,y='price')
plt.show()
# 将tag标签用0和1表示,1表示有,0表示没有
tag_list = list()
data['tag'].apply(lambda x:tag_list.extend(x.split("_")))
tag_list = list(set(tag_list))
tag_df = pd.DataFrame(columns=tag_list)
new_data = pd.concat([data, tag_df], sort=False)
new_data[tag_list] = new_data[tag_list].fillna(0)
# 将tag中的数据处理为数字
def set_tag_status(series):
    tag = series['tag'].split("_")
    for t in tag:
        series[t] = 1
    return series
new_data[tag_list] = new_data[['tag',*tag_list]].apply(lambda x:set_tag_status(x),axis = 1).drop('tag',axis=1)
new_data = new_data.drop('tag',axis=1)
new_data.head()
# 分析平均价格最高的前10个品牌
num_top = new_data.groupby('brand')['price'].mean().sort_values(ascending=False)[:10]
plt.figure(figsize=(10,8))
sns.barplot(num_top.index,num_top)
plt.show()
# 销量最多的前10个品牌
num_top = new_data['brand'].value_counts().sort_values(ascending=False)[:10]
sns.barplot(num_top.index,num_top)
plt.show()
# 各大品牌车系数量占有比重前10
plt.figure(figsize=(10,8))
plt.pie(num_top,labels=num_top.index,autopct="%1.2f%%")
plt.title("各大品牌车系数量占有比重前10位")
plt.show()
# 特征工程
new_data.drop('title',axis=1,inplace=True)
new_data['start_time'] = new_data['start_time'].apply(lambda x:int(x[:-1])) # 处理出厂时间
new_data['distance'] = new_data['distance'].apply(lambda x:float(x[:-3]))  # 处理公里数
new_data['volumn'] = new_data['volumn'].apply(lambda x:float(x[:-1]))
new_data.head()
# one-hot编码
dummies_data = pd.get_dummies(new_data)
dummies_data.head()
from sklearn.model_selection import train_test_split
# 准备数据
X = dummies_data.drop('price',axis=1)
y = dummies_data['price']
# 划分数据集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
print('训练集大小:',X_train.shape[0])
print('测试集大小:',X_test.shape[0])
# 定义一个训练模型并输出模型的评估指标
def train_model(ml_model):
    print("Model is: ", ml_model)
    model = ml_model.fit(X_train, y_train)
    print("Training score: ", model.score(X_train,y_train))
    predictions = model.predict(X_test)
    r2score = r2_score(y_test, predictions)
    print("r2 score is: ", r2score)
    print('MAE:', mean_absolute_error(y_test,predictions))
    print('MSE:', mean_squared_error(y_test,predictions))
    print('RMSE:', np.sqrt(mean_squared_error(y_test,predictions)))
    # 真实值和预测值的差值
    sns.distplot(y_test - predictions)
# 构建多元线性回归
from sklearn.linear_model import LinearRegression
lg = LinearRegression()
train_model(lg)
# 构建knn回归
from sklearn.neighbors import KNeighborsRegressor
knn = KNeighborsRegressor()
train_model(knn)
# GBDT回归
from sklearn.ensemble import GradientBoostingRegressor
gbdt = GradientBoostingRegressor()
train_model(gbdt)
# 构建xgboost回归模型
from xgboost import XGBRegressor
xgb = XGBRegressor()
train_model(xgb)
# 模型预测
y_pred = xgb.predict(X_test)
result_df = pd.DataFrame()
result_df['真实值'] = y_test
result_df['预测值'] = y_pred
result_df.head(10)
# 模型预测可视化
plt.figure(figsize=(10,6))  
plt.plot(range(len(y_test))[:100],y_pred[:100],'b',label='predict')
plt.plot(range(len(y_test))[:100],y_test[:100],'r',label='test')
plt.legend(loc='upper right',fontsize=15)
plt.xlabel('the number of car',fontdict={'weight': 'normal', 'size': 15})
plt.ylabel('value of Price',fontdict={'weight': 'normal', 'size': 15})
plt.show()

 

你可能感兴趣的:(大数据分析案例合集,python,数据挖掘,机器学习)