多重共線性の検出

多重共線性とは?

多重共線性(multicollinearity)は、回帰分析において説明変数同士が高い相関関係を持つ状態を指します。これによって、回帰係数の推定値が不安定になったり、モデルを解釈するのが難しくなるという問題が起きます。
例えば、住宅価格を予測するモデルにおいて、土地面積と建物面積が非常に高い相関を持っている場合に多重共線性が存在すると、どちらの変数が住宅価格にどの程度影響を与えているのかを判断するのが難しくなります。

この記事では、Kaggleにある下記のデータセットを利用して多重共線性の検出を行なってみたいと思います。

このデータセットは2006年から2010年にかけて、アイオワ州エイムズで住宅用不動産が販売された記録が含まれており、住宅の販売価格を予測する問題に利用されています。

どのように多重共線性の検出をするか?

多重共線性があるかどうかの検出方法としては、相関行列の確認、VIF(Variance Inflation Factor)という係数を確認する方法があります。

相関行列の確認

まずは相関行列から確認をしてみます。

import pandas as pd

df = pd.read_csv('train.csv')
numeric_features = df.select_dtypes(include=['number'])

corr = numeric_features.corr()
corr.style.background_gradient(cmap='coolwarm')

データを読み込み、相関行列を可視化してみます。

この相関行列から相関が高いものについては、多重共線性が存在する可能性が高く、検討が必要になります。
一般的な基準としては、0.7以上で強い相関があるため、検討が必要とされています。

VIF(Variance Inflation Factor)

次にVIFを算出してみます。VIFの算出にはstatsmodelsライブラリのvariance_inflation_factorを利用します。

from statsmodels.stats.outliers_influence import variance_inflation_factor

numeric_features = numeric_features.dropna()

vif = pd.DataFrame()
vif["features"] = numeric_features.columns
vif["vif"] = [variance_inflation_factor(numeric_features.values, i) for i in range(numeric_features.shape[1])]

vif

一般的にVIFが10以上で多重共線性が非常に高く、回帰分析の結果が不安定になる可能性が高いとされています。

多重共線性への対処

多重共線性への対処については特徴量選択、主成分分析(PCA)を使用して次元削減を行うという対処が検討できます。

これらについては、また別の記事にて試してみたいと思います。