特徴量選択と重要性
機械学習モデルを作成する際には、すべての特徴量をそのまま使えばよいとは限りません。予測に役立つ特徴量もあれば、ほとんど意味を持たない特徴量や、他の特徴量と情報が重複している特徴量もあります。
特徴量選択とは、モデルの学習に役立つ特徴量を選び、不要な特徴量を除外する工程です。適切に特徴量を選択することで、モデルの精度向上、学習時間の短縮、過学習の防止につながります。
特徴量選択と重要性を図で理解する

特徴量選択とは?
特徴量選択とは、データセットに含まれる複数の特徴量の中から、予測に役立つものを選び出す処理です。
例えば、住宅価格を予測する場合、面積や駅からの距離は重要な特徴量になりやすい一方で、物件IDのような値は予測に役立たないことがあります。
不要な特徴量をそのまま使うと、モデルがノイズまで学習してしまい、未知のデータに対する性能が下がることがあります。
特徴量の重要性とは?
特徴量の重要性(Feature Importance)とは、各特徴量がモデルの予測にどの程度影響しているかを示す考え方です。
重要度が高い特徴量は、モデルの予測に大きく貢献している可能性があります。一方、重要度が低い特徴量は、削除しても性能にほとんど影響しない場合があります。
| 特徴量 | 重要性の例 |
|---|---|
| 住宅の面積 | 価格予測に大きく影響しやすい |
| 駅からの距離 | 価格予測に影響しやすい |
| 物件ID | 予測にはあまり意味を持たないことが多い |
特徴量選択を行う理由
特徴量選択を行う主な理由は、モデルにとって必要な情報だけを残し、不要な情報を減らすためです。
- モデルの精度を向上させる
- 学習時間を短縮する
- 過学習を防ぐ
- モデルを解釈しやすくする
- データのノイズを減らす
特徴量が多すぎると、モデルが本質的な関係ではなく偶然のパターンを学習してしまうことがあります。
特徴量選択の代表的な手法
特徴量選択には、さまざまな方法があります。ここでは代表的な手法を紹介します。
分散しきい値による特徴量選択
値がほとんど変化しない特徴量は、モデルにとって有用でないことがあります。
例えば、ほとんどのデータで同じ値を持つ特徴量は、予測に使える情報が少ないため、削除候補になります。
from sklearn.feature_selection import VarianceThreshold
import pandas as pd
data = {
'A': [1, 1, 1, 1],
'B': [0, 1, 2, 3],
'C': [5, 5, 5, 5]
}
df = pd.DataFrame(data)
selector = VarianceThreshold(threshold=0.1)
df_selected = selector.fit_transform(df)
print(df_selected)
この例では、値がほとんど変化しない特徴量を除外しています。
相関による特徴量選択
複数の特徴量がほぼ同じ情報を持っている場合、一方を削除してもモデル性能が大きく変わらないことがあります。
例えば、「身長」と「腕の長さ」のように強く相関する特徴量がある場合、情報が重複している可能性があります。
correlation_matrix = df.corr()
print(correlation_matrix)
相関が高い特徴量を確認し、必要に応じて一部を削除することで、モデルをシンプルにできます。
木ベースモデルによる特徴量重要度
ランダムフォレストや勾配ブースティングなどの木ベースモデルでは、特徴量の重要度を確認できます。
どの特徴量が予測に大きく貢献しているかを把握し、重要度の低い特徴量を削除する判断材料にできます。
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state=42)
model.fit(
df[['A', 'B', 'C']],
[0, 1, 0, 1]
)
importances = model.feature_importances_
print(importances)
重要度の高い特徴量を優先して使うことで、モデルの解釈性を高めることができます。
モデル性能を比較しながら選択する方法
特徴量を追加または削除しながら、モデルの性能を比較する方法もあります。
代表的な手法として、次のようなものがあります。
- 前進選択法:特徴量を1つずつ追加していく
- 後退消去法:すべての特徴量から不要なものを削除していく
- 再帰的特徴量削減(RFE):重要度の低い特徴量を順に削除する
これらの方法では、実際のモデル性能を確認しながら特徴量を選べる点が特徴です。
特徴量選択のメリット
| メリット | 内容 |
|---|---|
| 精度向上 | ノイズとなる特徴量を減らすことで、予測性能が向上する場合があります。 |
| 学習時間の短縮 | 使用する特徴量が減るため、学習や予測が高速になります。 |
| 過学習の防止 | 不要な特徴量を減らすことで、偶然のパターンへの適合を防ぎやすくなります。 |
| 解釈性の向上 | どの特徴量が重要なのかを理解しやすくなります。 |
特徴量選択の注意点
特徴量選択は便利ですが、機械的に削除すればよいわけではありません。
- 分散が低くても重要な特徴量が存在する場合がある
- 相関が高くても両方必要な場合がある
- 特徴量重要度はモデルの種類によって変わる
- ドメイン知識を無視すると重要な情報を失う可能性がある
- テストデータの情報を使って特徴量選択をしてはいけない
特に、特徴量選択は訓練データだけを使って行う必要があります。テストデータを見て特徴量を選ぶと、評価結果が実際よりも良く見えてしまう可能性があります。
特徴量選択と特徴量エンジニアリングの違い
特徴量選択は、既存の特徴量の中から必要なものを選ぶ処理です。
一方、特徴量エンジニアリングは、既存のデータを加工・変換して新しい特徴量を作る処理です。
| 項目 | 内容 |
|---|---|
| 特徴量選択 | 既存の特徴量から必要なものを選ぶ |
| 特徴量エンジニアリング | 新しい特徴量を作成する |
まとめ
特徴量選択は、機械学習モデルにとって有用な特徴量を選び、不要な特徴量を削除するための重要な前処理です。
分散、相関、特徴量重要度、モデル性能の比較などを使って特徴量を選ぶことで、モデルの精度向上、学習時間の短縮、過学習の防止、解釈性の向上につながります。
ただし、特徴量選択は機械的に行うのではなく、データの意味やドメイン知識も考慮しながら慎重に進めることが重要です。