モデリング●●●●●

多重共線性

Multicollinearity ・ たじゅうきょうせんせい

説明変数どうしが強く相関し、回帰係数の推定が不安定になる現象

✦ 30秒で試す — 航海一つひとつは符号まで揺れるのに、合計はぴたりと安定するx2を外してx1だけで推定すると、x1の係数は?予想してみる

概要

多重共線性は、重回帰分析で説明変数どうしが強く相関しているために、回帰係数の推定が極端に不安定になる現象です。日本の実務では「マルチコ」という略称でも呼ばれます。たとえば家賃を「専有面積」と「部屋数」で説明しようとすると、広い部屋は部屋数も多いのが普通なので、この2つはほぼ同じ情報を持っています。すると「家賃の高さは面積のおかげか、部屋数のおかげか」をデータから切り分けられなくなります。

厄介なのは、モデル全体の予測はそれなりに当たるのに、個々の係数だけが壊れることです。係数の符号が常識と逆になる、データを少し変えただけで係数が大きく動く、効いているはずの変数が有意にならない——こうした「係数が信用できない」症状の代表的な原因が多重共線性です。回帰分析の結果を係数まで読んで意思決定に使うなら、必ず確認すべき診断項目です。

なぜ生まれたか

多重共線性は誰かが発明した手法ではなく、重回帰が普及する過程で見つかった「重回帰の弱点」です。重回帰の係数は「他の変数を固定したうえで、その変数だけが1違うときの効果」を意味します。この比較が成り立つには、その変数が他の変数とは独立に動いているデータが必要です。ところが2つの変数がほぼ連動して動いているなら、「片方だけが動いた」ケースがデータの中にほとんど存在せず、切り分けの根拠がそもそもありません。ないものを無理に推定するので、答えがわずかなノイズで大暴れするのです。

経済データの分析でこの問題は早くから表面化しました。所得・消費・資産のようなマクロ経済の変数は互いに連動して動くため、回帰に入れると係数が滅茶苦茶になる。1934年に計量経済学者のフリッシュがこの構造を「合流分析(confluence analysis)」として論じ、多重共線性(multicollinearity)という言葉も彼に由来します。以来、その診断と対処は回帰分析の標準カリキュラムになり、VIF のような診断指標や、リッジ回帰のような対処法は、いずれもこの問題への応答として生まれました。

詳細

何が起きているのか — 情報の重なり

目的変数 y と各説明変数のばらつきを円で表し、y の円と重なる部分を「説明に使える情報」と考えると、多重共線性の構造が見えます。説明変数どうしの相関が弱ければ、x1 と x2 はそれぞれ別の部分で y と重なり、係数は自分の担当分をきれいに受け持ちます。相関が強いと、y の説明に使える情報の大部分が x1 と x2 の共有部分になり、その手柄をどちらの係数に配分するかがデータから決められません。配分の仕方は無数にあり得て(片方を大きくもう片方を小さく、あるいは逆でも、合計の予測はほぼ同じ)、推定はノイズ次第でどの配分にも転びます。これが「予測は当たるのに係数は不安定」という症状の正体です。

x1 と x2 の相関が弱いyx1x2金の部分はそれぞれの変数だけが持つ情報→ 係数ごとに手柄をはっきり割り振れるx1 と x2 の相関が強いyx1x2朱の部分は x1 と x2 が共有する情報→ どちらに配分するかをデータが決められない
多重共線性の構造 — 円は各変数のばらつき。y と重なる部分が説明に使える情報で、x1・x2・y の三つが重なる朱の部分は、どちらの係数の手柄か決められない

技術的に言えば、多重共線性は係数の標準誤差を膨らませます。係数の推定値そのものに偏りが出るわけではなく、「振れ幅」が巨大になるのです。標準誤差が膨らめば信頼区間は広がり、t検定は有意になりにくくなります。本当は効いている変数が「有意でない」と表示される——検定結果だけを見て変数を捨てると、この罠にはまります。

下の部品では、同じ真のモデル(β1 = β2 = 1)からデータを作り直しては回帰し、推定値 (b1, b2) を1粒ずつ落とします。相関 ρ を上げると、粒の雲は b1 + b2 = 2 の直線に沿った細長い尾根になります。個々の係数は符号が反転するほど揺れるのに、和 b1 + b2 はほとんど揺れない——データは「2つ合わせた効果」ははっきり知っているのに、その内訳を知らないのです。

⚡ 体験: 係数の雲が尾根になる
x1 と x2 の相関 ρ
b1 + b2 = 2推定のばらつき(SD)—b1—b1 + b2青の線 = 理論値VIF = 1.0(SD は 1.0 倍)
当てはめた回数0b1 の SD—b1 + b2 の SD—符号が逆になった回—

ボタンを押すと、同じ真のモデル(β1 = β2 = 1、青い十字)からデータ 30 件を作り直して回帰し、推定値 (b1, b2) を1粒として落とします。 まず ρ = 0 のまま「20回」を押してみてください。

1粒 = データ30件を作り直して当てはめた1回ぶんの推定値 (b1, b2)。真のモデルは毎回同じ

診断 — VIF という物差し

