SberbankRussianHousingMarket數據挖掘比賽總結

一、 實驗準備

1.實驗環境
系統 MacOSX 10.9.5
處理器 2.3GHz Intel Core i7
內存 16GB
2.編程語言
Python2.7
3.編程環境
Jupyter NoteBook

利用pip install 安裝所需的包,參考TA提供的requirements.txt。
pip install -r requirements.txt

二、 比賽探索

1. 比賽目標

利用房屋的基礎數據和宏觀經濟數據預測房價(price_doc)。

2. 數據集

train.csv
test.csv
macro.csv

數據集帶有時間戳(timestamp),訓練集和測試集按時間劃分 201108-201506/201507-201605

3. 認識數據

① 缺失值情況(引用)

② 房價曲線(引用)

③ 數據錯誤
state 中 33
build_year 20052009 / 4965…
floor/max_floor 0
price_doc 的outlier

數據集中包含一些明顯的錯誤,對其修正可以得到更好的模型,這也是特徵工程中非常重要的一環。

④ 數據分類
房屋內部數據 full_sq life_sq…
人口數據 full_all young_all work_all…
學校數據 children_school children_preschool…
地理位置數據 以km結尾的各種…
宏觀經濟數據 來自macro.csv

理解數據含義,合理分組,有利於後面的特徵工程。

⑤ 特徵重要性(引用)

認識特徵重要性,對後面選取好的特徵進行特徵工程非常重要。

三、 特徵工程

1. 數據清洗

對錯誤的數據進行修正,合理填補缺失值。

2. 交叉驗證(CV)

① 直接隨機CV 效果不好,因爲帶有時間戳,而且訓練集樣本不均勻
② 用2011-2014年預測2015年的數據作CV 有邏輯,效果不錯
③ 降採樣訓練集 可以使得CV結果和LB分數接近

3. 額外數據集

① 地理位置信息
② 主辦方提供的數據修正

4. 相關性分析(引用)

5. PCA結果(引用)

6. 利用InvestmentType將數據劃分成兩部分,分別使用模型(參考)

這個思想是最終排名第一的比賽者分享的,這兩個類型的房價差異性明顯,用兩個不同的模型來訓練,可以得到更好的結果。

四、 模型融合

1. Stacking(引用)

原理採用基本的stacking模型, 實現在後面的代碼塊中。

基模型採用xgboost。
主要採用了兩種方式,一個訓練是多個不同的模型,包括xgboost、randomForest、KNN、AdaBoost、ExtraTrees等,都是sklearn中的模型,沒有經過嚴格的調參,這個stacking方式提升不大;另一個訓練模型是多個xgboost模型,採用不同的隨機數種子,以及微小的參數調整。

Stacking使得我的模型更加stable,降低overfit的可能。

2. Voting

基於不同的模型提交結果進行加權,同時對預測結果進行一些修正,這個模型是我最終privateLB最高的分數,是0.31478。

這個分數在排行榜可以排到78名。

五、 實驗總結

本次比賽是我第一次參加Kaggle上的比賽,存在很多經驗不足的問題。我主要的學習方式是通過上網查找相關數據挖掘比賽知識以及研究Kaggle上的討論。Kaggle上的大神雲集,他們也樂於分享,我從他們的Kernel中獲益良多。
我個人對數據挖掘比賽很感興趣,這次比賽也是持續在打。比賽期間,對Python在數據挖掘的應用更加熟悉,深刻認識了XGBoost的各個參數的含義,以及如何在Kaggle比賽中用好XGBoost。模型融合只是初步嘗試了一下,還有很多深層模型及實現方法都沒有涉獵,對模型融合的適用面也沒有很好的認識,這是後面學習可以加強的地方。
具體到這次比賽,有很多新的收穫。比如overfit的問題,對於數據集較小的情況,PublicLB可能是不可信的,我們要訓練出一個合理的模型,相信自己的CV結果。當然,一個良好的CV策略對這次比賽也至關重要。
賽後我還是持續關注着Kaggle上的討論,每個人的分享都十分精彩。我覺得對於一個認真投入到比賽的參賽者來說,能在這個階段學習到別人的思想,是非常開心的,同時也收穫巨大,特別對於我這樣的初學者來說,我看到了很多我從未想到的內容。但同時它們又是那麼優雅,以至於會給人一種恍然大悟的感覺。
不得不提的是,我在比賽最後階段犯了個嚴重錯誤,我在選擇提交結果時,沒有檢查,導致選擇了兩個不好的模型提交,也使得我最終排行榜上的名次靠後。這樣低級的錯誤不應該再犯,我會牢記於心。
經過這次比賽,我覺得我未來還會持續關注數據挖掘這個領域,在這個大數據時代下,對數據進行分析,真是有趣又有益。往後的發展目標,是多參加不同類型的比賽,積累比賽經驗。同時要夯實自己的代碼基礎,形成自己的一套數據挖掘風格,最好能有一套屬於自己的pipeline。

六、 參考文獻

A Very Extensive Sberbank Exploratory Analysis
https://www.kaggle.com/captcalculator/a-very-extensive-sberbank-exploratory-analysis

Simple Exploration Notebook - Sberbank
https://www.kaggle.com/sudalairajkumar/simple-exploration-notebook-sberbank

1st place solution
https://www.kaggle.com/c/sberbank-russian-housing-market/discussion/35684

如何在Kaggle中首戰進入前10%
https://dnc1994.com/2016/04/rank-10-percent-in-first-kaggle-competition/

我的代碼GitHub連接
https://github.com/ClimberPG/SberbankRussianHousingMarket

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章