3.4.3
Count / Frequency Encoding
概要 #
Count Encoding(Frequency Encoding)は、各カテゴリの出現回数や出現確率を数値として付与する手法です。ワンホットより低次元で、カテゴリの人気度を暗に表現できるため、LightGBM や XGBoost などの木モデルでよく使われます。
特徴 #
- 利点: 次元数が 1 列で済み、学習・推論が高速。カテゴリ間の頻度差をヒューリスティックに取り込める。
- 欠点: 頻度=目的変数との関連とは限らないため、情報が足りない場合は Target Encoding などと組み合わせる。
実装レシピ #
| |
主要オプション #
| パラメータ | 意味 | 推奨値 |
|---|---|---|
normalize | 出現回数をそのまま使うか、全体で割って確率にするか | 次元スケールを合わせたい場合は True |
min_group_size | 少数カテゴリをまとめる閾値 | データ量が偏る場合に活用 |
handle_unknown | 未知カテゴリをどう扱うか | "value" にして平均頻度を代入する等 |
典型的なユースケース #
大量カテゴリだが、ターゲットとの相関は弱そうなとき
例: 「町名」「商品ID」など。Count Encoding でベースラインを作り、重要度が高い列だけ Target Encoding へ切り替える。数値特徴量との交互作用を作りたいとき
Count Encoding した列と、売上やアクセス数などを掛け合わせることで「カテゴリ別トラフィック重み付き特徴量」を作成。データリークを避けたいとき
Target Encoding と違い、目的変数を直接参照しないためリークリスクが低い。
モデル学習での扱い #
| |
Count Encoding 列は 1 本なので、そのままモデルに渡すだけで済みます。パイプラインの一部に category_encoders を入れておくと、本番環境での再現性も担保しやすくなります。
品質チェックリスト #
- カテゴリの分布が極端ではないか?(大半が同一カテゴリなら効果が薄い)
- Count と Frequency のどちらがモデルに合うか、バリデーションで確認したか?
- 未知カテゴリや欠損(NaN)に対する挙動をテストしたか?
- 重要度が高かった場合、追加で Target Encoding や平均ターゲットとの比較を試したか?
参考 #
- category_encoders.count.CountEncoder
- 実プロジェクトでは Count Encoding + Target Encoding のハイブリッドを試す価値が高い(Count をベースに、上位カテゴリだけ Target Encoding するなど)。