定番の診断指標が VIF(分散拡大要因、Variance Inflation Factor)です。各説明変数について「その変数を目的変数にして、残りの説明変数で回帰したときの決定係数 R²」を求め、VIF = 1 ÷ (1 − R²) を計算します。他の変数から全く説明できなければ VIF は 1(膨張なし)、R² が 0.9 なら VIF は 10 で、係数の分散が相関のない場合の 10 倍に膨らみます。分散は標準誤差の2乗なので、標準誤差でいえば √10 ≈ 3.2 倍、信頼区間の幅も約 3.2 倍です。経験則として「VIF が 10 を超えたら深刻」「5 あたりから注意」がよく使われますが、どこまで許せるかは標本サイズと、知りたい係数の精度によります。

2変数間の相関係数だけを見ていると、3つ以上の変数の組み合わせで生じる共線性(たとえば x3 がほぼ x1 + x2 に等しい場合)を見逃します。ペアの相関ではなく VIF で確認するのが作法で、回帰を当てはめたあとのモデル診断の一環として、残差の確認とセットで行います。

ダミー変数の作り方による「完全な共線性」もあります。たとえば「男性ダミー」と「女性ダミー」を両方入れると、2つの和が常に 1 になって切片と完全に重複し、そもそも解が一意に決まりません。カテゴリ変数は水準を1つ落として入れる、という決まり事はこの完全共線性を避けるためのものです。

対処 — 削る・まとめる・抑える

対処の第一候補は素朴で、重なっている変数のどちらかをモデルから外すことです。面積と部屋数がほぼ同じ情報なら、解釈しやすい方だけを残します。ただし外した変数が本当に y に効いているなら、残した変数の係数にその効果が上乗せされる(欠落変数バイアス)ので、「どちらの効果か」を知りたい問いそのものは解けていない点に注意が必要です。第二の道は、重なった変数群を1つの合成変数にまとめることです。主成分分析で相関する変数群を少数の合成軸に縮約してから回帰する方法(主成分回帰)や、理屈に基づいて指標を合成する方法があります。部品で見たとおり、和 b1 + b2 のような「まとめた量」は安定して推定できるので、問いの立て方を「面積と部屋数を合わせた広さの効果」に変えるのは筋の良い解決です。

第三の道は、係数に罰則をかけて暴れを抑える正則化です。リッジ回帰は係数の二乗和に罰則を課すことで、尾根に沿って大きく振れる推定を原点側へ引き寄せ、多重共線性の下でも推定を安定させます。わずかな偏りと引き換えに分散を大きく下げる——バイアスとバリアンスのトレードオフを意図的に使う発想です。根本的な解決は、データそのものを増やすか、x1 と x2 が独立に動く状況のデータ(実験なら両者を別々に操作する設計)を集めることです。

予測なら放置してよいのか

目的が予測だけなら、係数が不安定でもモデル全体の予測精度はほとんど損なわれず、多重共線性を放置してよい場面は多くあります。尾根に沿ってどこに推定が転んでも、x1 と x2 が「いつもどおり連動している」データに対しては、ほぼ同じ予測を返すからです。ただしこれには但し書きがあります。予測を使う新しいデータで、x1 と x2 の連動の仕方が学習時と変わると——たとえば面積のわりに部屋数の多い物件ばかりを予測する、ある施策で片方の変数だけを動かす——尾根のどこに転んだかで予測が大きく変わり、精度が崩れます。これは説明変数の空間での外挿にあたります。

回帰の目的が予測なのか解釈なのかをまず区別し、解釈が目的のときは本気で対処する。予測が目的でも、将来のデータで説明変数の相関構造が保たれるかを確かめる——これが多重共線性との現実的な付き合い方です。

試問

y を2つの説明変数 x1・x2 で重回帰します。真のモデルは y = x1 + x2 + 誤差(係数 β1 = β2 = 1)で、ボタンを押すたびに同じモデルからデータ30件を作り直して当てはめ、推定した係数 (b1, b2) を1粒ずつ平面に落とします。動かせるのは x1 と x2 の相関 ρ と、当てはめを繰り返す回数だけです。

✦ 命題挑戦中

個々の係数は2割以上の回で符号が逆転するほど揺れるのに、和 b1 + b2 の揺れは相関が無いときより小さい — その状態を実測で示せ

  • ρ = 0 で 100 回以上当てはめ、和 b1 + b2 の SD を測っておく
  • 相関のある設定で 100 回以上当てはめ、どちらかの符号が逆になった回を 20% 以上にする
  • そのときの和 b1 + b2 の SD が、ρ = 0 の実測より小さい
⚡ 体験: ρ を選んで当てはめを繰り返し、ばらつきを比べる
x1 と x2 の相関 ρ
b1 + b2 = 2推定のばらつき(SD)—b1—b1 + b2青の線 = 理論値VIF = 1.0(SD は 1.0 倍)
当てはめた回数0b1 の SD—b1 + b2 の SD—符号が逆になった回—

ボタンを押すと、同じ真のモデル(β1 = β2 = 1、青い十字)からデータ 30 件を作り直して回帰し、推定値 (b1, b2) を1粒として落とします。 まず ρ = 0 のまま「20回」を押してみてください。

1粒 = データ30件を作り直して当てはめた1回ぶんの推定値 (b1, b2)。真のモデルは毎回同じ