Kaggle-數據分析競賽:House Price Prediction官網鏈接
參賽情況 | |
---|---|
參賽時間 | 2020-05 |
最終結果(均方根誤差RMSE) | 0.115 |
競賽排名 | 前10% |
項目python代碼notebook | https://www.kaggle.com/yzh094/my-house-price-prediction |
1. 項目概述
- 項目背景:影響房屋價格的因素眾多,如房屋面積、房屋層數、配套設施等等。
- 項目要求:利用競賽提供的數據,通過分析影響房屋價格的諸多因素來對房屋價格進行預測。
- 項目數據:項目數據分成訓練數據(train.txt)和測試數據(test.txt),其中字段” LotConfig”、“ LandSlope”等79個字段是特征變量(不包括ID列),”SalePrice”字段是目標變量。
- 評估指標:本項目結果評估指標為均方根誤差(Root Mean Squared Error, RMSE)。
2. 項目思路
該項目的基本思路如下圖所示。項目所有流程均基於Python實現。
3. 問題定義
該項目要求利用給定的數據(共包括81個特征,數值型特征和類別型特征均有)來對房屋價格進行預測,因此考慮采用回歸方法進行預測。同時,為了提高預測的准確率(盡量降低RMSE),考慮基於集成學習思想的多個回歸模型集成方法。
4. 數據觀察
-
利用Python第三方庫pandas_profiling對訓練集生成描述性統計報告。發現該數據中包含數值型特征和類別型特征,大量特征存在缺失值。缺失率可視化如下圖所示:
-
通過數據分布可視化,發現數據在許多特征上存在偏態性。以訓練集目標變量SalePrice為例,數據分布及QQ圖如下圖所示:
5. 數據預處理
-
異常值處理:選擇對房屋價格影響較大的面積變量"GrLivArea"與目標變量 "SalePrice"的關系進行數據可視化(散點圖),可以看到存在兩個明顯的異常值點(房屋面積極大但是房價極低,不符合業務常識),如下圖所示:
對這兩個異常值點進行刪除。 -
缺失值處理:根據競賽提供的特征變量的解釋,充分理解每個特征的含義,綜合采用眾數、中位數等方法進行缺失值填補。
-
數據偏態處理:通過觀察每個數值型特征的數據分布,對目標變量SalePrice采用對數化處理;對其余特征變量采用Box-Cox轉換處理。以SalePrice變量為例,偏態處理后的數據分布及QQ圖如下圖所示(經過處理后的數據更符合回歸問題要求的正態分布):
6. 特征工程
- 根據業務常識,由於面積是影響房屋價格的主要因素,所以基於現有的有關面積的特征變量:TotalBsmtSF、1stFlrSF、2stFlrSF生成新的面積加總變量TotalSF變量。
- 對於部分數值型特征,其表達的含義其實是類別信息,因此將這些特征轉化為類別型數據,如MSSubClass(房屋等級類別)等。
- 對於包含排序信息的類別型特征,為了充分保留其排序信息,對這些特征采用LabelEncoder變換。
7. 多模型訓練
對於該回歸問題,本項目選擇的模型有:
模型名稱 |
---|
Lasso回歸模型 |
ElasticNet回歸模型 |
嶺回歸模型(以polynominal為核函數) |
XGBregreressor模型 |
LGBMRegressor模型 |
Gradient Boosting回歸模型 |
通過K折交叉驗證計算上述模型的RMSE的均值和標准差。
8. 集成學習
對訓練好的多模型進行集成融合,生成最終的模型Stacking model。
9. 預測
分別用Stacking model、XGBregreressor、LGBMRegressor對測試集進行預測,然后將三個預測結果進行加權,得到最終結果:
最終均方誤差 |
---|
0.115 |