【論文解説】多重共線性は回帰分析にどのような影響を与えるのか
こんにちは、青の統計学です。
今回は、多重共線性への理解を深め、対処などを考察するために論文を読んでみました。
多変量解析をするとなると、大抵はマルチコ(多重共線性)の壁にあたります。
そこで正確な理解をした方が良いと感じ、いくつかの論文を読みました、
①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値になってしまうということです。
・相関係数が高い説明変数\(X_1\)と\(X_2\)がある場合、機械学習をした場合には、相関が高い説明変数の評価がブレることになります。
→つまりモデルの解釈を誤った方向に導いてしまいます。
補足|p値
ここでは、p値について説明をしております。
わかる方は飛ばしてOKです。
p値は、観測された統計量が帰無仮説 $${H_0}$$のもとでどれだけ起こりにくいかを表しています。
手順を追ってみてみましょう。
①統計量の選択
あるデータに対して、統計的検定の対象となる統計量 $${T}$$を計算します。
たとえば、2つのグループ間で平均値に差があるかどうかを検定する場合、t統計量を用いますね。
$$T=\frac{\overline{X}_1-\overline{X}_2}{S_p\sqrt{{n_1}^{-1}-{n_2}^{-1}}}$$
ここで、\{\overline{X}_1\)と \(\overline{X}_2\) はそれぞれのグループの標本平均、\(n_1\)と \(n_2\) はサンプルサイズ、\(S_p\)はプール(加重平均という理解でOK)された標準偏差です。
②p値の計算
t統計量を用いて、帰無仮説のもとでその値またはそれ以上に極端な値が発生する確率(p値)を計算します。
t統計量が従う確率分布(t分布)から、以下のように計算します。
$${p=P(T\ge |t| | H_0)}$$
最後に算出したp値を解釈します。
$${p<\alpha}$$
帰無仮説 \(H_0\) が真である場合に観測された結果が得られる確率が\(\alpha\)以下であるとき、統計的に有意とされ、帰無仮説を棄却します。通常、\(\alpha\)は \(0.05\) や\(0.01\) と設定されます。
*事前に設定せず、p値を超える有意水準を事後的に設定したり、p値が低くなるまで何度も検定をしたり、などの行為は研究不正となりますのでご注意ください。
最後にp値に関する注意するポイントは二つあります。
- p値 ≠ 確率:とてもややこしいのですが、p値は帰無仮説が「真である確率」ではなく、「帰無仮説が真であると仮定した場合に観測された結果が得られる確率」を表します。
- p値と実質的な意義:p値が小さいからといって、その効果が実質的に重要であるとは限りません。効果(effect size)も同時に評価することが重要です。
さて、多重共線性の説明に戻ります。
②の論文でも、多くの論文で多重共線性の弊害を語る際には「分散が膨れ上がること」と「回帰係数がぶれてしまうこと」を主要な問題にしています。
→多くの計量経済学の文献では、「サンプルサイズを増やす」ことにより解決できる問題として多重共線性を取り上げていますが、
特に社会科学系のデータはそう簡単に増やすことはできないため、未だ議論が尽きないという訳です。
ここまで統計学でのマルチコの捉え方を説明してきましたが、機械学習の観点では少し捉え方が異なります。
機械学習の中でもモデルの予測精度に関心がある場合、説明変数の影響度合いには注意をそれほど払いません。
→kaggleのコンペでも交互作用項を多く作り、GBDTで後から説明変数を削るなどのアプローチがあるように、モデルの中の多重共線性は説明力を低下させるものの、目的変数の予測の精度には影響を与えないと考えられています。
→ただし未知のデータは別です。
多重共線性の見つけ方
見つけ方としては、ある特徴量を入れた場合と入れない場合で、
相関する特徴量のt値(t value)の値が極端に小さくなっている場合には、多重共線性が認められます。
なぜなら、t値の分母は標準誤差であり、標準誤差が大きくなればなるほど、t値は小さくなるからです。
$$t value = {\frac{{\hat{\beta_1}-\beta_1}} {SE({\beta_1})} }$$
突き詰めると、標準誤差は標準偏差をサンプル数の平方根で割ったものなので、
「共線性があると、予測値のばらつきが増え、解釈が外れやすい」と認識すると良いでしょう。
$$SE = {\frac{SD}{\sqrt{n}}}$$
標準誤差とt値については以下をご覧くださいませ。
多重共線性に関しては、以下のコンテンツでも扱っております。
他にも、回帰係数を見た結果、代数的符号が事前に推定されているものと異なる場合には多重共線性が原因で、説明変数の評価が誤っている場合があります。 例えば、「気温」という目的変数に対して、日照量という説明変数の回帰係数が負の数だとおかしいと感じると思います。なぜなら、常識的には日照量が増えれば増えるほど気温は上がっていくはずなので。 引用: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 value | conclusion |
VIF = 1 | not correlated |
1 < VIF < 5 | moderately correlated |
VIF > 5 | highly 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
target | mean radius | mean texture | mean perimeter | mean area | mean smoothness | mean compactness | mean concavity | mean concave points | mean symmetry | … | worst radius | worst texture | worst perimeter | worst area | worst smoothness | worst compactness | worst concavity | worst concave points | worst symmetry | worst fractal dimension | |
0 | 10.884558 | 63955.019898 | 251.093672 | 58213.349861 | 1320.282793 | 393.418392 | 200.983909 | 158.033586 | 155.053368 | 184.712502 | … | 9993.710616 | 343.419477 | 4498.196282 | 1165.384639 | 375.640625 | 132.918704 | 86.754853 | 148.773818 | 219.621611 | 427.782984 |
多重共線性の対処法について
論文で提唱されている対処法としては、
①主成分分析により、特徴量を変える
→特徴量の解釈が難しくなるというデメリットがある
主成分分析は以下のコンテンツで実装しています。
②相関のある一方の特徴量を消す
回帰分析での多重共線性の影響を減らす方法の一つとして、ridge回帰やlasso回帰が挙げられます。
損失関数に正則化項を加え、著しく回帰係数が大きくなる問題を避けています。
$$(y – β_0 + β_1X_1 + .. +β_nX_n)^2 + α{\sum_{I=1}^{N}β_i^2}$$
リッジ回帰については、以下で解説しております。
【python】Ridge(リッジ)回帰で多重共線性を解決する話
多重共線性へのいくつかの誤解について
②の論文では、多重共線性に対する最も頻繁に行われている対処法として上記の「相関のある説明変数を削除する」ことを認めつつも、
同時に省略された変数バイアスのリスクを増加させることも懸念しています。
多重共線性を回避するために、共線性のある特徴量の一方を減らすことでもう一方の標準誤差が減るのは当然ですが、
偽有意な係数を導く可能性があり、問題があることは否定できないということです。
先ほど多重共線性により、「有意であるはずの係数が有意でなくなる」と説明しましたが、それが真に正しいかどうかは別の問題です。
そのため、予測された回帰係数に問題があるのは、共線性があるためではなく、安易に説明変数を削除した結果であるとも言えるということです。
また、多重共線性だけの問題だけではなく、単にサンプルサイズが小さすぎることによる問題を無視できません。
②の論文での主な主張としては、
・多重共線性は標準誤差を大きくさせることには同意
・標準誤差が大きくなることは、妥当性が下がるわけではなく、信頼性を過小評価するというだけで計量経済学的な問題はない
・むしろ、安易に共線性のある変数を除くことによる、誤った(変数除去によりバイアスがかかった)回帰結果が有意になることが問題である
・なので、共線性のある説明変数は残しておくほうが望ましい
・ただし、共線性のある説明変数の係数の解釈が難しいことには同意する
となります。
②の論文では、多重共線性があると回帰係数がブレるという認識に対して、データを用いて「説明変数を省いても省かなくても回帰係数は変わらない」と示しています。
回帰係数が変わる場合は、そもそものモデルの仕様が間違っているという主張です。
衝撃的な内容でした。
共線性のある説明変数に対しては、機械的な処理を施すのではなく、一つずつの属性とデータに対する背景知識を用いて、丁寧に処理することが望ましそうです。