ひとことで言うと#
特徴量選択手法は、モデルに投入する変数の中から予測に寄与する特徴量を残し、不要なものを除外することで、精度・解釈性・計算効率を改善する一連の方法論です。
用語の定義#
押さえておきたい用語
- フィルタ法(Filter Method):モデルを使わず統計的な指標(相関係数、分散、相互情報量)で特徴量を評価・選択する方法。計算が高速
- ラッパー法(Wrapper Method):特徴量の部分集合でモデルを学習・評価し、最良の組み合わせを探索する方法。前方選択法・後方除去法が代表的
- 埋め込み法(Embedded Method):モデルの学習プロセス内で特徴量の重要度を算出する方法。L1正則化(Lasso)やツリーモデルの特徴量重要度が該当
- 多重共線性(Multicollinearity):複数の特徴量が互いに強く相関し、モデルの係数推定が不安定になる現象。VIF(分散拡大係数)で検出する
- 次元の呪い(Curse of Dimensionality):特徴量の数がサンプル数に対して多すぎると、データの空間が疎になりモデルの性能が劣化する現象
全体像#
全特徴量の確認
相関・分布・欠損率
→相関・分布・欠損率
フィルタで粗選択
低分散・高相関を除外
→低分散・高相関を除外
埋め込み法で精選
重要度スコアで絞込
→重要度スコアで絞込
交差検証で最終確認
選択前後の性能比較
選択前後の性能比較
こんな悩みに効く#
- 特徴量が300個を超えて、どの変数が予測に効いているのか把握できない
- 特徴量を全部入れたモデルと、一部を削ったモデルで精度が変わらず、どちらが正しいかわからない
- モデルの推論に時間がかかりすぎて、リアルタイム予測の要件を満たせない
基本の使い方#
全特徴量のプロファイリングを行う
各特徴量の分布、欠損率、目的変数との相関を確認します。分散がほぼゼロの特徴量(定数に近い)や欠損率90%超の特徴量はこの段階で除外します。特徴量同士の相関行列も確認し、r>0.95の組は一方を除去の候補にします。
フィルタ法で明らかに不要な変数を除外する
相関係数や相互情報量で目的変数との関連が極めて弱い変数を除外します。この段階は計算が軽いため、特徴量が数百以上ある場合の初期スクリーニングとして有効です。
埋め込み法で重要度を算出する
LightGBMやRandom Forestで学習し、特徴量重要度(Gain, Split count)を取得します。Permutation重要度も併用すると、モデルに依存しない重要度評価が得られます。上位N個で全体の精度の95%以上を維持できるNを探します。
選択結果を交差検証で検証する
選択前(全特徴量)と選択後(絞り込んだ特徴量)で5分割交差検証を行い、精度の変化と分散を比較します。精度がほぼ同等なら特徴量を減らした方が汎化性能・運用面で優れています。精度が有意に下がるなら選択基準を緩めます。
具体例#
通信キャリアの解約予測モデル最適化
通信キャリアが、顧客の解約予測モデルで287個の特徴量を使用していた。まずフィルタ法で分散が下位5%の特徴量と、目的変数との相互情報量が実質ゼロの84個を除外。次にLightGBMのPermutation重要度で上位50個に絞り込んだ。5分割交差検証の結果、287個使用時のAUCが0.812±0.008、50個使用時が0.808±0.006で、精度の差は0.4%以内に収まった。特徴量を83%削減したことで、日次バッチ推論の所要時間が45分から12分に短縮。モデルの解釈性も向上し、解約リスクの主因(料金プラン不一致・サポート回数・利用量急減の3要因)を営業チームに説明可能になった。
製造業の品質予測における変数選択
化学メーカーが、製品の品質値(連続量)を製造プロセスのセンサーデータ420変数から予測するモデルを構築。フィルタ法で相関行列を調べたところ、r>0.95のペアが63組見つかり、多重共線性が深刻だった。VIF>10の変数を除去して180変数に削減し、さらにLassoで係数がゼロにならなかった38変数を選択。全変数のRandom ForestのRMSEが2.14±0.18、38変数では2.08±0.12と精度が微改善し、分散も小さくなった。多重共線性の排除により係数の安定性が増し、「この変数を制御すれば品質が改善する」という因果的な示唆をプロセスエンジニアに提供できるようになった。
不動産テックの価格査定モデル軽量化
不動産テック企業が、物件価格の査定APIの応答速度改善のために特徴量選択を実施。元のモデルは156個の特徴量(物件属性・周辺施設・交通アクセス・市場指標)を使用し、推論1件あたり180msかかっていた。RFE(Recursive Feature Elimination)でXGBoostの交差検証スコアを監視しながら段階的に変数を削り、42個まで減らしてもRMSEの劣化が1.5%以内に収まることを確認。推論速度が180msから48msに短縮され、APIのSLA(200ms以内)を余裕でクリア。除去された変数の多くは、半径1km以内の施設数カウント系(カフェ数、コンビニ数など相互に高相関)で、代表的な1変数に集約しても情報損失が小さかった。
やりがちな失敗パターン#
| 失敗 | 原因 | 対策 |
|---|---|---|
| テストデータの情報を使って特徴量選択する | 全データで相関を計算してから分割した(リーケージ) | 特徴量選択は訓練データの中だけで行い、交差検証のフォールド内に閉じ込める |
| フィルタ法だけで済ませる | 単変量の指標では変数間の交互作用を捉えられない | フィルタ法は初期スクリーニングに留め、埋め込み法やラッパー法で最終選択する |
| 重要度の低い変数を全部消す | 重要度がモデル依存であり、別のモデルでは重要な可能性がある | 複数の手法(Gain重要度、Permutation重要度、SHAP値)で一貫して低い変数のみ除外する |
| 特徴量選択と特徴量エンジニアリングの順序を逆にする | 有効な特徴量を作る前に選択してしまい、必要な情報が失われた | まず特徴量エンジニアリングで候補を広げてから、選択で絞り込む順序を守る |
まとめ#
特徴量選択は「変数を減らす」こと自体が目的ではなく、モデルの精度・安定性・解釈性・計算効率を同時に改善するための手段です。フィルタ法で粗く落とし、埋め込み法で精選し、交差検証で効果を検証する3段階のアプローチが実務では安定します。「全変数モデルと選択後モデルの精度差が許容範囲内か」を常に確認しながら進めれば、不要な変数を抱えたまま運用するリスクを避けられます。