Helve’s Python memo

Pythonを使った機械学習やデータ分析の備忘録

多重共線性(マルチコ)の直観的説明

説明変数が2つ以上ある回帰モデル(重回帰モデル)を作成するとき、相関が強い説明変数があると、推定結果が不安定になる。
この問題は多重共線性、あるいは英語のmulti-collinearityからマルチコと呼ばれる。
本記事では、多重共線性が生じる原因について、数学的な厳密さを省いて直観的に説明する。

目次

多重共線性が発生する原因

3つの変数x_1, x_2, x_3を用いて、変数yを予測する重回帰モデルを考える。
すなわち、回帰式は以下で表される。
 y=ax_1+bx_2+cx_3+d
ただし、a, b, cは回帰係数、dは定数項である。

次に、データが下図のように与えられたとする。
図より、yx_1と相関が高い一方で、yx_2, x_3との相関は非常に低い。
すなわち、yの変化はx_1によってほぼ説明できる。
yの変化とx_1の変化は1:1であるので、回帰係数aは1である。

f:id:Helve:20190921103433p:plain

問題となるのは、相関の高いx_2, x_3の回帰係数b, cである。
x_2の変化をx_3により打ち消せれば、b, cの値は何でも良いので、
(b, c)=(1, -1)でも、極端な話、(b, c)=(100, -100)でも良い。

すなわち、以下の回帰式が得られることもあり得る。
 y= x_1+ 100 x_2 - 100 x_3
(簡単のため、定数項は無視した)

このような係数が大きい回帰式を用いてしまうと、x_2またはx_3にノイズが入った場合、yの推定値が非常に大きく変化してしまう。
以上が、多重共線性により重回帰モデルの推定結果が不安定になる原因である。

多重共線性への対策

多重共線性への対策として正則化 (regularization) が挙げられる。
正則化とは係数の大きさに対して罰則を加え、係数の絶対値をなるべく小さくする方法である。
すなわち、上記の例では係数b, cをともに0に近づけて、推定結果を安定させることができる。

正則化の方法にはいくつか種類があり、リッジ (Ridge) 回帰、ラッソ (Lasso) 回帰、Elastic Netと呼ばれるモデルが良く用いられる。
これらのモデルはscikit-learnに実装されており、以下の記事で使い方を解説している。
Scikit-learnの正則化付き重回帰モデル - Helve’s Python memo

※Adblockが有効の場合やモバイル版ページでは、シェアボタンをクリックできません