APP下载

基于POI数据的城市房价评估系统设计与实现

2023-11-02秦心静张新杨

长春师范大学学报 2023年10期
关键词:房价房屋预测

秦心静,章 平,张新杨

(安徽工程大学计算机与信息学院,安徽 芜湖 241000)

0 引言

随着城市经济的飞速发展,房地产市场逐渐完善,二手房交易市场逐年扩张,合理评估二手房价格的问题也越来越突出[1]。当前,房地产估价行业大多采用市场比较法、收益法、成本法。通过对比类似房产价格、评估预期收益价格、计算生产费用等方法来确定房价。这些方式受房价评估者的主观影响较大,评估效率较低[2]。近些年国内外研究者在使用特征价格模型(Hedonic Price Model,HPM)[3]的基础上,广泛采用网络大数据,将房价评估与数据挖掘技术相结合来构建房价评估模型,用于提高房价预测精度和可解释性。

在模型估价过程中,影响房价的特征除房屋自身属性数据外,常加入外部经济因素[4-5]、周边学校质量[6]、地理位置价值[7]等特征,通过量化特征来构建房价与特征之间的关系式,从而分析房价生成模式。如ZHAN等[8]使用机器学习方法捕捉房屋属性数据与宏观经济数据间的非线性关系,从而构建预测模型。XIONG等[9]使用关联分析选择关键特征影响因素来建立预测模型。TCHUENTE等[10]结合地理编码量化房价评估中位置特征的相关性。FU等[7]研究房价地理相关性,分析个人特征、附近房地产价值以及潜在商业区价值的概率排名来进行房地产评估。

有关兴趣点(POI)数据对房价影响的研究,唐红涛等[11]使用POI数据探索区位因素对房价的影响。史丁尹[12]利用POI数据研究可达性对住房市场的影响,分析交通发展和居住空间发展的关系。其中,兴趣点数据是指地理信息系统中可以抽象为点的地理对象。对于划分子市场模型的研究,LIU等[13]使用位置邻近性、房屋相似性以及可替代性建立子市场效应来划分市场。LIU等[14]利用层次空间功能分析有限空间内子市场功能的聚类。然而,这些研究都是从某个方面提升预测精度,缺乏面向用户的实际应用性。

现有对房地产系统的研究,如通过空间大数据的内容、协作和位置提供个性化的房地产推荐,使用在线房地产系统监控用户互动来评估推荐有效性[15];依据位置、环境以及外部经济因素,构建适用于多区域的评估模型,并实现面向用户的房价评估系统[16];强化特征提取和量化模块处理各类型特征,结合机器学习方法设计房地产估价系统[17];利用GIS爬虫技术对房产数据进行提取、存储、空间分析,依据实时房产交易案例实现房价估算系统[18]。

本文以上述研究为基础,引入贝叶斯概率模型,通过增加POI特征结合机器学习方法构建基于位置子市场的房价评估模型,以提高房价预测的准确性。同时,实际应用的需求,搭建基于子市场模型的房价评估可视化系统。系统首先利用数据挖掘技术采集城市POI数据和二手房地产数据,并存储至MySQL数据库;其次,使用房屋位置特征来划分房屋子市场范围,依据特征价格理论构建基于位置子市场的贝叶斯概率模型;最后依据此模型建立模块化的房价评估系统,借助Django框架、BootStrap、Echarts搭建可视化功能,以地理图标和统计图表呈现可视化结果,实现房价评估、目标房产筛选、房屋信息查询等模块功能。此外,本系统采用的数据库和评估模型均是训练后的数据,系统评估时可离线运行,不受网络环境影响。模块化的功能设计也可适应模型提升和用户需求改进。

1 系统总体设计

本系统主要提供房价预测、信息查询以及信息可视化的服务。用户可以根据需求选择相应服务页面,依据页面提示输入查询信息,系统将用户输入信息与数据表信息进行对比拟合,进而完成运算并提供服务。

