? 關注一下~,更多商業資料分析案例等你來撩

前言
建構多元線性回歸模型時,如果能夠充分的使用已有變量,或将其改造成另一種形式的可供使用的變量,将在一定程度上提高模型精度及其泛化能力。因為資料集中的名義變量(或叫類别變量)是無法直接使用的,是以虛拟變量(又叫啞元變量)的設定便是非常經典且必須掌握的一步,原理簡單,實作優雅,效果拔群。
原理趣析
至于虛拟變量的官方解釋和值得參考的短小精悍的論文集和虛拟變量的深度應用及拓展,筆者都已經打包放在了背景,文末檢視關鍵字回複即可。因為虛拟變量的原理其實非常簡單,是以如何有趣且快速的了解原理并應用于實際的 Python 程式才是本文的側重點。
将無法直接用于模組化的名義變量轉換成可放入模型的虛拟變量的核心就短短八個字:四散拆開,非此即彼。下面用一個隻有4行的微型資料集輔以說明。
從上表中,不難發現:
- 該名義變量有 n 類,就能拆分出 n 個名義變量
- 巧妙的使用 0 和 1 來達到用虛拟變量列代替原名義變量所在類别
接下來要做的就是将生成的虛拟變量們放入多元線性回歸模型,但要注意的是:轉化後的虛拟變量們需要舍棄一個,才能得到滿秩矩陣。具體原因和有關線性代數的解釋可以檢視筆者打包好的論文,我們可以了解為,當該名義變量可劃分為 n 類時,隻需要 n-1 個虛拟變量就已足夠獲知所有資訊了。該丢棄哪個,可根據實際情況來決定。
而至于使用虛拟變量的模組化結果,可繼續往下看。
效果實作
資料讀入
屬性說明
- neighborhood:所在街區(A,B,C,D)
- area:房屋面積
- bedrooms:卧室面積
- bathrooms:浴室面積
- style:房屋類型(鄉間小屋/維多利亞/閣樓式)
- price:房屋價格(美元)
statsmodels 的 ols 函數(最小二乘法)進行多元線性回歸模組化
為原資料集的某名義變量添加虛拟變量的步驟:
- 抽出希望轉換的名義變量(一個或多個)
- Python pandas 的 get_dummies 函數
- 與原資料集橫向拼接
再次進行模組化操作,發現模型精度得到了很大提升
筆者特地沒有将類别變量 style 也轉成虛拟變量,為的就是合理留白,讓讀者自行嘗試并體會 “驚喜” 結果。
結果說明
是以最終的模組化結果為:房屋價格 price = 344.39×area + bedrooms×5609.34 - bathrooms×4900.94 - A×77.9 + B×524381.71 - 203072.2,模型精度為 0.919.
等式結果中,截距項 Intercept 和 area,bedrooms,bathrooms 等項都還好了解,A,B 這兩個虛拟變量項可能會給了解帶來困難。其實根據原理趣析部分的表格來看,如果房屋在C區,那等式中 A 和 B 這兩個字母的值便是 0,是以這便引出了非常重要的一點:使用了虛拟變量的多元線性回歸模型結果中,存在于模型内的虛拟變量都是跟被删除掉的那個虛拟變量進行比較。是以這個結果便表示在其他情況完全一樣時(即除虛拟變量外的項) A 區的房屋比 C 區低 77.9 美元,B 區則比 C 區貴524381.7 美元。當然我們也可以畫個箱線圖來檢視與檢驗,發現結果正如模型中 A 與 B 的系數那般顯示。
注:相關資料源和超詳細的代碼(python,Jupyter Notebook 版本 + 詳細注釋)已經整理好,在 “ 資料分析與商業實踐 ” 公衆号背景回複 “ 虛拟變量 ” 即可擷取。
還有,雖然模型精度比較理想,但在使用 ols 進行模組化時,結果表格下方其實還顯示了如下的 Warnings(警告),表明可能存在比較強的多元共線性問題,這也是提升多元線性回歸模型精度和泛化性的非常經典且簡單的操作,篇幅原因,就放在文末連結了?
多元共線性檢測 -- 方差膨脹因子