秦心靜,章 平,張新楊
(安徽工程大學(xué)計算機與信息學(xué)院,安徽 蕪湖 241000)
隨著城市經(jīng)濟的飛速發(fā)展,房地產(chǎn)市場逐漸完善,二手房交易市場逐年擴張,合理評估二手房價格的問題也越來越突出[1]。當(dāng)前,房地產(chǎn)估價行業(yè)大多采用市場比較法、收益法、成本法。通過對比類似房產(chǎn)價格、評估預(yù)期收益價格、計算生產(chǎn)費用等方法來確定房價。這些方式受房價評估者的主觀影響較大,評估效率較低[2]。近些年國內(nèi)外研究者在使用特征價格模型(Hedonic Price Model,HPM)[3]的基礎(chǔ)上,廣泛采用網(wǎng)絡(luò)大數(shù)據(jù),將房價評估與數(shù)據(jù)挖掘技術(shù)相結(jié)合來構(gòu)建房價評估模型,用于提高房價預(yù)測精度和可解釋性。
在模型估價過程中,影響房價的特征除房屋自身屬性數(shù)據(jù)外,常加入外部經(jīng)濟因素[4-5]、周邊學(xué)校質(zhì)量[6]、地理位置價值[7]等特征,通過量化特征來構(gòu)建房價與特征之間的關(guān)系式,從而分析房價生成模式。如ZHAN等[8]使用機器學(xué)習(xí)方法捕捉房屋屬性數(shù)據(jù)與宏觀經(jīng)濟數(shù)據(jù)間的非線性關(guān)系,從而構(gòu)建預(yù)測模型。XIONG等[9]使用關(guān)聯(lián)分析選擇關(guān)鍵特征影響因素來建立預(yù)測模型。TCHUENTE等[10]結(jié)合地理編碼量化房價評估中位置特征的相關(guān)性。FU等[7]研究房價地理相關(guān)性,分析個人特征、附近房地產(chǎn)價值以及潛在商業(yè)區(qū)價值的概率排名來進行房地產(chǎn)評估。
有關(guān)興趣點(POI)數(shù)據(jù)對房價影響的研究,唐紅濤等[11]使用POI數(shù)據(jù)探索區(qū)位因素對房價的影響。史丁尹[12]利用POI數(shù)據(jù)研究可達性對住房市場的影響,分析交通發(fā)展和居住空間發(fā)展的關(guān)系。其中,興趣點數(shù)據(jù)是指地理信息系統(tǒng)中可以抽象為點的地理對象。對于劃分子市場模型的研究,LIU等[13]使用位置鄰近性、房屋相似性以及可替代性建立子市場效應(yīng)來劃分市場。LIU等[14]利用層次空間功能分析有限空間內(nèi)子市場功能的聚類。然而,這些研究都是從某個方面提升預(yù)測精度,缺乏面向用戶的實際應(yīng)用性。
現(xiàn)有對房地產(chǎn)系統(tǒng)的研究,如通過空間大數(shù)據(jù)的內(nèi)容、協(xié)作和位置提供個性化的房地產(chǎn)推薦,使用在線房地產(chǎn)系統(tǒng)監(jiān)控用戶互動來評估推薦有效性[15];依據(jù)位置、環(huán)境以及外部經(jīng)濟因素,構(gòu)建適用于多區(qū)域的評估模型,并實現(xiàn)面向用戶的房價評估系統(tǒng)[16];強化特征提取和量化模塊處理各類型特征,結(jié)合機器學(xué)習(xí)方法設(shè)計房地產(chǎn)估價系統(tǒng)[17];利用GIS爬蟲技術(shù)對房產(chǎn)數(shù)據(jù)進行提取、存儲、空間分析,依據(jù)實時房產(chǎn)交易案例實現(xiàn)房價估算系統(tǒng)[18]。
本文以上述研究為基礎(chǔ),引入貝葉斯概率模型,通過增加POI特征結(jié)合機器學(xué)習(xí)方法構(gòu)建基于位置子市場的房價評估模型,以提高房價預(yù)測的準(zhǔn)確性。同時,實際應(yīng)用的需求,搭建基于子市場模型的房價評估可視化系統(tǒng)。系統(tǒng)首先利用數(shù)據(jù)挖掘技術(shù)采集城市POI數(shù)據(jù)和二手房地產(chǎn)數(shù)據(jù),并存儲至MySQL數(shù)據(jù)庫;其次,使用房屋位置特征來劃分房屋子市場范圍,依據(jù)特征價格理論構(gòu)建基于位置子市場的貝葉斯概率模型;最后依據(jù)此模型建立模塊化的房價評估系統(tǒng),借助Django框架、BootStrap、Echarts搭建可視化功能,以地理圖標(biāo)和統(tǒng)計圖表呈現(xiàn)可視化結(jié)果,實現(xiàn)房價評估、目標(biāo)房產(chǎn)篩選、房屋信息查詢等模塊功能。此外,本系統(tǒng)采用的數(shù)據(jù)庫和評估模型均是訓(xùn)練后的數(shù)據(jù),系統(tǒng)評估時可離線運行,不受網(wǎng)絡(luò)環(huán)境影響。模塊化的功能設(shè)計也可適應(yīng)模型提升和用戶需求改進。
本系統(tǒng)主要提供房價預(yù)測、信息查詢以及信息可視化的服務(wù)。用戶可以根據(jù)需求選擇相應(yīng)服務(wù)頁面,依據(jù)頁面提示輸入查詢信息,系統(tǒng)將用戶輸入信息與數(shù)據(jù)表信息進行對比擬合,進而完成運算并提供服務(wù)。
房價評估系統(tǒng)的邏輯如圖1所示。首先是數(shù)據(jù)的采集和管理過程,利用MySQL數(shù)據(jù)庫的數(shù)據(jù)管理功能,在估值系統(tǒng)內(nèi)對估價相關(guān)的人員信息和數(shù)據(jù)信息進行管理,創(chuàng)建包括用戶信息表、管理員信息表、房產(chǎn)信息表、POI信息表的數(shù)據(jù)總庫。其次在系統(tǒng)服務(wù)提供過程中,依據(jù)房屋位置數(shù)據(jù)劃分所屬子市場,綜合子市場與房屋特征構(gòu)建每個子市場的估價模型,具體實現(xiàn)過程將在3.1節(jié)估價模型構(gòu)建中介紹。在應(yīng)用服務(wù)中,用戶輸入所查詢信息,系統(tǒng)在服務(wù)過程中調(diào)用POI信息和房產(chǎn)信息完成目標(biāo)信息搜索。如對房屋價格的預(yù)測,用戶輸入所查詢房屋的屬性信息及經(jīng)緯度坐標(biāo)生成待估房產(chǎn)列表,系統(tǒng)依據(jù)經(jīng)緯度坐標(biāo)調(diào)取周邊POI數(shù)據(jù)并統(tǒng)計數(shù)量,再將更新后的列表導(dǎo)入房價預(yù)測模型中進行估算,即可預(yù)測價格。最后將系統(tǒng)服務(wù)返回至前端界面,實現(xiàn)面向用戶的房價預(yù)測服務(wù)、搜索服務(wù)以及可視化分析。
圖1 系統(tǒng)構(gòu)建邏輯示意圖
采用Django框架[19]中MTV模式來搭建系統(tǒng),即模型Models、視圖Views和模板Templates。模型即數(shù)據(jù)存取層,表示數(shù)據(jù)的模式,用于處理與房屋數(shù)據(jù)相關(guān)的所有事務(wù)。視圖即業(yè)務(wù)邏輯層,存取房價評估模型及調(diào)取業(yè)務(wù)模塊的相關(guān)邏輯,是數(shù)據(jù)層與網(wǎng)頁的橋梁。模板即表現(xiàn)層,處理與用戶操作相關(guān)的前端頁面,通過與業(yè)務(wù)邏輯層結(jié)合實現(xiàn)實時展示數(shù)據(jù)及房產(chǎn)評估處理結(jié)果。
系統(tǒng)程序流程如圖2所示。用戶向Web服務(wù)器發(fā)送評估請求,Web服務(wù)器收到請求后,依據(jù)請求內(nèi)容用URL或Path方法調(diào)用邏輯層中相應(yīng)的業(yè)務(wù)處理模塊,如房價預(yù)測模塊、POI搜索模塊等。然后將網(wǎng)頁請求對象作為參數(shù)傳給模型,利用模型與數(shù)據(jù)表相對應(yīng)的關(guān)系,從數(shù)據(jù)庫中取出數(shù)據(jù),邏輯處理后返回到表現(xiàn)層,通過前端框架展現(xiàn),將評估結(jié)果可視化呈現(xiàn)給用戶。
圖2 系統(tǒng)程序流程圖
2.2.1 前端
系統(tǒng)前端使用Html+Css+JavaScript和BootStrap框架快速構(gòu)建前端邏輯,并使用Echarts框架構(gòu)建餅圖、柱狀圖等可視化界面。主要功能如下:
(1)登錄/注冊:利用用戶合約對用戶信息進行定義,并編寫登錄、注冊功能接口。登錄接口通過在用戶信息中查找該賬號的數(shù)據(jù)完成核對登錄,注冊接口則通過向用戶信息表的數(shù)據(jù)中插入一條新數(shù)據(jù)完成信息錄入。
(2)價格預(yù)測過程:用戶輸入賬號密碼后,系統(tǒng)跳轉(zhuǎn)至價格預(yù)測頁面,依據(jù)頁面提示輸入想要查詢的房屋屬性,系統(tǒng)后端接收后快速計算預(yù)測價格。預(yù)測過程主要通過將訓(xùn)練測試后的子市場模型以PKL文件形式導(dǎo)入評估系統(tǒng),預(yù)測時依據(jù)查詢條件進行模型估算得到房屋的預(yù)測價格。
(3)地圖坐標(biāo)顯示:展示所查詢房產(chǎn)的實際地理位置。
(4)搜索服務(wù)/可視化分析:分析房屋的房產(chǎn)信息和周邊環(huán)境信息。利用表單獲取相應(yīng)頁面的輸入數(shù)據(jù),后臺根據(jù)數(shù)據(jù)信息調(diào)用高德地圖接口,獲取經(jīng)緯度坐標(biāo)進行地點標(biāo)注,并在數(shù)據(jù)總庫中搜索該坐標(biāo)周邊1 km范圍內(nèi)的房產(chǎn)或POI信息,統(tǒng)計數(shù)量和數(shù)據(jù)條目之后反饋搜索結(jié)果。同時,搜索結(jié)果可以使用Echarts框架以圖表的形式展示分析結(jié)果。
2.2.2 后端
系統(tǒng)后端負(fù)責(zé)數(shù)據(jù)庫信息管理,使用MySQL數(shù)據(jù)庫存取數(shù)據(jù),通過MySQLclient庫連接數(shù)據(jù)庫和系統(tǒng)業(yè)務(wù)邏輯,以模型為載體實現(xiàn)操作數(shù)據(jù)庫。主要功能包括用戶管理、管理員管理、房產(chǎn)管理、POI管理以及數(shù)據(jù)可視化操作。
本系統(tǒng)將數(shù)據(jù)分為POI數(shù)據(jù)和房屋屬性數(shù)據(jù)。POI數(shù)據(jù)用來直觀表達房屋位置與周邊建筑環(huán)境的距離、覆蓋度、集中分散程度的信息;房屋屬性數(shù)據(jù)表示房屋自身屬性的信息。如表1所示,POI數(shù)據(jù)包括周邊建筑類型、學(xué)校和交通設(shè)施三種特征,用來刻畫房屋周邊環(huán)境;房屋基礎(chǔ)特征包括面積、樓層、年份、裝修類型、房屋朝向、客廳數(shù)量、臥室數(shù)量、浴室數(shù)量。
表1 數(shù)據(jù)匯總
POI數(shù)據(jù)采集主要通過可利用的API接口獲取數(shù)據(jù)。對比百度地圖、騰訊地圖、高德地圖等多家服務(wù)提供商,本文選用市場率高、獲取數(shù)據(jù)效率高、權(quán)限較大的高德地圖獲取數(shù)據(jù)。系統(tǒng)使用高德地圖多邊形搜索服務(wù)的主要過程如圖3所示。選定一個城市范圍,獲取城市的四至坐標(biāo)(左上右下經(jīng)緯度坐標(biāo)),結(jié)合高德Web服務(wù)密鑰,通過URL請求獲取所需的POI數(shù)據(jù)。
圖3 POI數(shù)據(jù)采集過程
房屋屬性數(shù)據(jù)通過大型在線房地產(chǎn)交易網(wǎng)站之一的鏈家網(wǎng)獲取二手房地產(chǎn)市場數(shù)據(jù)。主要過程是借助Python爬蟲技術(shù),傳遞URL請求至目標(biāo)網(wǎng)頁下載器,從網(wǎng)頁中提取所需數(shù)據(jù)和URL列表,并使用BeautfulSoup正則表達式對獲取的網(wǎng)頁進行解析。
系統(tǒng)采用MySQL數(shù)據(jù)庫來管理空間數(shù)據(jù),與其他數(shù)據(jù)庫相比,MySQL規(guī)模較小,但具有成本低、可跨平臺、支持各種開發(fā)語言、存儲容量大等特點。在MySQL中新建城市房價評估系統(tǒng)數(shù)據(jù)庫,并建立相應(yīng)的數(shù)據(jù)表。數(shù)據(jù)庫表主要有四張,包括用戶信息、管理員信息、房產(chǎn)信息、POI信息,每張表的名稱、類型、長度如表2所示。
表2 數(shù)據(jù)庫說明信息表
估價模型構(gòu)建如圖4所示。首先采集所評估城市的房屋屬性數(shù)據(jù)和POI數(shù)據(jù),建立相應(yīng)庫表存儲。其次利用房屋位置特征對房地產(chǎn)市場進行子市場劃分,構(gòu)建每個子市場中房屋屬性與房價關(guān)系的計算公式,訓(xùn)練出每個子市場的貝葉斯概率模型[13]。最后將訓(xùn)練后的模型導(dǎo)入房價評估系統(tǒng)。在房價評估時,通過用戶輸入的房屋屬性和位置,計算該房屋屬于每個子市場的概率及在各子市場中的價格,加權(quán)平均得到最終預(yù)測價格。
圖4 房價估值系統(tǒng)邏輯示意圖
基于子市場的貝葉斯概率模型的訓(xùn)練過程如下:(1)調(diào)用機器學(xué)習(xí)庫中的梯度提升回歸樹(GBRT)模型[20];(2)設(shè)置GBRT的參數(shù),并基于劃分后的訓(xùn)練集數(shù)據(jù)進行建模;(3)不斷調(diào)整子市場數(shù)量進行模型訓(xùn)練,得到最優(yōu)的子市場劃分結(jié)果;(4)確定子市場數(shù)量后,測試模型,計算預(yù)測價格與真實價格之間的誤差,驗證評估模型的準(zhǔn)確度;(5)將訓(xùn)練完成的模型封裝成pkl文件導(dǎo)入系統(tǒng),用戶輸入待評估數(shù)據(jù)時直接調(diào)用模型進行預(yù)測。房屋數(shù)據(jù)特征量化后,劃分出訓(xùn)練集、測試集、驗證集并帶入模型進行運算。
基于系統(tǒng)功能設(shè)計,以主要服務(wù)功能即價格預(yù)測服務(wù)、搜索服務(wù)以及可視化分析為例,探討最終系統(tǒng)的用戶前端操作管理和后端信息管理過程的實現(xiàn)效果。
3.2.1 基于GBRT模型的價格預(yù)測實現(xiàn)
用戶輸入待評估房產(chǎn)信息后,系統(tǒng)根據(jù)房屋位置信息統(tǒng)計周邊1 km內(nèi)POI數(shù)量,將POI數(shù)據(jù)與所輸入的房屋屬性數(shù)據(jù)傳輸至房價預(yù)測模型中,即可獲得評估價格。
實現(xiàn)過程如下所示:
算法1 價格預(yù)測服務(wù)
輸入:用戶請求列表(年份、面積、結(jié)構(gòu)、樓層、朝向、裝修、經(jīng)度、緯度){test_data}
輸出:預(yù)測價格{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 搜索服務(wù)
搜索服務(wù)包括房產(chǎn)搜索、小區(qū)搜索、POI搜索。房產(chǎn)搜索服務(wù)通過輸入待查詢房屋屬性信息,提交至系統(tǒng)后端,根據(jù)后臺房產(chǎn)信息表進行對比,查詢符合條件的房屋,并將這些房屋的經(jīng)緯度坐標(biāo)返回至地圖標(biāo)記。
小區(qū)搜索服務(wù),通過輸入小區(qū)名稱,對比房屋信息表,返回該坐標(biāo)周邊1 km范圍內(nèi)房產(chǎn)信息。POI搜索服務(wù)與小區(qū)搜索服務(wù)相似,通過輸入查詢小區(qū)名稱,系統(tǒng)根據(jù)名稱獲取經(jīng)緯度坐標(biāo),再依據(jù)房屋信息表,查詢該坐標(biāo)周邊1 km范圍內(nèi)所有POI的建筑類型和相應(yīng)數(shù)量,并將統(tǒng)計結(jié)果和POI坐標(biāo)信息返回至前端頁面。
實現(xiàn)過程如下所示:
算法2 房產(chǎn)搜索(條件搜索)
輸入:用戶請求列表(年份、面積、結(jié)構(gòu)、樓層、朝向、裝修){test_data}
輸出:房產(chǎn)列表{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 小區(qū)搜索(名稱搜索)
輸入:地點名稱{name}
輸出:周邊房產(chǎn)信息列表{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}
輸出:周邊房產(chǎn)名稱以及poi數(shù)量列表{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)
為了提高系統(tǒng)功能的可靠性和房產(chǎn)估價時的準(zhǔn)確性,本文以合肥市二手房地產(chǎn)交易數(shù)據(jù)和POI數(shù)據(jù)作為測試數(shù)據(jù),利用系統(tǒng)對合肥市房屋進行具體估價。數(shù)據(jù)統(tǒng)計如表3所示。
表3 合肥市數(shù)據(jù)統(tǒng)計表
價格預(yù)測服務(wù)如圖5所示。其中,中心主圖為城市平面地圖,可縮放滑動查看城市街道及區(qū)域分布。右側(cè)為用戶輸入?yún)^(qū)域,各房屋屬性都設(shè)有提示信息,使得用戶操作更加便捷。用戶輸入后提交待估信息即可在預(yù)測價格欄獲得評估價格,同時系統(tǒng)會根據(jù)經(jīng)緯度信息在主圖上進行地點標(biāo)注。此外,若用戶輸入對經(jīng)緯度信息未知時,可在主圖地圖相近位置點擊,即可得到經(jīng)緯度坐標(biāo)。
圖5 房價預(yù)測服務(wù)示意圖
房產(chǎn)搜索服務(wù)如圖6所示,用戶輸入待查詢房屋屬性信息,提交至系統(tǒng)后端進行運算,系統(tǒng)根據(jù)后臺房產(chǎn)信息表進行比對,查詢符合條件的房屋,并將這些房屋的經(jīng)緯度坐標(biāo)返回至地圖標(biāo)記。
圖6 房產(chǎn)搜索服務(wù)示意圖
POI搜索服務(wù)如圖7所示,用戶輸入查詢小區(qū)名稱并提交搜索;結(jié)果反饋在右側(cè)POI列表中,列表每一欄代表所查詢小區(qū)附近1 km內(nèi)POI的建筑類型和相應(yīng)數(shù)量;每個POI位置也相應(yīng)標(biāo)記在地圖中。小區(qū)搜索同樣利用小區(qū)名稱查詢房屋信息,查詢結(jié)果如圖8中房屋列表所示。此外,還提供搜索結(jié)果圖表可視化服務(wù),展示所查詢小區(qū)的周邊房產(chǎn)及房產(chǎn)價格的直方圖,并進行對比。
圖7 POI搜索服務(wù)示意圖
圖8 小區(qū)搜索服務(wù)示意圖
本系統(tǒng)針對二手房地產(chǎn)估價問題,提出了利用興趣點(POI)數(shù)據(jù)建立城市房價評估系統(tǒng)。通過數(shù)據(jù)挖掘技術(shù)獲取POI數(shù)據(jù)和二手房的房屋屬性數(shù)據(jù),引入貝葉斯概率方法,利用位置特征來劃分房屋子市場范圍,結(jié)合機器學(xué)習(xí)方法構(gòu)建基于位置子市場的房價評估貝葉斯概率模型,以此提升評估精度。將完成后的模型導(dǎo)入系統(tǒng)中,以系統(tǒng)的形式實現(xiàn)數(shù)據(jù)存取和房價評估。系統(tǒng)借助Django框架來搭建前端可視化應(yīng)用功能,實現(xiàn)房價預(yù)測、目標(biāo)房產(chǎn)篩選、地圖展示等模塊化功能。以合肥市為例,對系統(tǒng)進行了實踐測試,證明了該模型的有效性,具有一定的應(yīng)用價值。