🧮

【AWS-ML】カテゴリ変数エンコーディングの整理

に公開

もちろんです。

カテゴリ変数(=文字やラベルで表されるデータ)を機械学習モデルで扱える数値データに変換する手法が「エンコーディング(encoding)」です。

以下で代表的な手法とその使い分けを整理します👇


🧩 1. ラベルエンコーディング(Label Encoding)

各カテゴリに整数値を割り当てる方法。

カテゴリ 割り当て値
0
1
2

メリット

シンプルで実装が簡単(sklearn.preprocessing.LabelEncoder などで即使用可)

メモリ効率が高い

⚠️ 注意点

数値に“大小関係”があるように見えてしまう(例:赤 < 青 < 緑 という誤解をモデルがする)

ツリー系モデル(例:決定木・XGBoost)では問題になりにくいが、

線形モデルや距離ベースモデル(例:線形回帰・SVM・KNN)では不適切


🧮 2. ワンホットエンコーディング(One-Hot Encoding)

各カテゴリごとに新しい列を作り、「該当すれば1、そうでなければ0」を割り当てる方法。

1 0 0
0 1 0
0 0 1

メリット

数値に順序関係が生まれない(安全)

線形モデルにも使いやすい

⚠️ 注意点

カテゴリ数が多いと列が爆発的に増える(次元の呪い)

→ 対策として「頻度の少ないカテゴリをまとめる」「Embeddingに置き換える」などが必要


🧠 3. ターゲットエンコーディング(Target Encoding)

各カテゴリを「目的変数(y)の平均値」などで数値化する手法。

例:目的変数が「購入(1)/非購入(0)」の場合

カテゴリ 購入率
A社 0.75
B社 0.30
C社 0.10

メリット

カテゴリが多くても1列にできる

モデル精度が上がりやすい

⚠️ 注意点

過学習しやすい(カテゴリごとのy平均を直接使うため)

→ クロスバリデーションなどで「リーク防止」が必要


📊 4. その他のエンコーディング

手法 概要 適用例
Count / Frequency Encoding カテゴリの出現回数や頻度で置き換える 高頻度カテゴリを強調したいとき
Binary Encoding カテゴリを2進数化して複数列に分ける 中間的手法(次元削減+順序回避)
Hash Encoding ハッシュ関数で固定次元に変換 大量のカテゴリ(例:ユーザーID)
Embedding ニューラルネットで学習される分散表現 深層学習や推薦システムなど

🔧 手法選択の目安

モデルの種類 推奨エンコーディング
決定木系(XGBoost, LightGBM, RandomForest) Label / Target Encoding
線形モデル(ロジスティック回帰、線形回帰) One-Hot Encoding
ニューラルネット Embedding
大規模カテゴリ(例:ユーザーID、商品ID) Hash / Embedding

Discussion