【論文解説】多重共線性は回帰分析にどのような影響を与えるのか

こんにちは、青の統計学です。

今回は、多重共線性への理解を深め、対処などを考察するために論文を読んでみました。

多変量解析をするとなると、大抵はマルチコ(多重共線性)の壁にあたります。

そこで正確な理解をした方が良いと感じ、いくつかのリサーチペーパーを読みました、

以下の論文を紹介いたします。

①Multicollinearity and Regression Analysis 

(Jamal I. Daoud 2017 J. Phys.: Conf. Ser. 949 012009)


②Misconceptions about multicollinearity
in international business research: Identification, consequences, and remedies

(Journal of International Business Studies (2020) 51, 283–298)

多重共線性(Multicollinearity)

多重共線性とは、説明変数同士に相関が見られる現象です。

冪乗項や交互作用項などを説明変数に入れて必然的に生じる多重共線性(structual multicollinerity)と観測されたデータに存在している説明変数間に生じる多重共線性(data based multicollinearity)の2種類に分かれますが、大抵後者が問題視されますね、

さて、統計学の観点では、回帰を目的変数に対する説明変数の影響度を解釈することを目的としているため、マルチコは避けるべき事象として扱われます。

なぜなら、マルチコがあると説明変数の回帰係数の符号が逆転したり、極端な値を取ったりするからです。

一部のモデルでは、多重共線性がないことが仮定されています。

例えば、「多重共線性がないこと」は、重回帰モデルで最小二乗法を行う4つの仮定のうちの1つです。

1:X_iとY_iは、独立かつ同一な分布に従う。

2:E(u_i | X_1i,X_2i,...,X_ki)=0が成り立つ。(外生性)

3:説明変数X_iと誤差項u_iは4次までのモーメントに従う。(異常値がない)

4:多重共線性がないこと。
→説明変数同士に線形関係は見られない。

数式的な定義としては、以下になります。

全てのa_iが0である場合を除いて、以下の事柄が成り立つ場合には多重共線性があると認められます。

$$a_0+a1X_{1i}+a_2X_{2i}+…+a_kX_{ki}≠0$$

方程式を満たす組み合わせがないということです。

では、多重共線性によってどのような問題が生じるのでしょうか。

以下が挙げられます。

・回帰係数の標準誤差を大きくしてしまう。

→標準誤差が大きくなることで、実現される統計量が上がってしまい、有意であるはずの係数が有意水準によっては有意ではなくなります。

(*逆説的に、回帰係数の標準誤差が大きいと説明変数に多重共線性が生じている場合が多いです。)

また、他の独立な説明変数の標準誤差が大きくなることは認められていません。

つまり、高い標準誤差と高いp値、低いt値になってしまうということです。

t値とp値に関しては、以下のコンテンツをご覧ください。

【t検定】t統計量(t値)の求め方

【仮説検定】p値をゼロから解説(第一種の過誤,第二種の過誤,検出力)

・相関係数が高い説明変数X_1とX_2がある場合、機械学習をした場合には、相関が高い説明変数の評価がブレることになります。

→つまりモデルの解釈を誤った方向に導いてしまいます。

②の論文でも、多くの論文で多重共線性の弊害を語る際には「分散が膨れ上がること」と「回帰係数がぶれてしまうこと」を主要な問題にしています。

→多くの計量経済学の文献では、「サンプルサイズを増やす」ことにより解決できる問題として多重共線性を取り上げていますが、

特に社会科学系のデータはそう簡単に増やすことはできないため、未だ議論が尽きないという訳です。

ここまで統計学でのマルチコの捉え方を説明してきましたが、機械学習の観点では少し捉え方が異なります。

機械学習の中でもモデルの予測精度に関心がある場合、説明変数の影響度合いには注意をそれほど払いません。

→kaggleのコンペでも交互作用項を多く作り、GBDTで後から説明変数を削るなどのアプローチがあるように、モデルの中の多重共線性は説明力を低下させるものの、目的変数の予測の精度には影響を与えないと考えられています。

→ただし未知のデータは別です。

多重共線性の見つけ方

見つけ方としては、ある特徴量を入れた場合と入れない場合で、

相関する特徴量のt値(t value)の値が極端に小さくなっている場合には、多重共線性が認められます。

なぜなら、t値の分母は標準誤差であり、標準誤差が大きくなればなるほど、t値は小さくなるからです。

$$t value = {\frac{{\hat{β1}-β1}} {SE({β1})} }$$

突き詰めると、標準誤差は標準偏差をサンプル数の平方根で割ったものなので、

「共線性があると、予測値のばらつきが増え、解釈が外れやすい」と認識すると良いでしょう。

$$SE = {\frac{SD}{\sqrt{n}}}$$

標準誤差とt値については以下をご覧くださいませ。

【t検定】t統計量(t値)の求め方

【Standard Error】標準誤差を例題を通して解説。

多重共線性に関しては、以下のコンテンツでも扱っております。

【説明変数の相関】多重共線性を解説します。

他にも、回帰係数を見た結果、代数的符号が事前に推定されているものと異なる場合には多重共線性が原因で、説明変数の評価が誤っている場合があります。

