特徴量選択とは何か
特徴量選択(Feature Selection)は、学習データの中から予測性能に寄与する重要な特徴量のみを抽出するプロセスです。
目的は単に特徴量を減らすことではなく、次の3つを同時に達成することにあります。
- 過学習の防止(ノイズを減らし、汎化性能を向上)
- 計算コストの削減(学習・推論の効率化)
- モデル解釈性の向上(どの変数が重要か明確化)
ただし、特徴量選択を誤ると、重要な情報を失い逆に性能が悪化することもあります。
したがって、正しい手法選定と適切な評価手順が極めて重要です。
特徴量選択の3つのアプローチ
特徴量選択の方法は大きく次の3種類に分類されます。
フィルタ法(Filter Method)
モデルを使わず、統計的な尺度で特徴量の有効性を評価する方法です。
- 特徴:高速・簡便・モデル非依存
- 用途:前処理段階での粗い絞り込みに適する
- 欠点:特徴量間の相互作用を考慮できない
代表的な指標
- 相関係数(Pearson・Spearman):目的変数が連続の場合に利用
- 分散閾値法:分散が小さい特徴量(ほぼ定数)を削除
- カイ二乗検定:目的変数とカテゴリ特徴の独立性を評価(ただし非負整数に限定)
- 相互情報量(Mutual Information):非線形関係を捉えられる柔軟な手法
注意点
- 分類と回帰では適用する指標が異なる(例:分類は
f_classif、回帰はf_regressionなど) - カイ二乗検定は負値や連続値には不適(One-Hotやカウント表現に限定)
ラッパー法(Wrapper Method)
特徴量の組み合わせを変えながら、実際のモデル性能で評価する方法です。
- 特徴:モデル依存・高精度だが高コスト
- 長所:性能指標に直結した評価ができる
- 短所:特徴量が多い場合は計算時間が膨大
代表的な手法
- 逐次前進選択(SFS):空集合から始め、1つずつ追加して性能が上がる組み合わせを選ぶ
- 逐次後退選択(SBS):全特徴量から始め、1つずつ削除して性能が下がらない特徴を残す
- 再帰的特徴量消去(RFE):モデルで重要度を算出し、低い特徴を順に削除する
注意点
- 評価を繰り返すため非常に重い
- CV(交差検証)と組み合わせて行わないとリークの危険がある
埋め込み法(Embedded Method)
モデルの学習過程で同時に特徴量選択を行う方法です。
正則化項や特徴量重要度など、モデル内部の情報を利用します。
- 特徴:学習と選択を同時に行うため効率的
- 用途:精度・速度・安定性のバランスが良い
- 欠点:モデルに依存した結果になる
代表的な手法
- Lasso回帰(L1正則化):不要な特徴の係数を0にして自動的に除外
- Ridge回帰(L2正則化):係数を縮小するが0にはしない(安定化目的)
- Elastic Net:L1とL2のハイブリッド。スパース性と安定性の両立が可能
- 決定木系モデル(Random Forest・XGBoost・LightGBM):特徴量重要度を算出可能
注意点
- 木モデルの「不純度ベース重要度(Gain・Gini)」は、
スケールが大きい特徴やカテゴリ数が多い特徴に偏る傾向があります。
そのため、Permutation ImportanceやSHAP値で補完的に確認するのが望ましい。
特徴量選択を行う際の重要な実務ルール
データリーク防止が最優先
特徴量選択はモデル評価の外側で一度だけ実行するのはNGです。
なぜなら、検証データの情報が前処理に漏れてしまい、実際以上に精度が高く見えるからです。
正しい方法
- 標準化や特徴量選択を交差検証のFold内で行う(Pipeline化)
- 各Foldで学習→評価→平均することで、真の汎化性能を測る
標準化は必須(特に線形モデル系)
Lasso・Ridge・ElasticNetなどは、特徴量のスケールの違いに敏感です。
すべての特徴量を平均0・分散1に正規化してから適用します。
t-SNEは「可視化専用」
t-SNEはデータ構造を視覚化するには優れていますが、外挿(未知データへの適用)ができないため、次元削減の前処理としては不向きです。
実務ではPCAやUMAPを使うのが一般的です。
多重共線性を考慮
特徴量同士の相関が高いと、線形モデルでは係数推定が不安定になります。
相関係数行列を可視化し、一定以上(例:0.9以上)の相関があるペアは片方を削除するのが定石です。
モデル別の適用方針
- 線形モデル:相関除去+L1正則化が有効
- 木系モデル:スケーリング不要、PermutationやSHAPで重要度解釈
- ブースティング系:特徴量のスパース性に強いが、冗長特徴は処理コストを増やす
実務的な特徴量選択フロー
- 分散閾値法で定数に近い特徴を削除
- 欠損率・外れ値・相関行列で冗長な変数を除外
- フィルタ法(F検定・相互情報量)で初期スクリーニング
- LassoやElasticNetなどの埋め込み法で精密選択
- Permutation ImportanceやSHAPで最終的に重要度を確認
- 交差検証で最終モデルの汎化性能を確認
分類タスクと回帰タスクの違い
| タスク | フィルタ法で使う指標 | モデル例 | 評価指標例 |
|---|---|---|---|
| 回帰 | 相関係数, F検定(f_regression), 相互情報量 | 線形回帰, ElasticNet | R², RMSE |
| 分類 | ANOVA F値(f_classif), カイ二乗検定, 相互情報量 | ロジスティック回帰, XGBoost | AUC, F1-score |
実務でのTipsとベストプラクティス
- 評価設計:時系列データは通常のCVではなく、時系列分割(TimeSeriesSplit)を使用
- スパースデータ:高次元テキスト特徴では、L1正則化や相互情報量が効果的
- 再現性の確保:ランダムシード(
random_state)を固定し、前処理をPipeline化 - 特徴量生成と選択の併用:
単に「削る」だけでなく、ドメイン知識を活かして新たな特徴を「作る」工程を組み合わせると精度向上が見込める
まとめ:3手法の比較表(再整理)
| 手法 | モデル依存 | 計算コスト | 精度 | 解釈性 | 主な用途 |
|---|---|---|---|---|---|
| フィルタ法 | なし | ◎(高速) | △ | ○ | 前処理のスクリーニング |
| ラッパー法 | あり | ×(高負荷) | ◎ | △ | 精度追求型選択 |
| 埋め込み法 | あり | ○ | ◎ | ○ | 実務的バランス重視 |
まとめ
特徴量選択は、モデル精度と解釈性を高めるための中核工程です。
単一の手法で完結させるのではなく、統計的スクリーニング → モデルベース選択 → 性能検証という多段階アプローチを取ることで、より堅牢で再現性の高い結果が得られます。
実務では、特徴量選択は「削る作業」ではなく「意味を見極める分析工程」です。
データの構造、モデル特性、評価設計を踏まえたうえで慎重に行うことが成功の鍵になります。
以上、機械学習の特徴量選択方法についてでした。
最後までお読みいただき、ありがとうございました。
