Python の分散インフレ係数

Zeeshan Afridi 2023年6月21日
  1. Python の分散インフレ係数
  2. 影響力のある観察結果の検出における VIF のパフォーマンス
  3. Python で分散インフレ係数 (VIF) を計算する
Python の分散インフレ係数

この記事では、分散膨張係数 (VIF) と、影響力のある観察結果を検出する際のそのパフォーマンスについて説明し、Python で VIF を使用するために statsmodels を使用する方法を示します。

Python の分散インフレ係数

分散膨張係数 (VIF) は、重回帰モデルの予測変数間の共線性の量を測定します。 また、残差の分散に対する指定された予測変数の分散の比率として計算されます。

1 の分散膨張係数は、共線性がないことを示します。 対照的に、1 より有意な VIF は、共線性が存在することを示唆しています。 VIF を使用して、特定の予測変数を重回帰モデルに含めることが保証されているかどうかを評価できます。

特定の予測変数の VIF が高い場合、その予測変数がモデル内の他の予測変数と重複していることを示している可能性があります。 モデルの適合に影響を与えずに削除することもできます。

適切な分散膨張係数 (VIF) は、特定のコンテキストとデータ セットによって異なります。 ただし、一般に、VIF は、データの多重共線性に関する潜在的な問題を特定するための貴重なツールになる可能性があります。

影響力のある観察結果の検出における VIF のパフォーマンス

回帰分析で影響力のある観測を検出するには、いくつかの方法があります。 標準的な方法の 1つは、分散インフレ係数 (VIF) を計算することです。

VIF は、モデル内の他の予測変数との共線性による予測変数の分散量を測定します。 高い VIF は、他の予測因子がモデル内の予測因子に大きな影響を与えていることを示します。

したがって、回帰モデルは各予測子の VIF を計算できます。 1 の VIF は、他の予測子がモデル内の予測子に影響を与えないことを示します。

1 より有意な VIF は、他の予測因子がモデル内の予測因子に影響を与えることを示唆しています。 VIF は、カテゴリ予測変数間の共線性を検出するのに特に役立ちます。

VIF は、回帰モデルで最も影響力のある予測変数を特定できます。 ただし、VIF は共線性の尺度にすぎず、予測子がモデルに不可欠であることを必ずしも示すわけではないことを覚えておく必要があります。

Python で分散インフレ係数 (VIF) を計算する

Python で VIF を使用するには、statsmodels ライブラリを使用できます。 まず、linear_model.LinearRegression クラスを使用して VIF が計算されます。

最初に線形回帰モデルをデータに当てはめ、次に交互作用項を使用して新しい線形回帰モデルを作成します。 その後、各モデルの VIF を計算して 2つのモデルを比較します。

交互作用項が含まれているモデルの VIF は高くなり、交互作用項が多重共線性を引き起こしていることを示します。 VIF は、モデル内の予測変数ごとに計算され、モデルの全体的な適合度を決定するために使用されます。

VIF は、次の式を使用して計算できます。

VIF = \frac{1}{(1-R^{2})}

ここで、R^2 は予測変数の決定係数です。

VIF は通常、線形回帰モデルの多重共線性を評価するために使用されます。 ただし、ロジスティック回帰やポアソン回帰など、他の回帰モデルでも使用できます。

VIF を使用して、モデルの全体的な適合を評価し、予測変数を特定できます。 また、予測変数は、モデル内の他の予測変数と高度に相関しています。

統計では、すべてのデータ ポイントには分散と呼ばれる誤差があります。 ただし、データ セットの競合は、データ セットがどの程度変動するかを示す最良の尺度ではありません。

分散膨張係数 (VIF) は、回帰分析における多重共線性の影響の統計的尺度です。 VIF = (λ 1 / λ 2 ) – 1、ここで、λ 1 は回帰モデルの変数の VIF、λ 2 は 2 番目の回帰モデルの変数の VIF です。

VIF > 10 は、独立変数間の多重共線性を示します。 以下の Python コード例で VIF を学びましょう。

コード例:

import numpy as np
import pandas as pd
import seaborn as sns
import statsmodels.api as sm
import statsmodels.tools.tools as smt
import statsmodels.stats.outliers_influence as smo

hp = sm.datasets.get_rdataset(dataname="HousePrices", package="AER", cache=True).data
print(hp.iloc[:, 0:5].head(3))

ivar = hp.iloc[:, 1:5]
print(ivar.head(3))

ivarc = smt.add_constant(data=ivar, prepend=False)
vif_lotsize = smo.variance_inflation_factor(exog=ivarc.values, exog_idx=0)
print(vif_lotsize)

出力:

   price     lotsize  bedrooms    bathrooms  stories
0  42000.0     5850         3          1        2
1  38500.0     4000         2          1        1
2  49500.0     3060         3          1        1
   lotsize  bedrooms  bathrooms  stories
0     5850         3          1        2
1     4000         2          1        1
2     3060         3          1        1
1.047054041442195

私たちが学んだように、利用可能な VIF 計算ツールは数多くあります。 さらに、VIF は、2つの変数間の関係を理解するのに役立つ多くの指標の 1つです。

VIF は理論的な概念ではなく実用的な概念であることを知っておくことが不可欠です。 多重共線性が問題かどうかを判断するのは VIF 値です。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn