🧮
【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