カテゴリ変数の処理

機械学習におけるカテゴリ変数の処理(Categorical Variable Handling)は、モデルが数値データを前提としているため、文字列やラベルなどのカテゴリデータを数値に変換する必要があります。適切な処理を行わなければ、モデルの性能が著しく低下する可能性があります。

以下に、カテゴリ変数の代表的な処理方法とその特徴について詳しく説明します。


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

概要

各カテゴリ値を整数のラベルに変換する方法です。たとえば、「赤」「青」「緑」というカテゴリは、0, 1, 2 に変換されます。

特徴

  • シンプルでメモリ効率が良い。

  • **順序が意味を持つカテゴリ(Ordinal variables)**には有効。

注意点

  • **順序がないカテゴリ(Nominal variables)**に対して使用すると、モデルが「0 < 1 < 2」のような誤解をする可能性がある。


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

概要

カテゴリごとに新しいバイナリ特徴量を作成します。たとえば「赤」「青」「緑」は以下のようになります:

1 0 0
0 1 0
0 0 1

特徴

  • カテゴリに順序がない場合に有効

  • モデルに順序を誤解させない。

注意点

  • カテゴリ数が多いと次元が増加(高次元化)し、計算負荷が増える。


3. 順序エンコーディング(Ordinal Encoding)

概要

カテゴリに意味のある順序がある場合に、明示的にその順序を数値で表現します。たとえば「小 < 中 < 大」を 0, 1, 2 にする。

特徴

  • 順序関係がモデルに伝わる。

  • ラベルエンコーディングと似ているが、順序の意味を前提とする点が異なる。


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

概要

カテゴリごとに目的変数の平均値などの統計量を使用して数値化する手法。

特徴

  • 特に**高カードinality(ユニークなカテゴリ数が多い)**な場合に有効。

  • 学習データに対して強力なエンコーディングだが、過学習のリスクがある。

対策

  • クロスバリデーションと組み合わせて使用。

  • 正則化(平均との重み付き平均)を適用。


5. パイプラインでのカテゴリ処理の実装例(scikit-learn)

python
from sklearn.pipeline import Pipeline from sklearn.preprocessing import OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.ensemble import RandomForestClassifier categorical_features = ['色', 'サイズ'] categorical_transformer = OneHotEncoder(handle_unknown='ignore') preprocessor = ColumnTransformer( transformers=[ ('cat', categorical_transformer, categorical_features) ] ) pipeline = Pipeline(steps=[ ('preprocessor', preprocessor), ('classifier', RandomForestClassifier()) ])

まとめ

手法 順序前提 高次元リスク 高カードinality対応 説明
ラベルエンコーディング 不適またはあり シンプルだが誤解の危険あり
ワンホットエンコーディング 不要 × 順序がない場合に安全
順序エンコーディング 必須 明示的な順序ありカテゴリ向け
ターゲットエンコーディング 不要 低〜中 過学習に注意

カテゴリ変数の処理は、モデル性能と解釈性に直結します。対象の変数が順序ありか、なしなのか、またカテゴリ数が多いかどうかを考慮して、適切な手法を選ぶことが重要です。必要に応じて、複数の手法を組み合わせることもあります。

生成日:2025/06/01