介紹
該專案旨在使用監督式機器學習技術來預測美國愛荷華州艾姆斯市(Ames, Iowa)的房價。Ames的房屋資料集來自Kaggle,這是谷歌旗下的一個線上平臺,它為資料科學家和機器學習科學家提供合作和競爭的機會。Kaggle以提供不同的資料和競賽為特色,其中便包括由Dean De Cock編輯的Ames房屋資料集。
該資料集包含具有81個特徵的測試集和訓練集。其中,訓練檔案包括1460條觀測值,測試檔案包含1459個觀測值。
資料清洗
建模的第一步便是資料探索和資料清洗,旨在理解資料集中的每個特徵和模式。將訓練集和測試集合併到一起進行統一的資料工程,並對缺失值進行探索。以下是一張熱力圖,可從中看出資料中的缺失值所處的位置。
熱圖為特徵缺失,尤其是包含大量缺失值的列提供了線索。通過對組合資料集的進一步分析,提取出每個特徵所含缺失值的具體數量。可知共有34列含有缺失值,其中PoolQC,LotFrontage,FireplaceQual,Fence,Alley和MiscFeatures列的缺失值最多。以下是一個條形圖,顯示了缺失值的分佈情況。
不同的含有缺失變數的特徵有不同的估算方式。在估算之前需要考慮以下因素:該特徵是分型別特徵還是數值型特徵,缺失值是隨機完全缺失、隨機缺失還是非隨機缺失。
對於含有隨機缺失值的數值型特徵,比如 'LotFrontage' ,將使用位於同一區域的房屋的中位數來進行估算。其他含有缺失值的數值型特徵大多根據一定的規則進行填充,大部分情況下使用0來填充。對於分型別特徵,其中一些似乎含有缺失值,但是空值(NA)實際上意味著這個變數或房子顯然缺少這樣的特徵,例如,'PoolQC' 中的空值意味著該變數沒有 'Pool' 這個屬性,它應當歸為 'No_pool' 。類似的方法可適用於大多數特徵。
刪除異常值——缺失值估算的下一步是對資料集進行探索,找出可能的異常值。可通過在散點圖上視覺化每列來完成。
'AboveGroundLivingArea',
BasementSquareFootage'
和 'LotFrontage' 特徵具有明顯的異常值,這些變數應當從資料集中刪除
特徵工程
在進行特徵工程之前,需要對特徵進行相關性分析,以便更深入地瞭解它們的方差、自變數特徵之間的相關關係和自變數特徵與因變數特徵—— SalePrice之間的相關關係。
從熱力圖中可觀察到 'GarageCars' 與 'GarageArea'高度相關,'GarageYearBuilt'與 'YearBuilt' 高度相關,'TotalRoomsAboveGround' 與 'GroundLivingArea' 高度相關。它們的相關性均在80%以上。從該矩陣還可以深入瞭解最適於特徵工程的特徵。
特徵新增——在現有特徵基礎上構造了9個新特徵,主要是二分類特徵。新添的第一個特徵是 "GrYrAfter" ,它代表了 'Garage year difference' ,記錄了建築物建造年份 ' YearBuilt ' 和車庫建造年份 'GarageYrBuilt ' 之間是否存在時間差。這個潛在的差值值得洞悉,因為這可能意味著建築物的施工時間非常漫長或者期間進行了一些重大改造,這些資訊都需要了解。新添的第二個特徵是 "Remodelling",生成兩個模型來刻畫房屋改建的時間差,第一個是二分類特徵,它記錄了房屋的建造年份 ' YearBuilt ' 與改建年份 ' YearRemodAdd ' 是否相同。第二個是數值特徵,它在第一個特徵為“是”的情況下,記錄了二者的時間差(YearRemodAdd - YearBuilt)。房屋建造時間是否晚於1980年和是否早於1960年也是新添的兩個二分類特徵,其餘所有特徵如下表所示。
基於對 'Garage Year Built' 中的缺失情況的仔細分析、它的高相關性以及由它構造出的新特徵,對其採取了刪除措施。因為它對自變數的影響已被更簡單的特徵所代替。
特徵變換——對4個特徵進行了變換以校正其分佈圖中所觀察到的偏斜情況。
觀察到 'LotAre' 的分佈異常,需要對其進行變換。對數變換之後得到了更好的分佈,如下圖所示:
LotArea特徵的變換
另一個需要進行變換的特徵是 'GroundLivingArea' ,它的分佈向右傾斜,進行對數變換之後也得到了更好的分佈,如下圖所示:
GroundLivingArea特徵的變換
其他兩個特徵中,'First Floor Square Footage' 特徵也進行了對數變換,'Lot Frontage' 則進行了box-cox變換。
最後一個進行特徵變換的是因變數 'SalePrice '。在目標變數中觀察到的向右傾斜經過對數變換,修正為正態分佈。
目標變數 —— SalePrice的變換
特徵虛擬化——在建模之前對分型別特徵進行啞編碼。經過特徵新增、刪除和變換後,資料框中包含87個特徵和2919條觀測值:
在啞編碼和從每個啞編碼後的特徵中刪除一個啞變數之後,有201個列新增到資料框中,總共有288個特徵。
建模
將合併後的資料框重新拆分為訓練資料框和測試資料框,其中訓練集包括1460條觀測值,測試集包括1459條觀測值。總共有5個模型在訓練集上進行了訓練。
基於線性的迴歸——即Ridge,Lasso和ElasticNet是為預測而構建的第一批模型。之所以使用這些懲罰多元線性迴歸技術,是因為它們可在最小化預測誤差時調節特徵之間的多重共線性。
嶺迴歸——對於該模型,完成了交叉驗證所需摺疊次數的試驗,如下圖所示:
從圖中可以看出,隨著摺疊次數的增加,標準偏差也隨之增加,而平均誤差保持不變,使用的摺疊次數為10。
嶺迴歸係數與正則化/懲罰強度折線圖
上圖為嶺迴歸係數與正則化/懲罰強α折線圖。隨α的增加,係數也隨著減小收縮到0。不僅係數減小,(量度變數與迴歸直線接近程度的統計量)也隨之下降。這意味著該模型減少了方差,也因此引入了偏差但產生了減少的預測誤差 ——“偏差-方差權衡”。令alpha = 10,tol = 1e-05,solver ='svd',得到最佳交叉驗證得分0.1132。
Lasso迴歸——Lasso迴歸同嶺迴歸一樣,也是正則化模型,用來減輕多重共線性的影響。在超參的優化基礎上,令alpha = 10,max_iter = 25,得到最佳交叉驗證得分0.1147。
Elatic-Net模型——這是一個將嶺迴歸和Lasso懲罰強度結合起來的正則化模型。
同樣,與其他懲罰模型一樣,隨著α的增加,係數縮小為0,如同從特徵的圖形表示中觀察到的那樣,它們完全從lasso下降到零。經過調參得到最佳引數是l1_ratio = 0.001和α=0.1,得到交叉驗證得分0.11204。
基於樹的模型——訓練了三種基於樹的模型,即支援向量機(SVM),梯度增強迴歸(Gradient Boosting Regressor)和XGBoost。
支援向量迴歸——對於這個基於樹的模型,需要3個主要引數來指示模型的最優調參,它們是gamma,epsilon和C。其中C的影響最大,它是一個調整引數,如同epsilon一樣,有助於確定可容忍的違規邊界和超平面的閾值。
由網格搜尋法得到迴歸的最佳引數是gamma = .000001,C = 100,epsilon = 0,它們也可從影像中觀察得到。對於低均方根誤差,需要低gamma值和高C值。
其他模型有:
Gradient Boosting Regressor——此模型的交叉驗證得分為0.12020; 和XGBoost ——最後訓練的模型得出了0.11872的交叉驗證分數。
下面的表格顯示了所有使用的模型以及它們的執行情況,而不侷限於本地模型,還包括kaggle。嶺迴歸的kaggle得分為0.12286,位居kaggle整體排名的前20%。
特徵重要性
使用基於樹的模型,繪製了特徵重要性圖,首先來自梯度增強迴歸模型:
'OverallQua' 特徵是對房屋的整體材料和完成度進行評級,根據梯度增強迴歸模型,其對預測的影響最大。這並不奇怪,因為房屋的銷售價格會隨著其質量的提高而提高。在預測中具有高度重要性的下一個特徵是 'GrLivArea',它以平方英尺為單位測量房屋的生活區域,這意味著房屋的大小會影響其價格,而模型也捕捉到了這一點。在分析特徵重要性時,我首先想到的是相關矩陣。
高度相關(> 80%)的特徵是否對預測產生相同的影響?在文章前部分,可看到 'GrLivArea' 與 'TotRmsAbvGrd' 有83%的相關性,這意味著以平方英尺為單位所測量的生活區域和地上的總房間數是相關的。然而,在觀察到的特徵重要性中,儘管 'GrLivArea' 的影響非常大,'TotRmsAbvGrd' 並不在重要特徵的前15名中。這個模型的表現說明梯度增強迴歸在多重共線性上非常魯棒。
用於分析特徵重要性的另一個模型是隨機森林:
從隨機森林模型獲得的特徵重要性與從梯度增強模型獲得的特徵重要性非常相似。兩個模型的前3個重要的特徵完全一樣,雖然它們對模型的影響程度不同。同樣,與梯度增強一樣,隨機森林對多重共線性具有魯棒性,因為它為隨機森林中的每棵樹選擇隨機特徵子集。
未來的工作
整合模型以檢視是否可以改進整體預測。
這項研究由三位資料科學研究員參與:Oluwole Alowolodu,David Levy和Benjamin Rosen。
原文標題:
House price prediction using machine learning
原文連結:
https://nycdatascience.com/blog/student-works/machine-learning/house-price-prediction-using-machine-learning/