カテゴリカル特徴量(categorical feature)は、統計学や機械学習において、有限個の離散的な値(カテゴリ)を取る変数である。これらのカテゴリは通常、名義尺度または順序尺度に分類され、数値的な大小関係を持たないか、持つ場合でもその間隔が定義されない。そのため、多くの統計モデルやアルゴリズムで直接扱うことができず、数値データへの変換(エンコーディング)が必要となる。
1.1 定義と分類
カテゴリカル特徴量は、その尺度水準に基づいて名義尺度と順序尺度に大別される。この分類は、データの性質と適切なエンコーディング手法を選択する上で重要である。
1.1.1 名義尺度(ノミナル)
名義尺度(nominal scale)は、カテゴリ間に順序や大小関係が存在しない変数を指す。例として、性別(男性、女性、その他)、血液型(A型、B型、O型、AB型)、居住地域(東京、大阪、福岡)などが挙げられる。各カテゴリは単なるラベルとして機能し、加減乗除の演算は不可能である。エンコーディングでは、One-Hotエンコーディングなどの手法が一般的に用いられる。
1.1.2 順序尺度(オーディナル)
順序尺度(ordinal scale)は、カテゴリ間に明確な順序が存在する変数を指す。例として、学歴(中学校、高校、大学、大学院)、満足度(低い、普通、高い)、サイズ(S、M、L、XL)などが挙げられる。順序はあるが、カテゴリ間の間隔は均一ではない。エンコーディングでは、ラベルエンコーディング(整数値を割り当てる)が可能だが、順序の意味を保持するために注意が必要である。
1.2 数値特徴量との違い
数値特徴量(numerical feature)が連続的または離散的な数値を取り、加減乗除が可能であるのに対し、カテゴリカル特徴量は名義尺度の場合に数値演算が無意味であり、順序尺度でも間隔が不確定である。また、数値特徴量はそのままモデルに入力できるが、カテゴリカル特徴量はエンコーディングによる変換が必須である。さらに、カテゴリカル特徴量は次元数が増えやすく(特にOne-Hotエンコーディング時)、スパース性を引き起こす点でも異なる。
カテゴリカル特徴量を数値データに変換するエンコーディング手法は、問題設定やデータの特性に応じて多様に存在する。以下では、単純な手法から統計的手法、高次元向け手法までを解説する。
2.1 単純なエンコーディング
2.1.1 ラベルエンコーディング
ラベルエンコーディング(label encoding)は、各カテゴリに一意の整数(例えば0, 1, 2, …)を割り当てる手法である。実装が容易でメモリ使用量が少ないが、順序尺度でない名義尺度に適用すると、誤った順序関係をモデルに学習させてしまうリスクがある。主に決定木系モデル(順序を考慮しない)や、カテゴリに自然な順序がある場合に利用される。
2.1.2 One-Hotエンコーディング
One-Hotエンコーディング(one-hot encoding)は、カテゴリ数と同じ次元のバイナリベクトルを作成し、該当するカテゴリの次元のみを1、他を0とする手法である。名義尺度に対して安全で、多くの線形モデルやニューラルネットワークで使用される。ただし、カテゴリ数が多いと次元数が爆発し(次元の呪い)、スパースな特徴量が生成される欠点がある。
2.2 統計的エンコーディング
2.2.1 Targetエンコーディング
Targetエンコーディング(target encoding)は、カテゴリごとの目的変数の平均値(回帰の場合)または平均確率(分類の場合)を割り当てる手法である。カテゴリと目的変数の関係を直接埋め込めるため、高次元データでも有効だが、過学習を引き起こしやすい。
2.2.1.1 過学習防止策(正則化)
過学習を防ぐため、スムージングやクロスバリデーションが用いられる。例えば、全体の平均とカテゴリ内の平均を重み付きで混合する方法(例:weight = count / (count + regularize_param))や、k-foldクロスバリデーションで各フォールドごとに別々のエンコーディングを計算する手法がある。これにより、未知のカテゴリに対する汎化性能が向上する。
2.2.2 頻度エンコーディング
頻度エンコーディング(frequency encoding)は、各カテゴリの出現頻度(カウント)または出現確率を数値として割り当てる手法である。実装が簡単で、スパース性を抑えられるが、カテゴリの意味的な情報が失われる可能性がある。また、頻度が似ているカテゴリは区別が難しくなる。
2.3 高次元データ向け手法
2.3.1 ハッシュエンコーディング
ハッシュエンコーディング(hash encoding)は、カテゴリ値をハッシュ関数で固定長のベクトルに変換する手法である。次元数をユーザーが指定できるため、メモリ使用量を制御可能だが、異なるカテゴリが同じハッシュ値に衝突する可能性(衝突)がある。大規模なカテゴリ変数(例:ユーザーID)に有効である。
2.3.2 ビン分割による数値化
ビン分割(binning)は、連続値を離散化する手法の逆で、カテゴリカル特徴量を順序尺度として扱い、適切な数値範囲にマッピングする。例えば、順序尺度を持つカテゴリ(小、中、大)をそれぞれ1, 2, 3に変換する。ただし、名義尺度には適用できず、ビンの数や間隔の設定が性能に影響する。
3.1 カテゴリ数の影響
カテゴリ数が少ない(例えば10未満)場合はOne-Hotエンコーディングが安全だが、数百から数千と多い場合、次元爆発やスパース性が問題となる。また、稀なカテゴリ(出現頻度が極めて低い)は、統計的エンコーディングでノイズを引き起こすため、統合(例:「その他」カテゴリにまとめる)が推奨される。
3.2 スパース性と次元の呪い
One-Hotエンコーディングは多くの0要素を生成し、スパース行列を生む。スパース性はメモリ効率を悪化させ、一部のモデル(線形回帰など)で学習が不安定になる。また、次元数がサンプル数に近づくと(次元の呪い)、過学習や計算コスト増大を招く。ハッシュエンコーディングや頻度エンコーディングはこの問題を軽減できる。
3.3 モデル選択とエンコーディングの関係
モデルによって適したエンコーディングは異なる。線形モデル(ロジスティック回帰、SVM)はOne-Hotエンコーディングとの相性が良い。決定木やランダムフォレストはラベルエンコーディングでも機能するが、名義尺度の場合はOne-Hotが安全。勾配ブースティング(XGBoost, LightGBM)は統計的エンコーディングを内蔵するものもあり、Targetエンコーディングが効果的である。ニューラルネットワークでは、カテゴリ数が多い場合に埋め込み層(embedding layer)がよく使われる(深層学習の項参照)。
4.1 カテゴリカル特徴量の可視化
カテゴリカル特徴量の可視化には、棒グラフ(各カテゴリの頻度)、ヒートマップ(カテゴリ間の共起)、またはモザイクプロット(目的変数との関係)が用いられる。PCAやt-SNEなどの次元削減手法を適用する場合は、適切なエンコーディング(例:One-Hot)が前提となる。
4.2 カテゴリカルデータの統計的仮説検定
カテゴリカルデータ間の独立性検定には、カイ二乗検定(χ² test)が一般的である。フィッシャーの正確確率検定は、サンプル数が少ない場合に使用される。また、カテゴリカル特徴量と連続値目的変数の関係を評価するには、分散分析(ANOVA)またはクラスカル・ウォリス検定(順序尺度)が適切である。
4.3 カテゴリカル特徴量と深層学習
深層学習では、高次元のカテゴリカル特徴量に埋め込み層(embedding layer)を用いることで、低次元の密なベクトルに変換する。これは、One-Hotエンコーディングの次元爆発を回避しつつ、カテゴリ間の意味的な類似性を学習できる。また、自然言語処理における単語埋め込み(word2vec)も、カテゴリカルデータの一種として扱える。注意点として、埋め込み次元はカテゴリ数の平方根程度に設定されることが多い。