3.3 変数選択 - 最適な変数の組み合わせを見つける

住宅価格を予測したいとしましょう。面積、築年数、駅からの距離、部屋数、階数、日当たり...データには50個もの変数があります。

さて、全部使うべきでしょうか?

前章で学んだ最小二乗法なら、50個全部を使ってモデルを作れます。でも、それが最良とは限りません。 実は、変数を「選ぶ」ことが予測精度を上げる鍵になることがあります。

この章では、どの変数を使い、どの変数を捨てるべきかという問題に取り組みます。 最良部分集合選択、ステップワイズ選択など、様々なアプローチを視覚的に理解していきましょう。

なぜ変数選択が必要なのか?

前章で学んだ最小二乗法。データさえあれば、係数が一発で求まる便利な手法でした。

でも、ちょっと待ってください。

入力変数が100個あったとします。全部使うべきでしょうか?

実は、最小二乗法には弱点があります。変数が増えすぎると、訓練データにはぴったり合うのに、新しいデータではうまく予測できないという現象が起きます。

これを過学習(overfitting)と呼びます。

たとえるなら、試験問題の答えを丸暗記した学生のようなもの。過去問はすらすら解けるのに、少し形式が変わると手も足も出ない...。

逆に、変数が少なすぎると、データの本質的なパターンを捉えられません。これを過少適合(underfitting)と呼びます。

変数選択の目標は、この「ちょうどいい複雑さ」を見つけることです。

もう一つの重要な理由があります。それは解釈のしやすさです。

10個の変数で予測できるなら、100個より10個の方が理解しやすい。どの要因が重要なのか、一目でわかります。

下のアニメーションで、過学習と過少適合、そして「ちょうどいい」モデルの違いを見てください。

過学習・適切・過少適合の3段階比較

最良部分集合選択 - 全組み合わせを試す

変数選択の最も直接的なアプローチは、すべての組み合わせを試すことです。

これを最良部分集合選択(Best-Subset Selection)と呼びます。

$p$ 個の変数があるとき、「変数を使う/使わない」の選択肢が各変数にあります。 すると、可能な組み合わせは $2^p$ 通りです。

たとえば10変数なら $2^{10} = 1024$ 通り。まだ計算できそうですね。

でも40変数なら? $2^{40} \approx 1兆$ 通り。これは現実的ではありません。

そこで、変数の個数 $k$ ごとに最良のモデルを選ぶという戦略を取ります。

  1. $k = 1$: 1変数モデルの中で最良のものを選ぶ($p$ 個を比較)
  2. $k = 2$: 2変数モデルの中で最良のものを選ぶ($\binom{p}{2}$、つまり「$p$個から2個選ぶ組み合わせ」通りを比較)
  3. ...以下同様

$k$ について、前章で学んだ残差二乗和(RSS)を最小にするモデルを選びます。 (RSSは「予測の外れ具合の合計」でしたね)

すると、変数の個数が増えるほど RSS は必ず減少します(変数を増やせば、訓練データへのフィットは必ず良くなる)。

でも、RSS が小さいほど良いモデルとは限りません。過学習しているかもしれないからです。

(このトレードオフについては、後のセクションで詳しく扱います)

$$\text{最良部分集合選択: } \min_{\beta} \text{RSS} = \min_{\beta} \sum_{i=1}^{N}(y_i - \beta_0 - \sum_{j \in S} \beta_j x_{ij})^2$$

つまり、「選んだ変数 $S$ だけを使って、予測誤差の二乗和を最小にする」ということです。

全組み合わせ探索の視覚化

前向きステップワイズ選択 - 貪欲に変数を追加

最良部分集合選択は理想的ですが、変数が多いと計算量が爆発します。

40変数で1兆通り...すべて試すのは非現実的ですね。

では、もっと賢い方法はないでしょうか?「すべてを試す」のではなく、「良さそうな方向に進む」アプローチです。

前向きステップワイズ選択(Forward Stepwise Selection)は、次のように進みます:

  1. スタート: 何も変数がないモデル(切片のみ)から始める
  2. 追加: 現在のモデルに1つ変数を追加したとき、最も RSS を減らす変数を選ぶ
  3. 繰り返し: ステップ2を繰り返し、変数を1つずつ追加していく

これは貪欲(greedy)なアルゴリズムです。各ステップで「今この瞬間に最良」な選択をします。

最良部分集合選択との違いは何でしょうか?

前向きステップワイズは、一度追加した変数を削除しません。そのため、真の最良部分集合を見逃す可能性があります。

たとえば、変数 A と B を一緒に使うと素晴らしい予測ができるのに、単独では A も B もパッとしない...という場合。前向きステップワイズは A も B も選ばないかもしれません。

しかし、計算量は劇的に減ります。$2^p$ 通りだったのが、たった $p(p+1)/2$ 回の比較で済みます。

40変数なら、1兆通りが820回に。これなら十分計算できます。

変数を1つずつ追加していく貪欲アルゴリズムの視覚化

後向きステップワイズ選択 - 変数を削除していく

前向きステップワイズは「何もない状態から始めて追加する」アプローチでした。

では逆に、「全部入りから始めて削除する」アプローチはどうでしょう?

後向きステップワイズ選択(Backward Stepwise Selection)は:

  1. スタート: すべての変数を使ったモデルから始める
  2. 削除: 現在のモデルから1つ変数を削除したとき、最も RSS の増加が小さい変数を除く
  3. 繰り返し: ステップ2を繰り返し、変数を1つずつ減らしていく

つまり、「なくても困らない変数」を順番に取り除いていくのです。

この方法には1つ制約があります。データ数 $N$ が変数数 $p$ より大きくないと使えません

