機械学習の分野では、変数が多いデータを扱うことが多く、そのようなデータを扱うと多重共線性が発生することがあります。その際、多重共線性を回避する手法であるLassoをはじめとする正則化回帰が用いられることがあります。
JMP Proでは「一般化回帰」という手法としてこの正則化回帰を利用でき、パラメータ推定値(回帰係数)を収縮や変数選択によって、多重共線性を影響を抑えた安定したモデル推定が可能になります。
以下の図は、Lassoによって回帰係数が収縮されたときの様子を示しています。レポート「元の説明変数に対する推定値」を見ると、効果の小さい説明変数は0(ゼロ)に収縮されており、Lassoが変数選択を行っていることが確認できます。

では、多重共線性が存在するデータについて、Lasso回帰はどのように有効なのでしょうか。本記事では、応答(Y)との真の関係をあらかじめ定めた仮想データを用い、Lasso回帰、重回帰分析、ステップワイズ法のそれぞれが真のモデルをどれだけ正しく推定できるかを検討します。
目次
仮想データ
目的変数:Y
説明変数:X1~X20 (20個)
Yは、いくつかの説明変数の線形結合を平均とし、標準誤差を10とした正規乱数から生成します。

このような形式のデータについて、以下の2種類のものを用意し、Lasso回帰の効果を比較します。
1. 説明変数間の相関がほどんとないデータ
2. 説明変数間にある程度の相関があるデータ(多重共線性があるもの)
これにより、多重共線性の有無が変数選択やモデル推定にどのような影響があるかを調べてみます。
※これら2種類のサンプルデータは、本記事に添付しております。
1. 説明変数間の相関がほとんどないデータの例
データ:「data_without_correlation.jmp」
説明変数間の相関(r):-0.06~0.10

このデータを用い、重回帰分析、ステップワイズ法(停止ルール:最小BIC)、Lasso回帰(検証法:BIC)の各手法でモデルをあてはめ、求められた回帰係数をまとめた結果を、次の表に示します。列「真の式」には、Yを生成する際に用いた説明変数の真の係数を記載しています。

ステップワイズ法では選択されなかった変数の係数は0、Lasso回帰では正則化によって係数が0に収縮された場合も同様に0と表示されます。
この結果から、いずれの手法も真の式に近いモデルを推定しており、効果のない変数については0またはごく小さい係数となっていることが確認されました。
すなわち、説明変数間の相関がほとんどないデータにおいて、重回帰分析、ステップワイズ法、Lasso回帰いずれの手法でも、真の応答関係をおおむね正確に推定できていることがわかりました。
2. 説明変数間にある程度の相関があるデータの例
データ:「data_without_correlation.jmp」
説明変数間の相関(r):-0.50~0.52

このようなデータでは、説明変数間の相関により回帰係数の推定が不安定になりやすいです。このデータで重回帰分析を実行するとVIFが非常に大きい値となり、多重共線性の影響が強く現れます。

1. のケースと同様に、重回帰分析、ステップワイズ法、Lasso回帰の各手法でモデルをあてはめ、得られた係数をまとめた表を示します。

重回帰分析では、多重共線性の影響により、係数の大きさが真の値から大きくかけ離れた結果となりました。
ステップワイズ法でも、重要な変数が選択されない、不要な変数が選択されるなど、真の式に基づく正しい変数選択が行われませんでした。
一方でLasso回帰では、1.のケースと同様に、効果がない説明変数を0に収縮し、効果ある変数についてもほぼ正確な推定値を得ることができました。
3. Lassoの係数に対するシミュレーション
ここまでの例は、Yの値をRandom Normal関数を用いて、ある一組の正規乱数から生成したデータを使用していました。しかし、乱数なので抽出する乱数によって結果がかわるかもしれません。
JMP に搭載されている「シミュレーション」の機能を用いると、多数の正規乱数の組に基づいて推定を繰り返し、回帰係数のシミュレーション分布を得ることができます。これにより、Lasso回帰による変数選択の妥当性や信頼性を評価できます。
ここでは、ケース2.の"ある程度相関があるデータ"についてLasso回帰を行った際、効果がない変数について、どれだけの頻度で0に収縮されるか、または効果のある変数がどれだけの頻度で0でない(非ゼロ)と推定されるのかをシミュレーションによって考察します。
JMPでシミュレーションを行う手順
Lasso回帰を実行したとき、推定値に対して500回のシミュレーションをおこなう方法を示します。
- Lassoのレポート「元の説明変数に対する推定値」の「推定値」の数値の箇所で右クリックし、[シミュレーション] を選択します。
- シミュレーションのウィンドウが表示されるので、切り替え元の列をYに、切り替え先の列をYにします。標本数を500(シミュレーション回数)にし、乱数シード値を123456にします(結果を再現させるために便宜的に指定した値)。

この操作により、500回のシミュレーションで得られた回帰係数の分布が新しいデータテーブルとして出力されます。
出力されたデータテーブルのスクリプト「一変量の分布」を実行すると、各変数のシミュレーション分布が表示されます。さらに「要約統計量」のレポートにて「ゼロの個数」、「ゼロの割合」を表示させます。

上記で得られた、各変数のゼロの個数、ゼロの割合を表にまとめてみました。

真の式で効果がない変数は、Lasso回帰によって高い割合で0に収縮されています。一方、真の式の係数の絶対値が大きい変数(X7、X12など)は、500回のシミュレーションで1回も0に収縮しておらず、常にモデルに含められることが示されました。
シミュレーションにより、Lasso回帰が多重共線性のあるデータに対しても、効果のない変数を高確率で除外し、重要な変数を安定して選択できることが確認されました。
ただし実務上、多重共線性が強いデータにおいては、Lasso回帰が相関の高い説明変数群の中から1つの変数のみを選択し、他の変数を除外する傾向がある点にご注意ください。
by 増川 直裕(JMP Japan)
Naohiro Masukawa - JMP User Community
data_with_correlation.jmp
data_without_correlation.jmp
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.