房价评估系统的逻辑如图1所示。首先是数据的采集和管理过程,利用MySQL数据库的数据管理功能,在估值系统内对估价相关的人员信息和数据信息进行管理,创建包括用户信息表、管理员信息表、房产信息表、POI信息表的数据总库。其次在系统服务提供过程中,依据房屋位置数据划分所属子市场,综合子市场与房屋特征构建每个子市场的估价模型,具体实现过程将在3.1节估价模型构建中介绍。在应用服务中,用户输入所查询信息,系统在服务过程中调用POI信息和房产信息完成目标信息搜索。如对房屋价格的预测,用户输入所查询房屋的属性信息及经纬度坐标生成待估房产列表,系统依据经纬度坐标调取周边POI数据并统计数量,再将更新后的列表导入房价预测模型中进行估算,即可预测价格。最后将系统服务返回至前端界面,实现面向用户的房价预测服务、搜索服务以及可视化分析。

图1 系统构建逻辑示意图

2 系统详细设计

2.1 框架设计

采用Django框架[19]中MTV模式来搭建系统,即模型Models、视图Views和模板Templates。模型即数据存取层,表示数据的模式,用于处理与房屋数据相关的所有事务。视图即业务逻辑层,存取房价评估模型及调取业务模块的相关逻辑,是数据层与网页的桥梁。模板即表现层,处理与用户操作相关的前端页面,通过与业务逻辑层结合实现实时展示数据及房产评估处理结果。

系统程序流程如图2所示。用户向Web服务器发送评估请求,Web服务器收到请求后,依据请求内容用URL或Path方法调用逻辑层中相应的业务处理模块,如房价预测模块、POI搜索模块等。然后将网页请求对象作为参数传给模型,利用模型与数据表相对应的关系,从数据库中取出数据,逻辑处理后返回到表现层,通过前端框架展现,将评估结果可视化呈现给用户。

图2 系统程序流程图

2.2 功能设计

2.2.1 前端

系统前端使用Html+Css+JavaScript和BootStrap框架快速构建前端逻辑,并使用Echarts框架构建饼图、柱状图等可视化界面。主要功能如下:

(1)登录/注册:利用用户合约对用户信息进行定义,并编写登录、注册功能接口。登录接口通过在用户信息中查找该账号的数据完成核对登录,注册接口则通过向用户信息表的数据中插入一条新数据完成信息录入。

(2)价格预测过程:用户输入账号密码后,系统跳转至价格预测页面,依据页面提示输入想要查询的房屋属性,系统后端接收后快速计算预测价格。预测过程主要通过将训练测试后的子市场模型以PKL文件形式导入评估系统,预测时依据查询条件进行模型估算得到房屋的预测价格。

(3)地图坐标显示:展示所查询房产的实际地理位置。

(4)搜索服务/可视化分析:分析房屋的房产信息和周边环境信息。利用表单获取相应页面的输入数据,后台根据数据信息调用高德地图接口,获取经纬度坐标进行地点标注,并在数据总库中搜索该坐标周边1 km范围内的房产或POI信息,统计数量和数据条目之后反馈搜索结果。同时,搜索结果可以使用Echarts框架以图表的形式展示分析结果。

2.2.2 后端

系统后端负责数据库信息管理,使用MySQL数据库存取数据,通过MySQLclient库连接数据库和系统业务逻辑,以模型为载体实现操作数据库。主要功能包括用户管理、管理员管理、房产管理、POI管理以及数据可视化操作。

2.3 数据库设计

本系统将数据分为POI数据和房屋属性数据。POI数据用来直观表达房屋位置与周边建筑环境的距离、覆盖度、集中分散程度的信息;房屋属性数据表示房屋自身属性的信息。如表1所示,POI数据包括周边建筑类型、学校和交通设施三种特征,用来刻画房屋周边环境;房屋基础特征包括面积、楼层、年份、装修类型、房屋朝向、客厅数量、卧室数量、浴室数量。

表1 数据汇总

