大数据分析案例-基于随机森林模型对北京房价进行预测

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 大数据分析案例-基于随机森林模型对北京房价进行预测

1.项目背景

       自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬勃起来。同时,随着社会经济的快速开展,居民的经济条件越来越好,住房条件也在不断地提升。而住房是人民根本生活的保障,也是-一个家庭最重要的资产,从一定的层面.上反映了一个家庭整体的生活水王,多方面的因素使得房地产行业在短时间开展成为我国的支柱产业之一;成为了切实关乎人民生活和利益的重要产业。然而,随着房地产行业的开展,问题也慢慢突显出来,房价一直居高不下成为了一个大问题。


       作为国家的支柱产业,房地产的稳定发展关乎国计民生。近几年,房地产价格飞速上涨,连创新高。在这种状况下探讨房价的影响因素,具有重要的理论和现实意义。


2.项目简介

2.1数据说明

本次项目的数据集来自北京市的几个区的房价数据。


主要字段信息如下:

字段名 描述
城区 ['丰台', '海淀', '朝阳', '东城', '西城', '石景山']
卧室数

整数类型 范围1-5

客厅数 整数类型  范围0-3
面积 浮点数类型
楼层 low,middle,high三种类型
是否靠近地铁 是、否
是否学区房 是、否
房价 浮点数类型,单位万每平方米

2.2技术工具

python3.9


vscode编辑器


3.算法原理

多元线性回归算法可以参考Python实现线性回归和梯度下降算法


随机森林算法可以参考随机森林算法原理及使用


4.项目实施步骤

4.1理解数据

首先,导入数据


import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示
data = pd.read_excel('House_sample.xlsx',sheet_name=1)
data.head()


查看数据大小


数据集共有803行,8列


查看数据描述性统计信息



从结果可以看出卧室数、客厅数、面积、房价这些数据的均值、方差、最大最小、四分位数等信息。


查看数据基本信息



从数据基本信息中,我们可以看出每个特征的缺失值情况以及数据类型。


4.2数据预处理

4.2.1缺失值处理

首先,先查看数据是否存在缺失值



我们发现数据没有缺失值,所有不需要处理。


4.2.2重复值处理


借助any()函数,我们可以检测数据是否存在重复值,存在则返回结果为True,不存在返回False,所有本数据也不存在重复值,不需要处理。


4.2.3异常值处理

先通过可视化看看我们的数值型数据是否存在异常值


# 查看是否存在异常值
cols = data.describe().columns.to_list()
plt.figure(figsize=(12,12))
for index,col in enumerate(cols,1):
    plt.subplot(2,2,index)
    sns.boxplot(f'{col}',data=data)
plt.show()

从可视化结果中看出,卧室数存在一个明显的异常值,客厅数不存在异常值,面积存在一定的异常值,房价也存在少量的异常值。


接着开始对存在异常值的特征进行筛选处理


# 筛选出异常值
new_data = data[(data['卧室数']<4.5) & (data['面积']<200) & (data['房价']<12)]
new_data.shape

从数据大小中,我们看出已经将异常值剔除了。


4.3探索性数据分析

4.3.1城区数量分布情况

# 各城区的数量
new_data['城区'].value_counts().plot(kind='barh')
plt.xlabel('数量')
plt.ylabel('城区')
plt.title('各城区的数量')
plt.show()

从分布结果来看,各城区数量差距不大,其中丰台最多,石景山最少。


4.3.2城区房价情况

# 分析各城区的房价分布情况
plt.figure(figsize=(8,6))
sns.boxplot(x='城区',y='房价',data=new_data)

从箱线图我们可以看出,西城的房价普遍较高,丰台和石景山的房价则相对较低。


4.3.3学区房对房价的影响

# 分析各城区的房价分布情况
plt.figure(figsize=(8,6))
sns.boxplot(x='城区',y='房价',hue='是否学区房',data=new_data)

从结果看出,除了石景山,其他城区普遍都是学区房的价格高于不是学区房,其中丰台虽然价格低,但是这个现象更为明显。


4.3.4地铁对房价的影响

# 分析各城区的房价分布情况
plt.figure(figsize=(8,6))
sns.boxplot(x='城区',y='房价',hue='是否靠近地铁',data=new_data)

从结果我们看出,除了西城,其他城区的靠近地铁的房价都高于没有靠近地铁的,其中朝阳和海淀这两个区的趋势更为明显。至于西城,可能是因为地理位置比较好,处于市中心地带,房价普遍较高,所有靠不靠进地铁其实影响不大。


4.3.5各特征的相关性

fig = plt.figure(figsize=(8,8))
sns.heatmap(new_data.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.title('各个因素之间的相关系数',fontsize=20)
plt.show()

从图中,我们可以看出各个数值型特征之间的皮尔曼相关系数,其中面积与客厅数和卧室数,成正相关,这也符合常理。


4.4特征工程

首先要对字符型数据进行转换处理,为后面建模做铺垫


new_data['城区'] = new_data['城区'].map({'丰台':0,'海淀':1,'朝阳':2,'东城':3,'西城':4,'石景山':5})
new_data['楼层'] = new_data['楼层'].map({'high':0,'middle':1,'low':2})
new_data['是否靠近地铁'] = new_data['是否靠近地铁'].map({'是':1,'否':0})
new_data['是否学区房'] = new_data['是否学区房'].map({'是':1,'否':0})
new_data.head()

接着,我们需要对数据集进行拆分训练集和测试集


from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X = new_data.drop('房价',axis=1)
y = new_data['房价']
# 划分数据集
x_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=666)

4.5模型构建

首先使用多元线性回归模型


from sklearn.linear_model import LinearRegression
lg = LinearRegression()
lg.fit(x_train,y_train)
y_train_pred = lg.predict(x_train)
y_test_pred = lg.predict(x_test)
print('训练集mse:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,y_test_pred))

接着使用随机森林模型

# 随机森林
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(random_state=0)
rfr.fit(x_train,y_train)
y_train_pred = rfr.predict(x_train)
y_test_pred = rfr.predict(x_test)
print('训练集mse:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,y_test_pred))

最后使用神经网络模型


# 神经网络
from sklearn.neural_network import MLPRegressor
mlp = MLPRegressor()
mlp.fit(x_train,y_train)
y_train_pred = mlp.predict(x_train)
y_test_pred = mlp.predict(x_test)
print('训练集mse:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,y_test_pred))

通过三个模型的mse值对比,这里我们主要看的是测试集上的mse,其中随机森林模型的mse最低,于是我们使用随机森林模型建模。


4.6参数调优

这里我们使用网格搜索进行最优参数的选取


# 利用网格搜索进行最优参数的选取

# 利用网格搜索进行最优参数的选取
from sklearn.model_selection import GridSearchCV
param_grid = {
    'n_estimators':[i*50 for i in range(1,15)],
    'min_samples_split':[2,3,5],
    'min_samples_leaf':[1,2,3]
}
grid_seach_rf = GridSearchCV(estimator=RandomForestRegressor(random_state=0),param_grid=param_grid,scoring='neg_mean_squared_error',cv=5)
grid_seach_rf.fit(x_train,y_train)
print(grid_seach_rf.best_params_)


通过参数搜索,我们找到了最优参数,于是对原始模型进行拟合


# 经过参数优化后的随机森林
rfr_ = RandomForestRegressor(n_estimators=100,min_samples_leaf=3,min_samples_split=2,random_state=666)
rfr_.fit(x_train,y_train)
y_train_pred = rfr_.predict(x_train)
y_test_pred = rfr_.predict(x_test)
print('训练集mse:',mean_squared_error(y_train,y_train_pred))
print('测试集mse:',mean_squared_error(y_test,y_test_pred))

我们看出在测试集上的mse减小了,虽然训练集上增大了,但是这个影响不大,毕竟我们追求的是在测试集上准确率能高点。


最后,我们还可以打印出特征重要性并可视化


#打印特征重要性评分
feat_labels = x_train.columns[0:]
importances = rfr.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(x_train.shape[1]-1),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
    print(f + 1, feat_labels[j], importances[j])
plt.figure(figsize=(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('各特征重要程度排序',fontsize=14)
plt.show()


通过特征重要程度,我们可以看出,是否为学区房、面积、城区对房价预测模型的影响程度较大。


4.7模型预测

最后,我们使用模型来进行预测,这里我们选取了测试集中的前50条数据进行预测并可视化


# 模型评价  
import matplotlib.pyplot as plt  
plt.figure(figsize=(8,6))  
plt.plot(range(len(y_test_pred))[:50],y_test_pred[:50],'b',label='predict')
plt.plot(range(len(y_test_pred))[:50],y_test[:50],'r',label='test')
plt.legend(loc='upper right')
plt.xlabel('the number of house_price',fontdict={'weight': 'normal', 'size': 15})
plt.ylabel('value of house_price',fontdict={'weight': 'normal', 'size': 15})
plt.show()

通过模型预测可视化结果来看,模型预测的还算可以。


5.实验总结

心得与体会:


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


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


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


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


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


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


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


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
22天前
|
SQL 分布式计算 数据可视化
Tableau与大数据:可视化工具在大数据分析中的应用
【4月更文挑战第8天】Tableau是一款领先的数据可视化工具,擅长于大数据分析,提供广泛的数据连接器,支持多源整合。它与Hadoop、Spark等深度集成,实现高效大数据处理。Tableau的拖拽式界面和交互式分析功能使得非技术人员也能轻松探索数据。在实战中,Tableau用于业务监控、数据storytelling和自助式分析,推动数据民主化,提升决策效率。未来,Tableau将持续创新,扩展生态系统,并保障数据安全与合规性,助力企业最大化数据价值。
31 0
|
28天前
|
存储 消息中间件 监控
【Flume】Flume在大数据分析领域的应用
【4月更文挑战第4天】【Flume】Flume在大数据分析领域的应用
|
2月前
|
供应链
代采系统如何利用大数据分析优化采购决策?
代采系统可以利用大数据分析来优化采购决策
|
2月前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
2月前
|
存储 消息中间件 大数据
Go语言在大数据处理中的实际应用与案例分析
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理中的实际应用,通过案例分析展示了Go语言在处理大数据时的优势和实践效果。文章首先介绍了大数据处理的挑战与需求,然后详细分析了Go语言在大数据处理中的适用性和核心技术,最后通过具体案例展示了Go语言在大数据处理中的实际应用。
|
2月前
|
数据采集 运维 数据挖掘
API电商接口大数据分析与数据挖掘 (商品详情店铺)
API接口、数据分析以及数据挖掘在商品详情和店铺相关的应用中,各自扮演着重要的角色。以下是关于它们各自的功能以及如何在商品详情和店铺分析中协同工作的简要说明。
|
4天前
|
SQL 分布式计算 DataWorks
MaxCompute产品使用合集之DataWorks体验案例绑定如何绑定到正确的maxcomputer引擎上
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
2月前
|
存储 分布式计算 算法
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
28 0
|
1天前
|
存储 机器学习/深度学习 数据采集
大数据处理与分析实战:技术深度剖析与案例分享
【5月更文挑战第2天】本文探讨了大数据处理与分析的关键环节,包括数据采集、预处理、存储、分析和可视化,并介绍了Hadoop、Spark和机器学习等核心技术。通过电商推荐系统和智慧城市交通管理的实战案例,展示了大数据在提高用户体验和解决实际问题上的效能。随着技术进步,大数据处理与分析将在更多领域发挥作用,推动社会进步。
|
4天前
|
存储 运维 监控

热门文章

最新文章