Kaggle-House Prices: Advanced Regression Techniques房價預測實作

Elven Hu
5 min readJul 12, 2020

--

這裡我們來介紹kaggle競賽中的房價預測的題目,以及我們的實作過程跟結果。本文章是參考以下網址的作者來當作本篇文章的實作內容https://ithelp.ithome.com.tw/articles/10224884

房價預測顧名思義就是要根據data給的各種房屋狀況資訊來預測出房子的價格會是多少。

實作的部分,首先先到網址https://www.kaggle.com/c/house-prices-advanced-regression-techniques/overview下載本次實作所會需要的data。總共會有4個檔案

1.data_description.txt:資料的描述
2.sample_submission.csv:要繳交回去查看test的預測價格正確程度
3.test.csv:測試集
4.train.csv:訓練集

開始寫code,先匯入所需要的套件以及資料集。

我們可以先看看我們的data長怎樣以及各個欄位的型態

當中我們可以看到屬性Id,Id這個屬性在這裡只是被用來表示是第幾筆房屋的資料,在我們的training的過程中是不需要在乎是第幾個的,所以這裡可以把它拿掉

而當中的其中一個屬性Saleprice則是房屋的價錢,是我們這次要預測的數值,也就是data中的Label。

再來我們要開始對data做分析,這裡我們打算利用data間的相關係數來去判斷各個特徵屬性對於Saleprice的關係。

但在那之前我們觀察到,所有的特徵屬性並非全都是數字,有部分是由字串(String)所組成。因此今天我們若要把這些特徵屬性也拿去做相關係數的計算的話,必須先將這些字串轉為數字的型態,所以這裡我們會先用Label Encoding讓他們進行轉換

找出data中那些colum不是由數字組成的

再用Label Encoding將他們轉換

現在我們可以開始來計算各個特徵屬性對Saleprice的相關係數了。這裡我們利用seaborn這個套件來幫助我們對資料進行觀察。

當中,我們只找和Saleprice有比較高相關係數(取絕對值後>0.6)的特徵屬性來拿去訓練我們的模型(model)

將相關係數小的把他從data中移掉

並且順便也將SalePrice單獨取出來當作是Label

接下來,我們用train_test_split切割了驗證資料(validation data)幫助我們對於模型的評估修正,讓我們能夠獲得更好的準確率。

我們將訓練資料(train data)和驗證資料(validation data)都先標準化

再來我們要開始來建立我們的模型(Model),這裡用Keras來建立我們的神經網路架構

最後就開始訓練我們的模型啦。其中,這裡用了一個技巧叫回調函數(Callbacks),透過回調函數可以讓我們在訓練的過程中保留著最好的模型(model)。

訓練完後我們可以查看loss的過程

總算,我們可以將我們已經訓練好的model來拿去預測測試集(test data)了。不過因為我們在做model訓練時,輸入只有相對係數高的那些行,所以如果這時候做測試集時若是輸入不一樣的shape會造成Error,因此我們需要對test data也做只留下和Saleprice有比較高相關係數(取絕對值後>0.6)的特徵屬性這個動作

test data中的空值(nan)我們順便用了平均值來代替它

將test data標準化

載入先前儲存的mode來預測看看測試集的房價

將預測資料打包成csv檔

提交至kaggle得出的排名以及分數(score=Root Mean Squared Logarithmic Error)

完整程式碼

--

--