Python数据分析-房价预测机器学习

一、研究背景

房地产市场作为经济活动的关键领域之一,对于经济的发展和社会的稳定起着至关重要的作用。在当今全球化和信息化的背景下,房地产市场的波动和房价的变化不仅受到国内因素的影响,还受到全球经济环境和国际政治形势等外部因素的影响。因此,准确预测房价成为了政府、企业和个人都极为关注的重要问题。

二、研究意义

本研究旨在利用机器学习模型对房价进行预测,探索不同模型在房价预测任务上的性能差异,并通过优化最佳模型提高预测准确性。具体来说,本研究的意义体现在以下几个方面:为房价预测提供新方法。传统的房价预测方法受限于模型复杂度和特征提取能力,而机器学习模型能够更好地利用大规模数据,挖掘潜在的规律和趋势,为房价预测提供了新的方法和思路。提高决策的准确性和可靠性。。。。

三、研究方案

本研究将借助机器学习技术,利用大量的房屋数据和相关特征,建立起一个有效的房价预测模型。通过对比不同机器学习模型的性能以及对最佳模型的进一步优化,旨在提高房价预测的准确性和可靠性,为相关利益方提供更加有效的决策支持,推动房地产市场的健康发展和经济的持续稳定。。。

四、国内外研究现状

从国内研究来看,随着我国经济快速发展和城市化的不断推进,我国房地产市场日新月异,中国的房地产市场一直快速增长,价格预测已经成为人们和决策者的一个重要问题。崔慧莹主要是通过改进极端随机森林模型对大连市二手房屋价格进行预测,本文的创新点为提出一种基于卡方先验的混合特征选择算法的极端随机森林(GSR-ERF)模型,提出基于Hyperopt超参数优化方法来对GSR-ERF模型进行参数寻优。本文的研究工作主要包括以下几个方面:首先,本文的数据集使用python语言爬取房产超市2022年大连市二手房屋数据,将爬取的数据进行数据预处理、数据清洗等工作,对数据清洗后的二手房屋数据进行缺失值填补、标准化处理,最后对二手房屋数据进行分析描述。其次,本文提出一种基于先验卡方原理的混合特征选择算法的极端随机森林模型(GSR-ERF模型),该算法分别得出基于遗传算法、模拟退火算法、交叉验证递归消除法的最优特征子集,并通过先验测试集分别得到这三种模型在先验测试集上的卡方分数。随后通过这三种模型的卡方占比结合其对应的最优特征子集对其进行排序得到最终的最优特征子集,最终通过得到的最优特征子集训练极端随机森林模型[1]。

五、实证分析

数据和代码

报告代码数据

本文的数据是爬取的昆明市的房价网站的数据,爬取完为文本数据,所以还需要对原始数据进行预处理,最终数据处理完成图如下:

data = pd.read_csv('data (2).csv',encoding='GBK')

其中特征具体细节如下表:

解释

类型

房屋的卧室数量(个)

连续值

房屋的客厅数量(个)

连续值

房屋面积(平方米)

连续值

房屋朝向

离散值,1=东;2=南;3=西;4=北;5=东南;6=东北;7=西北;8=西南

房屋装修情况

离散值,0=其他;1=毛坯;2=简装;3=精装

建筑结构

离散值,0=其他;1=板楼;2=塔楼;3=板塔结合;4=平房

房屋所在楼层位置

离散值,0=低楼层;1=中楼层;2=高楼层

关注度(人次)

连续值

房屋发布时长

连续值

附近是否有地铁

离散值,0=否;1=是

是否可以VR看房

离散值,0=否;1=是

每平方米价格(元)

连续值

其中特征为11个,“每平方米价格(元)”为响应变量。整体数据为2992条。接下来对数据进行描述性统计分析:

# Performing descriptive statistics on the dataset
descriptive_stats = data.describe()

# Display the descriptive statistics
descriptive_stats

房屋卧室数量

房屋客厅数量

房屋面积

房屋朝向

房屋装修情况

建筑结构

房屋所在楼层位置

count

2992

2992

2992

2992

2992

2992

2992

mean

3.451203

1.904412

134.988189

3.340241

2.148061

1.486631

1.036430

std

1.078478

0.461367

76.563728

2.089092

1.081347

0.918524

0.782419

min

1.000000

0.000000

25.070000

1.000000