POI数据采集主要通过可利用的API接口获取数据。对比百度地图、腾讯地图、高德地图等多家服务提供商,本文选用市场率高、获取数据效率高、权限较大的高德地图获取数据。系统使用高德地图多边形搜索服务的主要过程如图3所示。选定一个城市范围,获取城市的四至坐标(左上右下经纬度坐标),结合高德Web服务密钥,通过URL请求获取所需的POI数据。

图3 POI数据采集过程

房屋属性数据通过大型在线房地产交易网站之一的链家网获取二手房地产市场数据。主要过程是借助Python爬虫技术,传递URL请求至目标网页下载器,从网页中提取所需数据和URL列表,并使用BeautfulSoup正则表达式对获取的网页进行解析。

系统采用MySQL数据库来管理空间数据,与其他数据库相比,MySQL规模较小,但具有成本低、可跨平台、支持各种开发语言、存储容量大等特点。在MySQL中新建城市房价评估系统数据库,并建立相应的数据表。数据库表主要有四张,包括用户信息、管理员信息、房产信息、POI信息,每张表的名称、类型、长度如表2所示。

表2 数据库说明信息表

3 系统实现

3.1 估价模型构建

估价模型构建如图4所示。首先采集所评估城市的房屋属性数据和POI数据,建立相应库表存储。其次利用房屋位置特征对房地产市场进行子市场划分,构建每个子市场中房屋属性与房价关系的计算公式,训练出每个子市场的贝叶斯概率模型[13]。最后将训练后的模型导入房价评估系统。在房价评估时,通过用户输入的房屋属性和位置,计算该房屋属于每个子市场的概率及在各子市场中的价格,加权平均得到最终预测价格。

图4 房价估值系统逻辑示意图

基于子市场的贝叶斯概率模型的训练过程如下:(1)调用机器学习库中的梯度提升回归树(GBRT)模型[20];(2)设置GBRT的参数,并基于划分后的训练集数据进行建模;(3)不断调整子市场数量进行模型训练,得到最优的子市场划分结果;(4)确定子市场数量后,测试模型,计算预测价格与真实价格之间的误差,验证评估模型的准确度;(5)将训练完成的模型封装成pkl文件导入系统,用户输入待评估数据时直接调用模型进行预测。房屋数据特征量化后,划分出训练集、测试集、验证集并带入模型进行运算。

3.2 评估系统实现

基于系统功能设计,以主要服务功能即价格预测服务、搜索服务以及可视化分析为例,探讨最终系统的用户前端操作管理和后端信息管理过程的实现效果。

3.2.1 基于GBRT模型的价格预测实现

用户输入待评估房产信息后,系统根据房屋位置信息统计周边1 km内POI数量,将POI数据与所输入的房屋属性数据传输至房价预测模型中,即可获得评估价格。

实现过程如下所示:

算法1 价格预测服务

输入:用户请求列表(年份、面积、结构、楼层、朝向、装修、经度、纬度){test_data}

输出:预测价格{average_price}

list←{test_data}

dict←1000

poi_count_list←{}

poi_list←models.PoiInfo.values.list

for i in poi_list do

poi_count_list←append(Get the number of poi within 1km(lon, lat, dict, i))

for i in poi_count_list do

list.append(i)

price←model_test Invoke model estimation

sum_price←0

for i in price do

sum_price←sum_price+i

average_price←sum_price/len(price)

3.2.2 搜索服务

搜索服务包括房产搜索、小区搜索、POI搜索。房产搜索服务通过输入待查询房屋属性信息,提交至系统后端,根据后台房产信息表进行对比,查询符合条件的房屋,并将这些房屋的经纬度坐标返回至地图标记。

小区搜索服务,通过输入小区名称,对比房屋信息表,返回该坐标周边1 km范围内房产信息。POI搜索服务与小区搜索服务相似,通过输入查询小区名称,系统根据名称获取经纬度坐标,再依据房屋信息表,查询该坐标周边1 km范围内所有POI的建筑类型和相应数量,并将统计结果和POI坐标信息返回至前端页面。

实现过程如下所示:

算法2 房产搜索(条件搜索)

