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

    2018年11月23日 15:37來源:百度行業動態責任編輯:jiangshan

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

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

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

    這個項目的數據集可以在kaggle頁面找到:這些數據被分為兩類,訓練集和測試集。

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

    ▍因變量

    (圖片說明:房價的分布圖)

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

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

    ▍自變量

    類別變量(Categorical Variables )

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

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

    數字變量(numeric variables)

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

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

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

    ▍缺失的數據

    (圖片說明:缺失值)

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

    (圖片說明:缺失值與填補)

    ▍特征工程

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

    拋棄變量

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

    創造新的變量

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

    1. 賣掉時的房齡

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

    ▍處理變量

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

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

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

    (圖片說明:特征檢測)

    ▍正則化(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 。

    ▍特征選擇

    (圖片說明:Lasso與Ridge模型的回歸系數)

    Lasso模型

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

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

    Ridge模型

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

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

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

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

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

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

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

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

    (圖片說明:相對重要性)

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

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

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

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

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

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

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

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

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

    ▍PCA + 多元線性回歸

    對于多元線性回歸,我們的pipeline 包括:

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

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

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

    ▍模型比較

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

    (圖片說明:各個模型對比)

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

    ▍融合(stacking 和 ensembling)

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

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

    ▍結論

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

    (圖片說明:模型成績)

    ▍未來可研究方向

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

    2. 嘗試更多的特征工程

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

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



    • 意向區域
    • 價格
    全中彩票开户