0.000000

0.000000

0.000000

25%

3.000000

2.000000

92.000000

2.000000

1.000000

1.000000

0.000000

50%

3.000000

2.000000

122.000000

2.000000

3.000000

1.000000

1.000000

75%

4.000000

2.000000

146.815000

5.000000

3.000000

2.000000

2.000000

max

9.000000

5.000000

1220.600000

8.000000

3.000000

4.000000

2.000000

关注度(人次)

房屋发布时长

附近是否有地铁

是否可以VR看房

每平方米价格

count

2992

2992

2992

2992

2992

mean

3.478275

7.752564

0.321190

0.984960

12832.349265

std

11.983001

4.083428

0.467012

0.121733

5417.981420

min

0.000000

0.060000

0.000000

0.000000

3921.000000

25%

0.000000

3.000000

0.000000

1.000000

9811.750000

50%

1.000000

9.000000

0.000000

1.000000

11548.000000

75%

3.000000

12.000000

1.000000

1.000000

14463.750000

max

514.000000

12.000000

1.000000

1.000000

65279.000000

从表中可以看到,在房屋属性方面,房屋卧室数量平均约为3.45,客厅数量平均约为1.90,说明多数房屋有3到4个卧室和1到2个客厅。房屋面积的平均约为134.99平方米,标准差较大,说明房屋面积的分布相对较广,最小值为25.07平方米,最大值为1220.60平方米。。。。 

整数型数据:房屋的卧室数量、客厅数量、房屋朝向、装修情况、建筑结构、房屋所在楼层位置、关注度、附近是否有地铁、是否可以VR看房以及每平方米价格都是整数型数据。

接下来对数据预处理之后查看是否仍然存在缺失值的情况:

接下来数据可视化及其分析

首先查看一下每平方米价格与房屋面积的关系

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(10, 6),dpi=200)
sns.scatterplot(x=data['房屋面积'], y=data['每平方米价格'])
plt.title('每平方米价格与房屋面积的关系')
plt.xlabel('房屋面积(平方米)')
plt.ylabel('每平方米价格')
plt.show()

从散点图中可以看到,横轴标记的是“房屋面积(平方米)”,纵轴标记的是“每平方米价格”,大部分数据都分布在0-200的房屋面积(平方米)类,而且其房价均很高。

接下来价格与卧室数量的关系图:

plt.figure(figsize=(10, 6), dpi=200)
sns.boxplot(x=data['房屋卧室数量'], y=data['每平方米价格'])
plt.title('每平方米价格与卧室数量的关系')
plt.xlabel('卧室数量')
plt.ylabel('每平方米价格')
plt.show()

接下来是价格与附近是否有地铁的关系图

plt.figure(figsize=(10, 6),dpi=200)
sns.boxplot(x=data['附近是否有地铁'], y=data['每平方米价格'])
plt.title('附近是否有地铁与每平方米价格的关系')
plt.xlabel('附近是否有地铁')
plt.ylabel('每平方米价格')
plt.show()

 上图图中有两个箱形图,一个表示没有地铁的情况(标记为“0”),另一个表示有地铁的情况(标记为“1”)。从图中可以看到,附近有地铁站的箱形图(“1”)中位数似乎高于没有地铁站的(“0”),这通常是市场上的常态,因为地铁站的便利通常会提高房产价值。。

价格与房屋朝向的关系图

plt.figure(figsize=(10, 6), dpi=200)
sns.boxplot(x=data['房屋朝向'], y=data['每平方米价格'])
plt.title('每平方米价格与房屋朝向的关系')
plt.xlabel('房屋朝向')
plt.ylabel('每平方米价格')
plt.show()

通过分析上图,可以得出一个初步结论:房屋的朝向对于房价的影响似乎相对较小。尽管如此,我们可以观察到一些趋势,例如,东南朝向的房屋往往拥有更高的价格,

接下来查看房屋装修情况的分布

 从直方图上可以看到:“其他”装修类型的房屋(标记为0)的数量最少,这可能意味着市场上此类房屋的供应较少。“毛坯”房屋(标记为1)的数量适中,暗示有一定市场,但不是最常见的类型。。。。

接下来查看房屋装修情况占比

