房價預測“神器”來了!2019房價走勢如何?

房價預測“神器”來了!2019房價走勢如何?

作者 | Yulia Norenko等

題圖 | 站酷海洛

一提到房價,就“壓力山大”!無論是首套房還是改善性需求,買在低點賣在高點都是一個可遇不可求的事兒,所以如果有位數據大俠能幫助設計一個預測房價的神器,豈不是“人生很值得”!本期DT數據俠與紐約數據科學學院合作的數據線專欄中,四位數據俠通過“數據超能力”試圖利用Python通過機器學習方式來預測房價,快來看看他們是如何做得吧!

房價預測“神器”來了!2019房價走勢如何?

如果讓你全憑直覺來判斷,上圖裡的四個房子哪個最貴?

(也許)大多數人會說是右邊的藍色房子,因為它看起來最大也最新。然而,當你看完今天這篇文章,你可能會有不同的答案,並且發現一種更準確的預測房屋價格的方法。

這個項目的數據集可以在kaggle頁面(https://www.kaggle.com/c/house-prices-advanced-regression-techniques)找到:這些數據被分為兩類,訓練集和測試集。

數據列表一共有2600行、79列,包括了不同房屋的描述性數據,比如臥室數、一層的房屋面積等。訓練集裡還包括了房屋的真實價格數據。


▍因變量


房價預測“神器”來了!2019房價走勢如何?

圖片說明:房價的分佈圖

房屋價格總體來看,是一個平均值和中位數在20萬美元左右的向右傾斜的分佈,最高的價格在55萬到75萬之間。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:房價的描述統計



▍自變量


類別變量(Categorical Variables )

房價預測“神器”來了!2019房價走勢如何?

圖片說明:房屋質量vs.房價

大多數(79種變量中有51種)是定性變量(categorical),包括房子所在社區、整體質量、房屋類型等。最好預測的變量是與質量相關的變量。比如,整體質量這個變量最終證明是預測價格的最關鍵因素。房子某一個部分的質量,比如泳池、地下室等,也都與最終價格有很強的相關性。

數字變量(numeric variables)

數字變量大多是關於房屋面積。它們也與價格相關。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:除去地下室的房屋居住面積vs.房價


房價預測“神器”來了!2019房價走勢如何?

圖片說明:總面積vs.房價


▍缺失的數據

房價預測“神器”來了!2019房價走勢如何?

圖片說明:缺失值

過程中的一大挑戰是那些缺失的數據,對於像泳池質量、泳池面積等數據,如果數據缺失了,則說明這棟房子沒有泳池,我們會用0來代替,如果是定性變量,則用“無”來代替。對於那些“意外缺失”的數據,我們則通過其他變量進行估算,補充進去。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:缺失值與填補


▍特徵工程

處理一大堆不清晰的特徵總是充滿挑戰。下面我們要創造和拋棄一些變量,並引入一些啞變量等。

拋棄變量

通常人們會刪除一些相互高度關聯的特徵。在我們的分析中,我發現車庫建造年份和房屋建造年份關聯度很強,關聯值達到0.83。而且75.8%以上的情況下,這兩個值是相同的。因此,我們決定把有很多缺失的車庫年份數據丟掉。

創造新的變量

有時候需要創造新的變量從而提升整個模型的表現,我們設計了兩個新變量:

1. 賣掉時的房齡

2. 賣掉時距重新裝修過去多少年


▍處理變量

1. 我們找出11個定性變量,它們存在某種排序的可能,可以分別將它們劃分為很棒、一般和很差;

2. 對於其他的定性變量,我們使用pandas.get_dummies來得到獨熱編碼(One-Hot Encoding);

3. 我們找到24個連續數據變量,它們的斜率大於0.75(向右傾斜),我們使用對數變換來去掉本身的偏態。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:特徵檢測


▍正則化(regularization)

因為我們需要處理很多變量,所以我們引入了正則化的操作,來處理在過程中發現的那些多重共線性關係,以及使用多元線性迴歸模型可能帶來的過度擬合問題。

正則化最棒的地方在於它能減少模型的複雜性,因為它能自動地為你完成特徵挑選的任務。所有正則化模型都會懲罰多餘的特徵。

正則化的模型包括 Lasso、Ridge 模型和彈性網絡(Elastic Net)。Lasso 算法(最小絕對值收斂和選擇算法)會將係數設為0,而ridge迴歸模型會最小化係數,使其中的一些非常接近0。彈性網絡模型是Lasso和Ridge的混合。它將彼此相關的變量分到同一組,如果裡面有一個變量是個很強的預測變量(predictor),那麼整個組都會被納入這個模型。

下一步是將每個模型的超參數進行交叉驗證。

我們將Lasso模型的阿爾法定為 = .0005,Ridge的阿爾法為2.8 。彈性網絡模型的阿爾法為 .0005 , L1_Ratio = 0.9。因為當 L1_Ratio = 0.9 時,彈性網絡模型十分接近 Lasso模型,後者有默認的 L1_Ratio = 1 。

房價預測“神器”來了!2019房價走勢如何?


▍特徵選擇

房價預測“神器”來了!2019房價走勢如何?

圖片說明:Lasso與Ridge模型的迴歸係數

Lasso模型

對房屋價格的正算子係數:地上生活空間、整體房子狀況以及Stone Bridge、North Ridge 和 Crawford社區。

負算子係數:MS Zoing、Edwards 社區和地上廚房。

Ridge模型

對房屋價格的正算子係數:整體住宅面積、房頂材料(木瓦)、整體狀況。

負算子係數:一般的分區需求、離主幹道或鐵路的距離,以及游泳池狀況良好。


▍訓練數據中模型預測的價格和真實價格的對比

下面兩圖展示了我們的模型的精確度。離紅線近的以及在紅線上面的是我們預測準確的,那些偏離的比價多的需要我們進一步研究。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:預測價格vs.真實價格


▍梯度提升迴歸(Gradient boosting regression)

梯度提升迴歸是我們表現最好的一個算法。我們最初使用全部特徵(基準模型)來訓練梯度提升機。我使用 scikit-learn這個Python包提供的 GridSearchCV 功能來進行參數調整的交叉驗證。我們最好的模型參數是:學習值0.05,估計量2000,最大深度3。

我們製作了一個相對重要性表格,將梯度提升特徵的重要性用可視化的方式呈現。特徵重要性分數代表每個特徵在構建這個加強版的決策樹裡是否有用。地上生活空間面積、廚房質量、地下室面積以及車庫大小是最重要的特徵。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:相對重要性


▍PCA(主成分分析 )+ 梯度提升迴歸

我們接下來嘗試通過減少特徵的維度來提高我們基準模型的表現。高維度的數據可能很分散,就會讓使用某種算法來訓練有用的模型變得更難。總的來說,最優的、非多餘的特徵子集會對預測性的算法有好處,能夠提高訓練率以及加強它的可解釋性和一般性。

我們使用 scikit-learn 的 Pipelines 來管理我們的機器學習模型,它允許我們通過應用一個估計量來完成一系列數據的轉化工作。

我們設計了不同的pipeline,每一個有不同的估計量。對於梯度提升迴歸,我們的pipelin包括:

1. 特徵縮放,使用了scikit-learn 的python包

2. 降維,使用PCA(留下了150個主要的成分)

我們完成了特徵工程後,得到200個特徵和大約1500行訓練數據集。在看過累積方差的百分比的表格後,我們決定留下150個核心元素。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:方差累積百分比

並不是所有調整都能優化結果。在我們用PCA操作後,交叉驗證的分數並沒有提高,甚至惡化了(從0.91降到了0.87)。我們相信是降維時,也去掉了一些關鍵信息。PCA 不僅去掉了隨機出現的噪音,也去掉了有價值的信息。


▍PCA + 多元線性迴歸

對於多元線性迴歸,我們的pipeline 包括:

1. 特徵縮放,使用了scikit-learn 的python包

2. 降維,使用PCA(留下了150個主要的成分)

使用多元線性迴歸的PCA 也沒有帶來好的結果。交叉驗證的分數並沒有提高,甚至惡化了。


▍模型比較

XG Boost 是表現最好的模型,多元線性迴歸表現最差,其他模型的結果差不多。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:各個模型對比


使用單獨某一個模型都能讓我們得到不錯的結果。但是,通常來說,真實生活中的問題並沒有一種線性或者非線性的關係,可以讓我們用一個單獨的模型來重現。把保守和激進、線性和非線性的模型結合起來,才能最好地呈現房價預測這個問題。


▍融合(stacking 和 ensembling)

我們先嚐試了一個簡單的合模型(ensembling),以50-50的比例將 XGBoost(非線性)和ENet(線性)組合在一起。

接下來,我們按照模型融合(stacking)的基本方法,又嘗試了多個不同模型,來看哪個效果最好。下圖記錄了這些不同模型的表現情況。

房價預測“神器”來了!2019房價走勢如何?


▍結論

下面的相關性熱點圖展示了我們不同模型的預測價格。可以看到,彈性網絡、Lasso和Ridge本質上很相似,而兩種融合方式也彼此很像。與其他都明顯不同的是 XGBoost 模型。

房價預測“神器”來了!2019房價走勢如何?

圖片說明:模型成績


▍未來可研究方向

1. 研究自變量之間的相關性

2. 嘗試更多的特徵工程

3. 使用聚類分析來創造更多新的特徵

4. 對不同模型使用不同的特徵選擇方法:在線性模型中拋棄掉特定的特徵,而在樹形模型中保持大多數的特徵。

注:本文編譯自紐約數據科學院博客《Predicting House Prices with Machine Learning Algorithms》,點擊“閱讀原文”查看。內容僅為作者觀點,不代表DT數據俠立場。文中圖片部分來自作者。

期待更多數據俠乾貨分享、話題討論、福利發放?在公眾號DT數據俠(ID:DTdatahero)後臺回覆“數據社群”,可申請加入DT數據社群。


▍關於DT×NYCDSA

DT×NYCDSA是DT財經與紐約數據科學學院合作專欄。紐約數據科學學院(NYC Data Science Academy)是由一批活躍在全球的數據科學、大數據專家和SupStat Inc. 的成員共同組建的教育集團。


▍數據俠門派

本文數據俠Yulia Norenko ,有5年的金融從業經驗,曾在多家知名券商擔任分析師職務。他擁有紐約大學和莫斯科大學的碩士學位。

本文數據俠Howard Chang,畢業於石溪大學數學專業。他曾在管理數十億美元的對沖基金工作。

本文數據俠Lavanya Gupta,畢業於安巴尼信息與通信技術研究所,目前就職於匯豐銀行,擔任軟件工程師。

本文數據俠Silvia Lu,目前在紐約和新澤西地區空港管理部門實習,擔任數據分析師職務,她擁有紐約大學的心理學專業碩士學位。

▍加入數據俠

數據俠計劃是由第一財經旗下DT財經發起的數據社群,包含數據俠專欄、數據俠實驗室系列活動和數據俠聯盟,旨在聚集大數據領域精英,共同挖掘數據價值。申請入群請添加DT君微信(dtcaijing003)並備註“數據社群”,合作請聯繫[email protected]


房價預測“神器”來了!2019房價走勢如何?



分享到:


相關文章: