Kaggle--房价预测
房價預測
目錄
- 一、認識數據
- 二、定性分析
- 2.1 屬性的意義
- 2.2 屬性分析
- 三、缺失值處理
- 3.1 缺失值舉例
- 3.2 缺失值統計
- 3.3 填充缺失值
- 3.4 格式轉換
- 四、特征分析
- 4.1 房價分析
- 4.2 房價屬性的關系
- 4.3 相關性
- 4.5 特征選取
- 五、回歸前的準備
- 5.1 特征向量化
- 5.2 測試集預處理
- 六、回歸
- 6.1梯度提升回歸
- 6.2 提交嘗試
- 6.3 改進再提交
- 七、總結與展望
- 八、參考文獻
一、認識數據
??House Prices數據集分為train(即訓練)數據和test(即測試)數據,其中,訓練集含有1460個樣本,80個屬性(包括序號),一個標簽(SalePrice,即房價);測試集含有1459個樣本,80個屬性。
??需要做的工作:根據測試集的屬性預測每個樣本的房價。
圖1
二、定性分析
2.1 屬性的意義
SalePrice 以美元出售的房產價格。
MSSubClass 建筑類
MSZoning 城市總體規劃分區
LotFrontage 連接物業的街道線
LotArea: Lot size in square feet 方塊大小
Street 道路入口類型
Alley 巷類型
LotShape 地產的外形
LandContour 地產的扁平化
Utilities 地產的公用事業類型
LotConfig 地產配置
LandSlope 地產的坡
Neighborhood 城市范圍內的物理位置
Condition1 接近主干道或鐵路
Condition2 接近主路或鐵路
BldgType 住宅類型
HouseStyle 居家風格
OverallQual 整體質量和表面質量
OverallCond 總體狀態額定值
YearBuilt 原施工日期
YearRemodAdd 重塑日期
RoofStyle 屋頂類型
RoofMatl 屋頂材料
Exterior1st 房屋外墻
Exterior2nd 外部第二層:房屋外部覆蓋物
MasVnrType 圬工單板型
MasVnrArea 砌體單板覆蓋面積
ExterQual: 外觀材質
ExterCond 外墻材料的現狀
Foundation 地基類型
BsmtQual 地下室的高度
BsmtCond 地下室概況
BsmtExposure: 走道或花園式地下室墻
BsmtFinType1 地下室竣工面積質量
BsmtFinSF1 1型成品面積
BsmtFinType2 第二成品區域的質量(如果存在)
BsmtFinSF2 2型成品面積
BsmtUnfSF 地下室面積
TotalBsmtSF 地下室面積總計面積
Heating 暖氣方式
HeatingQC 暖氣質量與條件
CentralAir 空調
Electrical 電氣系統
1stFlrSF 一樓面積
2ndFlrSF 二樓面積
LowQualFinSF 低質量完工面積(所有樓層)
GrLivArea 高檔(地面)居住面積
BsmtFullBath 地下室全浴室
BsmtHalfBath 地下室半浴室
FullBath 高檔浴室
HalfBath 半日以上洗澡浴室
Bedroom 地下室層以上的臥室數
Kitchen 廚房數量
KitchenQual 廚房品質
TotRmsAbvGrd 總房間(不包括浴室)
Functional 家庭功能評級
Fireplaces 壁爐數
FireplaceQu 壁爐質量
GarageType 車庫位置
GarageYrBlt 車庫建成年
GarageFinish 車庫的內飾
GarageCars 車庫容量大小
GarageArea 車庫大小
GarageQual 車庫質量
GarageCond 車庫狀況
PavedDrive 鋪好的車道
WoodDeckSF 木制甲板面積
OpenPorchSF 外部走廊面積
EnclosedPorch 閉走廊面積
3SsnPorch: 三季走廊面積
ScreenPorch 屏風走廊面積
PoolArea 泳池面積
PoolQC 泳池的質量
Fence 圍欄質量
MiscFeature 其他類別的雜項特征
MiscVal 雜項價值
MoSold 月售出
YrSold 年銷售
SaleType 銷售類型
SaleCondition 銷售條件
2.2 屬性分析
??可以看出,標簽為房價,而對于79個屬性主要分為幾分方面:
(1)房子地理位置:
MSSubClass、MSZoning、LotFrontage、LotArea、Street、Alley、LotShape、LandContour、Utilities、LotConfig、LandSlope、Neighborhood、Condition1、Condition2
(2)房子風格:
BldgType、HouseStyle、OverallQual、OverallCond
(3)房子裝修:
YearBuilt、YearRemodAdd、RoofStyle、RoofMatl、Exterior1st、Exterior2nd、MasVnrType、MasVnrArea、ExterQual:
ExterCond
(4)地下室:
Foundation、BsmtQual、BsmtCond、BsmtExposure:、BsmtFinType1、BsmtFinSF1、BsmtFinType2、BsmtFinSF2、BsmtUnfSF、TotalBsmtSF
(5)冷暖氣:
Heating、HeatingQC、CentralAir、Electrical
(6)居住面積:
1stFlrSF、2ndFlrSF、LowQualFinSF、GrLivArea
(7)功能房間:
BsmtFullBath、BsmtHalfBath、FullBath、HalfBath、Bedroom、Kitchen、KitchenQual、TotRmsAbvGrd、Functional
(8)車庫:
GarageType、GarageYrBlt、GarageFinish、GarageCars、GarageArea、GarageQual、GarageCond、PavedDrive
(9)其他面積:
WoodDeckSF、OpenPorchSF、EnclosedPorch、3SsnPorch:、ScreenPorch、PoolArea
(10)銷售:
MoSold、YrSold、SaleType、SaleCondition
(11)其他:
Fireplaces、FireplaceQu、PoolQC、Fence、MiscFeature、MiscVal
??假如數據真實可靠,則從實際情況考慮,對于一個房子的價格,最重要的屬性首先應該有:地理位置、面積、地下室、冷暖氣、車庫、房子質量,還有會影響到房價的有:銷售條件如時間和方式。所以先可以著重討論這些方面的屬性。
三、缺失值處理
3.1 缺失值舉例
??圖中NA就是缺失值:
圖2
3.2 缺失值統計
??訓練集數據缺失情況, 和它們對應的意義為:
圖3
3.3 填充缺失值
??缺失數據的變量有很多,處理情況可以分為如下幾類:
(1)缺失多
??直接數據集中剔除哪些存在大量缺失值的變量 缺失量比較多的PoolQC、MiscFeature、Alley、Fence、FireplaceQu是由于房子沒有泳池、特殊的設施、旁邊的小巷、籬笆、壁爐等設施。 由于缺失量比較多,缺失率超過40%,我們直接移除這幾個變量。
(2)車庫的屬性
??由于有些房子沒有車庫,造成車庫相關的屬性缺失,對于這種情況,我們有missing填充,同時對于車庫建造時間的缺失,我們用1900填充,表示車庫是年久的,使其變得不重要。
(3)與裝修有關
??有些房子重裝修過,但是有些房子是沒重裝修過的,所有有關的屬性可能確實。這是使用missing填充裝修情況,用0填充裝修面積。
(4)其它確實較少的屬性
??由于Electrical等屬性缺失較少,可以使用眾數填充:
3.4 格式轉換
??為了使得特征分析順利進行,首先對字符串型的屬性轉換到數值型,其中,字符型的屬性為:
??轉換的規則是:對于字符型屬性,按照各個類型的屬性的不同取值時房價的均值排高低,按此順序從低往高,給屬性的不同取值賦予1,2,3,4……,使得其變成數值型。
??經過轉換后的屬性全部為數值型,這時有利于進行分析。
四、特征分析
4.1 房價分析
??首先對房價進行分析,畫出房價的分布圖為:
圖4
??從圖中可以看出關于房價分布圖有幾個特點:
(1)偏離正態分布
(2)有明顯的正偏態
(3)有峰值
??進一步求得
偏度: 1.882876
峰度: 6.536282
??我們可以知道,在數據中房價主要集中在區間[100000,300000]中,而有關小于100000,和大于300000的房價是偏向異常數據,在進一步考慮時,應該適當合理區分這些數據。
4.2 房價屬性的關系
??在此先分析房價與屬性的關系,其中數值型的屬性有,字符型的在上面已展示。
??在定性前面分析知,面積等屬性與房價是有關系的,下面將分析一下它們的關系,部分情況如圖所示:
圖5
??從圖中還是很明顯地看出, “GrLivArea”和“TotalBsmtSF”似乎與“SalePrice”是線性相關的。這兩種關系都是正的,這意味著當一個變量增加時,另一個變量也會增加。 “OverallQual”和“YearBuilt”似乎也與“SalePrice”有關。這種關系似乎在“Overallqual”的情況下更加強烈,在這種情況下,箱型圖顯示了銷售價格是如何隨著整體質量而增長的。
??相同的情況分析其它屬性得到與房價近似正相關關系的屬性有:
Foundation、Heating、Electrical、SaleType、2ndFlrSF、SaleCondition、GarageArea、YearRemodAdd、ExterQual、BsmtFullBath、1stFlrSF、TotalBsmtSF、BsmtUnfSF、CentralAir、Neighborhood、GarageCars
4.3 相關性
??首先進行對數值型的屬性進行相關系數分析,期待發現它們之間的相關性。
圖6
??這個熱圖是快速瀏覽特征與價格關系的最好方法。(顏色越深,對應的像個特征的相關性越大)
??有兩個紅色的方塊引起了我的注意。第一個是“TotalBsmtSF”和“1stFlrSF”變量,第二個是“GarageX”變量。這兩種情況都顯示了這些變量之間的相關性有多大。實際上,這種相關性是如此強烈,以至于它可以表明多線性的情況。如果我們考慮這些變量,我們可以得出結論,它們給出的信息幾乎是相同的,所以多細胞性確實發生了。熱圖很好地發現了這種情況,在特征選擇的主導問題中,像我們這樣的問題,它們是必不可少的工具。
??另一件引起我注意的事情是“SalePrice”的相關性。我們可以看到我們著名的“GrLivArea”,“TotalBsmtSF”,以及“OverallQual”與其具有很大相關性。但我們也可以看到許多其他的變量的顏色也很深,這些變量應該被考慮進去。這就是我們接下來要做的。
??現在有上面熱點圖選擇與SalePrice 相關性最大的9個特征,進一步分析它們的相關性。
圖7
??這幾個屬性之間的信息是否互相包含?或者是,它們之間是否存在線性性?若存在,則可知只需要選取某些屬性,就可以代表所有屬性,而不必講所有屬性都考慮。
圖8
??從圖中可以看出,確實有些屬性之間信息重疊,如GrLivArea 和OverallQual之間就存在正相關性,還有GrLivArea和TotalBsmtSF之間也存在正相關性,OverallQual和TotalBsmtSF存在較弱的正相關性。定性分析可知,地下室面積TotalBsmtSF與居住面積當然有關系,除去沒有地下室的極少數房子,其它房子地下室面積大,伴隨著房子面積大,反過來也成立。
??進一步采用皮爾遜相關分析法對所有屬性和房價進行分析:
圖9
??可以清楚地看出與房價高度相關的屬性有:
OverallQual、Foundation、Heating、Electrical、SaleType、2ndFlrSF、SaleCondition、GarageArea、YearRemodAdd、YearBuilt、ExterQual、BsmtFullBath、1stFlrSF、TotalBsmtSF、BsmtUnfSF、CentralAir、Neighborhood、GarageCars、GrLivArea
4.5 特征選取
??根據以上討論,去掉部分互相相關性強的屬性,選擇作為房價分析的特征有:
OverallQual、Foundation、Heating、Electrical、SaleType、2ndFlrSF、SaleCondition、GarageArea、YearRemodAdd、YearBuilt、ExterQual、BsmtFullBath、1stFlrSF、TotalBsmtSF、BsmtUnfSF、CentralAir、Neighborhood、GarageCars、
五、回歸前的準備
5.1 特征向量化
??首先采用DictVectorizer進行特征向量化,目的是為了數據歸一化(使特征數據方差為1,均值為0)。
5.2 測試集預處理
??前面的數據預處理只是對訓練集進行,對于測試集,其數據缺失情況如下:
圖10
??對于選取的屬性進行數據預處理,使用均值或眾數進行填充缺失值,步驟和訓練集的一樣。
六、回歸
6.1梯度提升回歸
??現在訓練集的選取的屬性和標簽準備就位,測試集的選取的屬性也預處理完畢,可以進行測試集的回歸預測了。
??為了準確地利用訓練集對測試集進行回歸,在此我們利用了梯度提升回歸即 Gradient Boosting Regression這個方法。
??梯度提升回歸(Gradient boosting regression,GBR)是一種集成模型,它是一個集成學習算法是一種從它的錯誤中進行學習的技術。它本質上就是集思廣益,集成一堆較差的學習算法進行學習。GBR與一般集成算法的區別是GBR在迭代的時候選擇梯度下降的方向來保證最后的結果最好,即是讓損失函數在其梯度方向上下降。
6.2 提交嘗試
??再對輸出結果轉換為提交要求的格式:
??評分標準是均方根誤差(RMSE),即是:
提交結果為:0.14922
排名:2497/4989 (50%)
圖11
6.3 改進再提交
??改進的想法由房價的分布產生,房價分布圖為:
圖12
??根據前面討論可知,在數據中房價主要集中在區間[100000,300000]中,而有關小于100000,和大于300000的房價是偏向異常數據,在進一步考慮時,應該適當合理區分這些數據。
??所以,在此將數據按照房價的大小分為兩部分。由于測試集中是沒有房價的,在這里想到了GrLivArea屬性與房價高度正相關,而且在前面討論中由于屬性間信息重疊,不考慮GrLivArea作為分析房價的特征。
??一個很自然的想法是,既然GrLivArea與房價高度正相關,就以GrLivArea作為分隔的屬性,將數據分為兩部分。經分析GrLivArea的取值,以GrLivArea中值大于等于2500的分為一類,小于2500的分為一類。
??現在有4部分數據集:
(1)訓練集中GrLivArea大于等于2500的數據集;
(2)訓練集中GrLivArea小于2500的數據集;
(3)測試集中GrLivArea大于等于2500的數據集;
(4)測試集中GrLivArea小于2500的數據集;
??進行再次回歸:
??利用上面(1)中數據對(3)進行回歸。利用(2)中數據對(4)進行回歸。
??再次提交得分為:0.14438
??排名:2250/4989 (46%)
圖13
七、總結與展望
(1)房價預測這個題目看似簡單,實質上很有難度,主要是屬性很多,而且缺失值也很多,數據預處理有難度。
(2)本文進行數據預處理考慮還簡單,可以繼續考慮屬性間的線性關系程度,以及屬性間合并,或屬性分拆等。
(3)對于結果,我們還是滿意的,經過一番嘗試后,排名為45%。若要繼續提升,一個方向是將數據集繼續分類,分為三類或更多。
八、參考文獻
[1]周志華.機器學習[M].北京:清華大學出版社,2016.
[2]Peter Harrington.機器學習實戰[M].北京:人民郵電出版社,2013.
[3]韓家煒等.數據挖掘概念與技術[M].北京:機械工業出版社,2012.
[4] House Prices: Advanced Regression Techniques,
https://blog.csdn.net/ns2250225/article/details/72626155
[5] Kaggle房價預測:數據預處理——練習,
https://blog.csdn.net/qilixuening/article/details/75153131
總結
以上是生活随笔為你收集整理的Kaggle--房价预测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 毕业后5年,我终于变成了月薪13000的
- 下一篇: LOMO效果算法