data = pd.read_csv('data2.csv',encoding="gbk")
plt.rcParams['font.sans-serif'] = ["Fangsong"]
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(12,6),dpi=200)
figure,axes = plt.subplots(1,1,figsize = (6,6),dpi = 120)
y = [344,528,461,1659]
label=["其他", "毛坯", "简装", "精装"]
# 绘图
plt.pie(y,
        labels=label, #
        autopct='%.2f%%', 
        labeldistance = 1.1,
        pctdistance = 0.9,
#         shadow = True,
        radius = 1, 
        startangle = 90, 
        counterclock = False 
       )
plt.title("房屋装修情况占比",fontsize = 12)

具体来看,饼图中占据最大比例的是红色部分,标记为“精装”,占比为55.45%,这说明超过半数的房源是精装修的。精装通常意味着房源在交付时装修完成,包括地板、厨卫设施、墙面处理等,买家可以直接入住,无需再进行大规模装修。

接下来查看楼层分布情况

plt.rcParams['font.sans-serif'] = ["Fangsong"]
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(12,6),dpi=200)
figure,axes = plt.subplots(1,1,figsize = (6,6),dpi = 120)
y = [863,1157,972]
label=["低楼层", "中楼层", "高楼层"]
plt.pie(y,
        labels=label,
        autopct='%.1f%%',
        labeldistance = 1.1,
        pctdistance = 0.9,
#        shadow = True,
        radius = 1, 
        startangle = 90, 
        counterclock = False 
       )
plt.title("楼层分布",fontsize = 12)

 

这张水平条形图显示了不同朝向的房源数量分布。每个条形代表一个朝向,条形的长度表示该朝向房源的数量。

具体来看,图中显示了七个不同的朝向类别:“南”朝向的房源数量最多,共有1403个。 

接下来查看相关性热力图

在这个热力图中,每个格子的颜色深浅表示了相关性的强度,颜色越接近红色表示正相关越强,越接近紫色表示正相关越弱。白色或接近白色的格子则表示很强的相关性。“房屋面积”与“单价”之间也有很强的正相关(0.38),这是合理的,因为在一点程度下,面积越大单价越高。

接下来开始机器学习

from sklearn.neighbors import KNeighborsRegressor
#K近邻
model1 = KNeighborsRegressor(n_neighbors=10)
model1.fit(X_train_s, y_train)
model1.score(X_val_s, y_val)

# 在验证集上进行预测
y_pred_KNN = model1.predict(X_val_s)

# 计算性能指标
mae_rf = mean_absolute_error(y_val, y_pred_KNN)
rmse_rf = mean_squared_error(y_val, y_pred_KNN, squared=False)
mape_rf = np.mean(np.abs((y_val - y_pred_KNN) / y_val)) * 100
r2_rf = r2_score(y_val, y_pred_KNN)
#随机森林
model2= RandomForestRegressor(n_estimators=500,  max_features=int(X_train.shape[1]/3) , random_state=0)
model2.fit(X_train_s, y_train)
model2.score(X_val_s, y_val)
# 计算性能指标
mae_rf = mean_absolute_error(y_val, y_pred_rf)
rmse_rf = mean_squared_error(y_val, y_pred_rf, squared=False)
mape_rf = np.mean(np.abs((y_val - y_pred_rf) / y_val)) * 100
r2_rf = r2_score(y_val, y_pred_rf)

 

特征的重要性如下:

“每平方米价格”远远高于其他特征,重要性接近0.7,这意味着它对房价的预测影响最大,这也是很直观的体现。“房屋面积”是第二重要的特征,其重要性约为0.2,也对房价有显著的影响。。。。

接下来查看模型比较

模型

MAE

RMSE

MAPE

R2

KNN

1515.515

2036.733

13.326

0.863

随机森林

278.045

1087.203

2.259

0.961

梯度提升

29.968

62.850

0.219

0.998

# 创建两个子图,分别绘制MAE和RMSE的柱状图,以及MAPE和R²分数的折线图
fig, axes = plt.subplots(2, 1, figsize=(10, 10),dpi=200)

# 绘制MAE和RMSE的柱状图
axes[0].bar(models, mae_scores, color='blue', label='MAE')
axes[0].bar(models, rmse_scores, color='green', label='RMSE', alpha=0.5)
axes[0].set_ylabel('Error')
axes[0].set_title('MAE and RMSE Comparison')
axes[0].legend()