なぜなら、$N < p$ のとき、すべての変数を使ったモデルは「解けない」からです(方程式の数より未知数の方が多い状態)。

前向きと後向き、どちらが良いのでしょうか?

一般的には、どちらも同じような結果を出すことが多いです。ただし、理論的には異なる解に到達する可能性があります。

実務では、両方を試して比較することもあります。

変数を1つずつ削除していく様子

前向きステージワイズ回帰 - より慎重なアプローチ

ここまでのステップワイズ手法には、1つの共通点がありました。

変数を追加/削除したら、その変数の係数は最小二乗法でぴったりフィットさせます。 つまり、「0から一気に最適値へジャンプ」するのです。

でも、この「一気にジャンプ」が問題を引き起こすことがあります。 特に変数が多い場合、一度に大きく係数を動かすと過学習しやすくなります。

そこで、もっと「慎重な」方法を考えましょう。

前向きステージワイズ回帰(Forward Stagewise Regression)です。

この方法は次のように進みます:

  1. スタート: すべての係数を0で初期化(切片のみのモデル)
  2. 小さな更新: 残差と最も相関の高い変数を見つけ、その係数を「少しだけ」更新
  3. 繰り返し: ステップ2を何度も繰り返す

ポイントは「少しだけ」という部分です。

前向きステップワイズは、変数を追加したら最小二乗でぴったりフィットします。 一方、ステージワイズは係数を少しずつ、ゆっくりと調整します。

このため、収束までに多くのステップが必要です。でも、この「遅さ」が実は利点になることがあります。

なぜでしょう?

係数を急激に変えないことで、過学習を防ぐ効果があるのです。

これは後の章で学ぶ正則化と深い関係があります。 正則化とは「係数を小さく抑えることでモデルを安定させる手法」です。 ステージワイズの「ゆっくり更新」は、結果的に係数を抑える効果を持つのです。

詳しくは次の章(リッジ回帰、Lasso)で扱いますが、今は「急がば回れ」の精神と覚えておいてください。

係数を少しずつ更新する様子

各手法の比較

ここで、3つの手法を比較してみましょう。

手法特徴計算量制約
最良部分集合最適解を保証$O(2^p)$$p \lesssim 40$
前向きステップワイズ高速、実用的$O(p^2)$なし
後向きステップワイズ高速、実用的$O(p^2)$$N > p$
前向きステージワイズ過学習に強い$O(p \cdot \text{反復数})$収束が遅い

どれを使えばいいのでしょうか?

一般的なガイドラインは:

実際には、複数の手法を試して結果を比較することが多いです。

下のアニメーションで、3つの手法が同じデータに対してどのような「経路」をたどるかを見てください。

3つの手法が変数空間を探索する経路の比較

モデルサイズの選び方

ここまで、変数の組み合わせを探索する方法を見てきました。

でも、重要な問題が残っています。何個の変数を使うべきかです。

変数を増やせば、訓練データへのフィット(RSS)は必ず良くなります。 でも、それは過学習かもしれません。

では、どうやって「ちょうどいい」個数を決めるのでしょうか?

いくつかのアプローチがあります:

  1. 交差検証(Cross-Validation): データを分割し、一部で訓練、残りで評価を繰り返す
  2. 情報量規準(AIC, BIC): RSSに「変数の数に応じたペナルティ」を加える
  3. 調整済み $R^2$: 変数の数で補正した決定係数

たとえば、AIC(赤池情報量規準)は次のような形をしています:

$$\text{AIC} = \frac{1}{N\hat{\sigma}^2} \left( \text{RSS} + 2d\hat{\sigma}^2 \right)$$

つまり、「予測誤差 + 変数の数に応じたペナルティ」という構造です。

第2項 $2d\hat{\sigma}^2$ がペナルティ項です。変数を増やすとRSSは減りますが、ペナルティが増えます。

このバランスが最適なところで、AICは最小になります。

今は「変数を増やしすぎるとペナルティがかかる」というアイデアを押さえておけばOKです。

変数の数とモデル性能のトレードオフ

実例 - 前立腺がんデータ

具体的な例を見てみましょう。

前立腺がんの進行度を予測する問題です。8つの予測変数(腫瘍体積、前立腺重量、年齢など)から、PSA値(前立腺特異抗原の対数値)を予測します。

まず、最良部分集合選択を行うと、各サイズ $k$ について最良のモデルが得られます。

そして、交差検証で最適な $k$ を選びます。

この例では、$k = 2$ または $k = 3$ あたりが最適という結果になりました。

驚くべきことに、8個の変数のうち、たった2~3個で十分な予測ができたのです! 具体的には「腫瘍体積」と「前立腺重量」だけで、ほぼ最高の予測精度が得られました。

これが変数選択の力です。すべての変数を使う必要はなく、本当に重要なものだけを選べばいい。

また興味深いのは、すべての手法(最良部分集合、前向き、後向き)が似たような結果を出したことです。 変数が8個と少ないため、どの手法も最適解を見つけられたのです。

もし変数が100個だったら?その場合は手法間の差が大きくなり、最良部分集合選択は使えなくなります。

変数の数を変えたときの予測誤差の変化

まとめ - 変数選択の全体像

この章で学んだことを振り返りましょう。

なぜ変数選択が必要か:

主な手法:

モデルサイズの選び方:

変数選択は、「すべての変数を使う」最小二乗法からの重要な拡張です。

次の章では、変数選択の代わりに係数を縮小するアプローチ(リッジ回帰、Lasso)を学びます。 変数を「選ぶ」のではなく、「弱める」という発想です。

変数選択の全体像