输入:用户请求列表(年份、面积、结构、楼层、朝向、装修){test_data}

输出:房产列表{estate_list}

list←{test_data}

estate_out←models.EstateInfo.objects.filter(content filtering).values_list()

estate_list←[]

for i in estate_out do

estate_list.append(i)

算法3 小区搜索(名称搜索)

输入:地点名称{name}

输出:周边房产信息列表{name, result_dic}

location←Get latitude and longitude by name (name, city, key)

lon←float(location.split[0])

lat←float(location.split[1])

estate_out←models.EstateInfo.objects.all()

estate_name_list←[]

for i in estate_out do

estate_name_list←append(name, estate_name_list)

dict←1000

estate_list←get_estate(lon, lat, dict)

zxy←[]

for i in estate_list do

zxy←append(i[1])

result_dic←count_item_in_list_appear(z)

算法4 POI搜索(名称搜索)

输入:地点名称{name}

输出:周边房产名称以及poi数量列表{name, result_dic}

location←Get latitude and longitude by name(name, city, key)

lon←float(location.split[0])

lat←float(location.split[1])

estate_out←models.EstateInfo.objects.all()

estate_name_list←[]

for i in estate_out do

estate_name_list←append(name, estate_name_list)

dict←1000

poi_list←Get poi within 1km(lon, lat, dict)

z←[]

for i in poi_list do

z←append(i[8])

result_dic←Count occurrences of poi element(z)

4 系统测试

为了提高系统功能的可靠性和房产估价时的准确性,本文以合肥市二手房地产交易数据和POI数据作为测试数据,利用系统对合肥市房屋进行具体估价。数据统计如表3所示。

表3 合肥市数据统计表

价格预测服务如图5所示。其中,中心主图为城市平面地图,可缩放滑动查看城市街道及区域分布。右侧为用户输入区域,各房屋属性都设有提示信息,使得用户操作更加便捷。用户输入后提交待估信息即可在预测价格栏获得评估价格,同时系统会根据经纬度信息在主图上进行地点标注。此外,若用户输入对经纬度信息未知时,可在主图地图相近位置点击,即可得到经纬度坐标。

图5 房价预测服务示意图

房产搜索服务如图6所示,用户输入待查询房屋属性信息,提交至系统后端进行运算,系统根据后台房产信息表进行比对,查询符合条件的房屋,并将这些房屋的经纬度坐标返回至地图标记。

图6 房产搜索服务示意图

POI搜索服务如图7所示,用户输入查询小区名称并提交搜索;结果反馈在右侧POI列表中,列表每一栏代表所查询小区附近1 km内POI的建筑类型和相应数量;每个POI位置也相应标记在地图中。小区搜索同样利用小区名称查询房屋信息,查询结果如图8中房屋列表所示。此外,还提供搜索结果图表可视化服务,展示所查询小区的周边房产及房产价格的直方图,并进行对比。

图7 POI搜索服务示意图

图8 小区搜索服务示意图

5 结语

本系统针对二手房地产估价问题,提出了利用兴趣点(POI)数据建立城市房价评估系统。通过数据挖掘技术获取POI数据和二手房的房屋属性数据,引入贝叶斯概率方法,利用位置特征来划分房屋子市场范围,结合机器学习方法构建基于位置子市场的房价评估贝叶斯概率模型,以此提升评估精度。将完成后的模型导入系统中,以系统的形式实现数据存取和房价评估。系统借助Django框架来搭建前端可视化应用功能,实现房价预测、目标房产筛选、地图展示等模块化功能。以合肥市为例,对系统进行了实践测试,证明了该模型的有效性,具有一定的应用价值。

猜你喜欢

房价房屋预测
无可预测
选修2-2期中考试预测卷(A卷)
选修2-2期中考试预测卷(B卷)
UMAMMA历史房屋改造
两大手段!深圳土地“扩权”定了,房价还会再涨?
房屋
防范未然 “稳房价”更要“稳房租”
转租房屋,出现问题由谁负责?
不必预测未来,只需把握现在
去库存的根本途径还在于降房价