多元共線性檢測 -- 方差膨脹因子(Python 實現)

👆 本文已在公衆號 “數據分析與商業實踐” 首發,關注一下~,更多商業數據分析案例等你來撩

在這裏插入圖片描述

注:相關數據源和超詳細的代碼(python,Jupyter Notebook 版本 + 詳細註釋)已經整理好,在 “ 數據分析與商業實踐 ” 公衆號後臺回覆 “ vif ” 即可獲取。

在這裏插入圖片描述
探索性數據分析、數據清洗與預處理和多元線性迴歸模型構建完畢後,爲提升模型精度及其穩健性,還需進行許多操作。方差膨脹因子便是非常經典的一步,原理簡單,實現優雅,效果拔羣。


​原理趣析
多重線性迴歸模型的主要假設之一是我們的預測變量(自變量)彼此不相關。我們希望預測變量與反應變量(因變量)相關,而不是彼此之間具有相關性。如言情劇中的 A 喜歡B,B 卻喜歡 C,結果發現 C 其實喜歡 A;而 B 的一舉一動很有可能影響着 A,所以當我們把 B和C 作爲自變量來預測因變量 A 的行爲時,這兩個自變量之間的相互影響就會有點讓人難受。

在這裏插入圖片描述


公式解釋
方差膨脹因子(Variance Inflation Factor,以下簡稱VIF),是指解釋變量之間存在多重共線性時的方差與不存在多重共線性時的方差之比。

在這裏插入圖片描述
上圖公式可以看出在方差膨脹因子的檢測中:

  • 每個自變量都會有一個膨脹因子值VIF_i,最後根據值的大小來選擇是否刪減

  • Ri^2 表示相關性,是誰跟誰的相關性呢?是自變量中的某一變量與除它外剩餘的自變量進行多元線性迴歸,取回歸結果,即模型精度來作爲這個變量與剩餘自變量的相關性。 聽起來可能有點繞,這裏舉一下實例(用 “ 面積、臥室數量和浴室數量 ” 作爲自變量來預測房價,在進行自變量的方差膨脹因子的檢測時,面積、臥室數和浴室數輪流做單獨的因變量,剩下的兩個變量作爲自變量,來看看這三個自變量中那個變量對其餘兩個變量的解釋性高)

  • Ri^2 越大,如已經到了 0.9,那分母就很小,vif_i 的值就等於 10,即表示這個自變量已經同時解釋了另外的某個或多個自變量,存在多元共線性,可以考慮刪除一些自變量。

VIF越大,顯示共線性越嚴重。經驗判斷方法表明:當0<VIF<10,不存在多重共線性;當10≤VIF<100,存在較強的多重共線性;當VIF≥100,存在嚴重多重共線性。


效果實現
本文將使用 Python 數據分析利器 Jupyter Notebook 實現。雖然前人大神們已經有了完整的實現步驟 https://etav.github.io/python/vif_factor_python.html

但他們的實現方法還是會輕微複雜,筆者這裏提供一個自寫函數的方法
在這裏插入圖片描述
使用自寫函數來檢測各自變量的方差膨脹因子
在這裏插入圖片描述
發現變量 bedrooms 和 bathrooms 的方差膨脹因子都超過了 10。其實方差因子通常成對出現,通常較大的兩個方差膨脹因子表明這兩個變量自身本來就具有高度相關性,即這兩個變量一起才解釋一種東西,可以考慮去除一個自己並不怎麼感興趣的變量即可,也回到了我們最開始的目的:多重線性迴歸模型的主要假設之一是我們的預測變量彼此不相關,我們希望預測變量與反應變量相關,而不是彼此之間具有相關性。

bedrooms 和 bathrooms 的方差膨脹因子異常也能從上一張 ols 建模結果的圖中看到端倪。將變量之間的相關性以熱力圖的形式呈現後,發現 ols 建模的結果是 bedrooms 每增加一個單位,房價還減少 -2925.8063 ???而熱力圖則反映出bedrooms 與房價呈現比較強的正相關關係。

在這裏插入圖片描述
所以我們可考慮去掉方差膨脹因子最大的變量 bedrooms,後再進行一次 ols 建模
在這裏插入圖片描述
對比兩次建模結果,發現其實刪除某個方差膨脹因子異常的變量後建模結果也不變,但我們需要注意的是:具體問題還得結合具體業務來分析,有時候儘管出現了多元共線性,但也還是需要保留方差膨脹因子異常的變量。

注:相關數據源和超詳細的代碼(python,Jupyter Notebook 版本 + 詳細註釋)已經整理好,在 “ 數據分析與商業實踐 ” 公衆號後臺回覆 “ vif ” 即可獲取,超多商業數據分析操作與案例等你來撩

精彩回顧

個人爆發式成長

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