# 绘制MAPE和R²分数的折线图
axes[1].plot(models, mape_r2_scores, marker='o', color='green', label='MAPE')
axes[1].plot(models, [0.863, 0.961, 0.999], marker='o', color='purple', label='R^2')
axes[1].set_ylabel('Score')
axes[1].set_title('MAPE and R^2 Score Comparison')
axes[1].legend()

# 自动调整布局
plt.tight_layout()

# 展示图表
plt.show()

这个直方图展示了三种不同机器学习模型:KNN(K最近邻),随机森林,和梯度提升在两个误差度量标准上的表现,即平均绝对误差(MAE)和均方根误差(RMSE)。KNN模型的MAE和RMSE都显著高于其他两种模型,这表明在这个特定任务中KNN的性能最差。

接下来进行模型优化

在优化过程中使用了网格搜索交叉验证(Grid Search Cross-Validation)来调整随机森林模型的超参数,以获得最佳模型性能。

# Parameters to tune
param_grid = {
    'n_estimators': [100, 200, 300],
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth': [10, 20, 30, None],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4]
}

# Grid search with cross-validation
rf = RandomForestRegressor(random_state=42)
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=3, n_jobs=-1, verbose=2)

# Fitting the grid search model
grid_search.fit(X_train, y_train)

# Best parameters
best_params = grid_search.best_params_
best_params

模型

MAE

RMSE

MAPE

R2

RF

281.05

1134.93

3.5432

0.9379

六、结论与展望

通过对昆明市房价数据的深入分析和建模,我们得出了一系列重要结论:

首先,朝向对房价的影响相对较小,尽管存在一些趋势,如东南朝向的房价相对较高,但整体影响不明显。在模型对比方面,最终梯度提升模型的拟合优度和其他误差效果是最好的,但是也不排除是过拟和的情况,在随机森林重要性特征方面,特征重要性分析显示每平方米价格是最为显著的影响因素。。。

参考文献

[1]崔慧莹. 基于极端随机森林算法的改进与二手房价预测的研究[D].大连交通大学,2023.DOI:10.26990/d.cnki.gsltc.2023.000640.

[2]张慧如.群优化GBDT复合模型的房价预测研究[D].山西大学,2023.DOI:10.27284/d.cnki.gsxiu.2023.001225.

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

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

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

相关文章

深入理解ThreadLocal原理

以下内容首发于我的个人网站,来这里看更舒适:https://riun.xyz/work/9898775 ThreadLocal是一种用于实现线程局部变量的机制,它允许每个线程有自己独立的变量,从而达到了线程数据隔离的目的。 基于JDK8 使用 通常在项目中是这样…

JS爬虫实战之Fastmoss

Fastmoss参数逆向 逆向前准备思路1- 确认接口2- 参数确认3- 重试校验参数逻辑4- 寻找逆向入口1- 方式一(search搜索):2- 方式二(堆栈搜索): 5- 获取加密算法1- fm-sign字段是有zn来的,我们查看z…

机器学习 C++ 的opencv实现SVM图像二分类的训练 (二)【附源码】

本节讲机器学习 C 的opencv实现SVM图像二分类的训练&#xff0c;下节讲测试&#xff1a; 数据集合data内容如下&#xff1a; 下载地址为&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 #include <stdio.h> #include <time.h> #include…

C语言课程回顾:六、C语言循环控制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 C语言循环控制 6 循环控制6.1 概述6.2 goto语句以及用goto语句构成循环6.3 while语句6.4 do-while语句6.5 for语句6.6 循环的嵌套6.7 几种循环的比较6.8 break和continue语句…

Windows系统安装NVM,实现Node.js多版本管理

目录 一、前言 二、NVM简介 三、准备工作 1、卸载Node 2、创建文件夹 四、下载NVM 五、安装NVM 六、使用NVM 1、NVM常用操作命令 2、查看NVM版本信息 3、查看Node.js版本列表&#xff1b; 4、下载指定版本Node.js 5、使用指定版本Node.js 6、查看已安装Node.js列…

Java知识点整理 18 — Lambda表达式

一. 简介 Lambda 表达式是函数式编程思想的体现&#xff0c;强调做什么&#xff0c;而不是以什么方式去做。 面向对象编程思想强调的是对象&#xff0c;必须通过对象的形式来做一些事情。比如多线程执行任务&#xff0c;需要创建对象&#xff0c;对象需要实现指定接口&#x…

