Multicollinearity を識別するもうひとつの方法は、Variance Inflation Factor を利用することです。 VIF は、各変数の係数に対して膨張した分散のパーセンテージを示します。 1 (共線性なし) の値から始まり、1-5 の間の VIF は中程度の共線性を示し、5 以上の値は高い共線性を示しています。 高い VIF が許容されるケースとしては、相互作用項、多項式項、ダミー変数(3 つ以上のカテゴリを持つ名目変数)の使用などがある。 相関行列は変数ペア間の相関の同定を可能にし,VIF は多重共線性の総合評価を可能にする. ほとんどの連続変数の相関行列は,さまざまな共線性変数のペアを強調するために,以下に示されている. VIF は、statsmodels パッケージを用いて計算できます。下記のコードブロックは、共線変数が含まれる(左)と除去される(右)のVIF 値を表示します。
# Setting the predictor variables
X_o = df_wdummy]
X_r1 = df_wdummy]#
from statsmodels.stats.outliers_influence import variance_inflation_factorvif = pd.Series()], index=X_o.columns,
name='vif_full')
vif_r = pd.Series()], index=X_r1.columns,
name='vif_collinear_rvmd')
pd.concat(, axis=1)
VIF値は相関行列に対応し、例えば変数ペアNOXとINDUSは相関係数は0を上回る…となる。5(0.61)であり、それぞれのVIF値は5以上である。 共線変数RADとNOXを削除することで、VIFの数値が改善された。 最も高いVIF値に基づいてのみ共線変数を削除することは、次のセクションで詳しく説明するように、最高のパフォーマンスのモデルを構築するための保証された方法ではないのです。
# Baseline variables
X_bl = df_wdummy]
y_bl = df_wdummy# Explore mitigating multi-collinearity
vif_bl = pd.Series()], index=X_bl.columns,
name='vif_bl')X_noTAX = X_bl.drop(,axis=1)
X_noRAD = X_bl.drop(,axis=1)
vif_noTAX = pd.Series()],
index=X_noTAX.columns, name='vif_noTAX')
vif_noRAD = pd.Series()],
index=X_noRAD.columns, name='vif_noRAD')
pd.concat(, axis=1)
While it seems to drop the TAX variable based on VIF is better.While you like to drop the TAX variable in VIF, 慎重なアプローチは、修正R2乗メトリック(予測変数の数で調整され、次に追加された変数が偶然に予想されるよりもモデルを改善する場合にのみメトリックが増加します)を介してチェックすることです。
# Without TAX
model = sm.OLS(y, sm.add_constant(X_noTAX)).fit()
print_model = model.summary()
print(print_model)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)
高い修正R-Readyから、RADが高い。二乗の図。 このモデルは、RAD変数を削除することで、より良いパフォーマンスを発揮することが推測されます。 多重共線性の問題が解決されたので、次のステップは、モデルのパフォーマンスを潜在的に高めるために、相互作用項の追加を検討することである。