例えば、「気温」という目的変数に対して、日照量という説明変数の回帰係数が負の数だとおかしいと感じると思います。なぜなら、常識的には日照量が増えれば増えるほど気温は上がっていくはずなので。



引用:The algebraic signs of the estimated coefficients do not conform to the prior expectation.

多重共線性の基準について

そもそも、特徴量同士に相関がない(=直行(orthogonal)している)方が稀です。

では、多重共線性の評価指標や、その指標がどういった閾値を超えると共線性が認められると判断できるのでしょうか。

VIF(variance inflation factor)

一つの指標として、VIFが提唱されています。

1から決定係数の平方を引いて、逆数をとった値がVIFです。

Rとは他の共変量に対する該当する特徴量の回帰における決定係数です。この時、目的変数は回帰に含めません。

$$VIF = {\frac{1}{1-R_j^2}}$$

この値が10以上だと多重共線性が認められると一般には言われていますが、論文では5を超えると強い相関が認められると記されています。

VIF valueconclusion
VIF = 1not correlated
1 < VIF < 5moderately correlated
VIF > 5highly correlated

このVIFの基準は論文によって様々で、3以上で共線性を認めるものもあれば、20以上でないと共線性を認めない論文も見られます。

ただ、多重共線性について言及しているIB論文(international Business )400件のうち、150件はVIFについてなんらかの計算を行っていることから、評価指標としての採用率は高めのようです。

VIF|CODE

ここではVIFを計算するコードを載せています。

各カラムの1行下(1行目ですね)に特徴量のVIFを載せるプログラムです。

乳がんデータという特徴量が多めのデータセットを使っているためか、かなりVIFが大きいです。

# Import libraries
import pandas as pd
from sklearn.datasets import load_breast_cancer
import numpy as np
from statsmodels.stats.outliers_influence import variance_inflation_factor
data_breast_cancer = load_breast_cancer()
df_target = pd.DataFrame(data_breast_cancer["target"], columns=["target"])
df_data = pd.DataFrame(data_breast_cancer["data"], columns=data_breast_cancer["feature_names"])
df = pd.concat([df_target, df_data], axis=1)

# Get column names
columns = df.columns

# Create VIF dataframe
vif_data = pd.DataFrame()

# Calculate VIF for each column
for i in range(0,len(columns)):
    vif = variance_inflation_factor(df[columns],i)
    vif_data.loc[0,columns[i]] = vif

# View VIF dataframe
vif_data
targetmean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetryworst radiusworst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimension
010.88455863955.019898251.09367258213.3498611320.282793393.418392200.983909158.033586155.053368184.7125029993.710616343.4194774498.1962821165.384639375.640625132.91870486.754853148.773818219.621611427.782984

多重共線性の対処法について

論文で提唱されている対処法としては、

①主成分分析により、特徴量を変える

→特徴量の解釈が難しくなるというデメリットがある

主成分分析は以下のコンテンツで実装しています。

【共線性解決】pythonで主成分分析をやってみた

②相関のある一方の特徴量を消す

回帰分析での多重共線性の影響を減らす方法の一つとして、ridge回帰やlasso回帰が挙げられます。

損失関数に正則化項を加え、著しく回帰係数が大きくなる問題を避けています。

$$(y – β_0 + β_1X_1 + .. +β_nX_n)^2 + α{\sum_{I=1}^{N}β_i^2}$$

リッジ回帰については、以下で解説しております。

【python】Ridge(リッジ)回帰で多重共線性を解決する話

多重共線性へのいくつかの誤解について

②の論文では、多重共線性に対する最も頻繁に行われている対処法として上記の「相関のある説明変数を削除する」ことを認めつつも、

同時に省略された変数バイアスのリスクを増加させることも懸念しています。

多重共線性を回避するために、共線性のある特徴量の一方を減らすことでもう一方の標準誤差が減るのは当然ですが、

偽有意な係数を導く可能性があり、問題があることは否定できないということです。

先ほど多重共線性により、「有意であるはずの係数が有意でなくなる」と説明しましたが、それが真に正しいかどうかは別の問題です。

そのため、予測された回帰係数に問題があるのは、共線性があるためではなく、安易に説明変数を削除した結果であるとも言えるということです。

また、多重共線性だけの問題だけではなく、単にサンプルサイズが小さすぎることによる問題を無視できません。

②の論文での主な主張としては、

・多重共線性は標準誤差を大きくさせることには同意

・標準誤差が大きくなることは、妥当性が下がるわけではなく、信頼性を過小評価するというだけで計量経済学的な問題はない

・むしろ、安易に共線性のある変数を除くことによる、誤った(変数除去によりバイアスがかかった)回帰結果が有意になることが問題である

・なので、共線性のある説明変数は残しておくほうが望ましい

・ただし、共線性のある説明変数の係数の解釈が難しいことには同意する

となります。

②の論文では、多重共線性があると回帰係数がブレるという認識に対して、データを用いて「説明変数を省いても省かなくても回帰係数は変わらない」と示しています。

回帰係数が変わる場合は、そもそものモデルの仕様が間違っているという主張です。

衝撃的な内容でした。

共線性のある説明変数に対しては、機械的な処理を施すのではなく、一つずつの属性とデータに対する背景知識を用いて、丁寧に処理することが望ましそうです。

FOLLOW ME !