Rust监控可观测性

可观测性 在监控章节的引言中&#xff0c;我们提到了老板、前端、后端眼中的监控是各不相同的&#xff0c;那么有没有办法将监控模型进行抽象、统一呢&#xff1f; 来简单分析一下&#xff1a; 业务指标实时展示&#xff0c;这是一个指标型的数据( metric )手机 APP 上传的数…

若依 ruoyi vue上传控件 el-upload上传文件 判断是否有文件 判断文件大小

console.info(this.$refs.upload.uploadFiles.length)//this.$refs.upload.uploadFiles.length 获取当前上传控件中已选择的文件大小//判断是否存在已上传文件 if(this.$refs.upload.uploadFiles.length 0){this.$modal.msgWarning("请上传文件");return; }

轻松配置,无需重复操作:PyCharm新建项目后,如何让当前新建项目使用既有虚拟环境

1、点击右上角的设置按钮 2、点击Settings 3、点击profect 4、点击python Interprter&#xff0c;这个是python解释器 5、点击 add interpreter&#xff0c;这个是增加python解释器 6、再点击add Local interpreter 7、选择第一个Virtualenv Environment,然后选择Existin…

交叉编译tslib库和上机测试

目录 一、tslib 介绍 二、tslib 框架分析 三、交叉编译、测试 tslib 1.安装工具链 tslib &#xff08;1&#xff09;设置交叉编译工具链 &#xff08;2&#xff09;进入tslib目录 &#xff08;3&#xff09;安装工具链 &#xff08;4&#xff09;确定工具链中头文件、库…

Linux源码阅读笔记09-进程NICE案例分析1

task_nice task_nice函数功能&#xff1a;获取某个进程的nice值&#xff0c;其中nice值为进程的优先级&#xff0c;与静态优先级有关&#xff08;nicestatic_prio-120&#xff09;。 nice的取值范围&#xff1a;-20 ~ 19 内核源码 根据内核的注释可以知道&#xff1a;task_n…

13-Django项目--文件上传

目录 前端展示 路由: 数据库字段: 函数视图: 前端展示 {% extends "index/index.html" %}{% block content %}<div class"container"><input type"button" id"btnAdd" value"上传荣耀" class"btn btn-succ…

鼠标点击器免费版?详细介绍鼠标连点器的如何使用

随着科技的发展&#xff0c;鼠标连点器逐渐成为了我们生活和工作中不可或缺的工具。它不仅能够帮助我们完成频繁且重复的点击任务&#xff0c;还能在很大程度上减少我们的手部疲劳&#xff0c;提高工作效率。本文将详细介绍鼠标连点器的使用方法&#xff0c;并推荐三款好用的免…

to_json 出现乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间

在快节奏的软件开发世界中&#xff0c;效率和速度起着重要作用。对于开发人员来说&#xff0c;设置开发环境可能是一项耗时的任务。GitHub Codespaces 是一个基于云的环境&#xff0c;旨在通过提供对配置设置的访问来应对这一挑战。 本指南将帮助你开始使用 GitHub Codespaces …

Spring boot 更改启动LOGO

在resources目录下创建banner.txt文件&#xff0c;然后编辑对应的图案即可 注释工具 Spring Boot Version: ${spring-boot.version},-.___,---.__ /|\ __,---,___,- \ -.____,- | -.____,- // -., | ~\ /~ | …

【面试干货】值传递与引用传递:理解Java中的参数传递机制

【面试干货】值传递与引用传递&#xff1a;理解Java中的参数传递机制 1、值传递&#xff08;Call by Value&#xff09;2、引用传递&#xff08;Call by Reference&#xff09;3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 值传递…

【Python】已解决:ERROR: No matching distribution found for JPype1

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ERROR: No matching distribution found for JPype1 一、分析问题背景 在安装Python的第三方库时&#xff0c;有时会遇到“ERROR: No matching distribution fo…

金融科技在反洗钱领域的创新应用

随着金融市场的不断发展和全球化趋势的加速&#xff0c;洗钱活动日益猖獗&#xff0c;给金融机构和社会经济安全带来了严重威胁。为了有效应对这一挑战&#xff0c;金融科技在反洗钱领域的应用逐渐崭露头角&#xff0c;为打击洗钱活动提供了强有力的技术支持。本文将从多个角度…