Hello there, ('ω')ノ
📌 1. カテゴリ変数とは?
カテゴリ変数とは、いくつかのグループに分類されるデータ です。
例えば、以下のようなデータがカテゴリ変数に該当します。
ID | 性別(Sex) | 乗船地(Embarked) | 乗客クラス(Pclass) |
---|---|---|---|
1 | male | S | 3 |
2 | female | C | 1 |
3 | female | Q | 2 |
機械学習モデルは数値データしか扱えない ため、これらのカテゴリ変数を適切に数値変換(エンコーディング) する必要があります!
📌 2. エンコーディングの種類と使い分け
カテゴリ変数のエンコーディング方法は、以下のように分類できます。
手法 | 特徴 | 使いどころ |
---|---|---|
Label Encoding | 各カテゴリを整数に変換 | カテゴリに順序がある場合 |
One-Hot Encoding | ダミー変数を作成(0/1) | カテゴリ数が少ない場合 |
Target Encoding | 目的変数の平均値を使用 | カテゴリ数が多い場合 |
適切な手法を選ぶことで、モデルの精度を向上させることができます!
📌 3. Label Encoding(ラベルエンコーディング)
カテゴリを整数に変換 する最もシンプルな方法です。
✅ 実装(性別を数値化)
import pandas as pd from sklearn.preprocessing import LabelEncoder # データ準備 df = pd.DataFrame({"Sex": ["male", "female", "female", "male", "male"]}) # Label Encodingの適用 le = LabelEncoder() df["Sex_encoded"] = le.fit_transform(df["Sex"]) print(df)
🔍 出力結果
Sex Sex_encoded 0 male 1 1 female 0 2 female 0 3 male 1 4 male 1
✅ メリット: シンプルで簡単
✅ デメリット: 「male=1」「female=0」のように、数値に意味を持たせてしまうリスク あり
➡ カテゴリに「順序」がない場合は、One-Hot Encodingの方が適切!
📌 4. One-Hot Encoding(ワンホットエンコーディング)
カテゴリ変数を複数の列に分割し、0/1で表現する 方法です。
✅ 実装(乗船地をOne-Hot Encoding)
# データ準備 df = pd.DataFrame({"Embarked": ["S", "C", "Q", "S", "C"]}) # One-Hot Encodingの適用 df = pd.get_dummies(df, columns=["Embarked"], drop_first=True) print(df)
🔍 出力結果
Embarked_Q Embarked_S 0 0 1 1 0 0 2 1 0 3 0 1 4 0 0
✅ メリット: モデルがカテゴリの違いを正しく学習できる
✅ デメリット: カテゴリ数が多すぎると、列が増えすぎてしまう(「次元の呪い」)
➡ カテゴリが多い場合は、Target Encodingを検討!
📌 5. Target Encoding(ターゲットエンコーディング)
カテゴリごとに「目的変数の平均値」を使う手法 です。
例えば、Titanicデータセットでは、乗船地(Embarked)ごとの生存率を計算し、その値で置き換えます。
✅ 実装(Embarkedをターゲットエンコーディング)
# データ準備 df = pd.DataFrame({ "Embarked": ["S", "C", "Q", "S", "C"], "Survived": [0, 1, 1, 0, 1] # 目的変数 }) # 各カテゴリの平均生存率を計算 target_mean = df.groupby("Embarked")["Survived"].mean() # 変換 df["Embarked_encoded"] = df["Embarked"].map(target_mean) print(df)
🔍 出力結果
Embarked Survived Embarked_encoded 0 S 0 0.0 1 C 1 1.0 2 Q 1 1.0 3 S 0 0.0 4 C 1 1.0
✅ メリット: カテゴリ数が多くても次元が増えない
✅ デメリット: 「データリーク」 のリスクがある(訓練データだけで計算し、テストデータに適用する工夫が必要)
➡ カテゴリが多い場合や、One-Hot Encodingが使えない場合に有効!
📌 6. エンコーディング手法の選び方
どの方法を使うべきか?カテゴリの種類に応じて適切な手法を選びましょう!
手法 | 使うべきケース |
---|---|
Label Encoding | カテゴリに「順序」がある場合(例: 小・中・大) |
One-Hot Encoding | カテゴリ数が少なく、順序がない場合(例: 男・女) |
Target Encoding | カテゴリ数が多い場合(例: 国名、商品カテゴリ) |
✅ 順序があるなら「Label Encoding」
✅ カテゴリが少なければ「One-Hot Encoding」
✅ カテゴリが多ければ「Target Encoding」
➡ データの特性に応じて、適切な方法を選ぼう!
🎯 まとめ
✅ カテゴリ変数をそのまま機械学習モデルに使うことはできない!
✅ エンコーディング手法には「Label Encoding」「One-Hot Encoding」「Target Encoding」などがある!
✅ データの特性に応じて、最適なエンコーディングを選ぶことが重要!
Best regards, (^^ゞ