01.4
カテゴリカルデータ前処理
KFold で分けた他の fold の平均(OOF)を使う設計を押さえます。直感 #
実務データの多くは文字列やラベル型の特徴量で構成されます。「町名」が 1,000 種類ある列を One-Hot にすると列が 1,000 本増えて次元爆発が起き、同じ列を Target Encoding で「町ごとの人口平均」に置き換えると、その平均に自分自身の正解が含まれるリークが起きます。数値化の方法を誤ると、このどちらかでモデルの性能が頭打ちになります。このチャプターでは、カテゴリの粒度と目的変数との関係を踏まえて、OneHotEncoder・CountEncoder・TargetEncoder を選び分ける判断軸を身に付けます。
詳細な解説 #
このチャプターで学べること #
- One-Hot Encodingの基本と、高次元化を防ぐための正則化との組み合わせ
- Count/Frequency Encodingで次元を増やさず分布情報を取り入れる方法
- Target/Mean Encodingで目的変数の情報を効率的に反映しつつリークを防ぐ設計
- Ordered Target Statisticsで時系列データの未来リークを回避する手法
これがわかるとできること #
- カテゴリ数や目的変数との関係に応じて最適なエンコーディングを選択できる
- KFold/OOFを使ったリーク防止の実装を設計できる
- 希少カテゴリの統合や交互作用の生成を体系的に進められる
学習の進め方 #
まず One-Hot Encoding で、OneHotEncoder(handle_unknown="ignore") を ColumnTransformer に入れて数値列と一緒に Ridge へ渡す、という数値化の基本の形を理解します。次に Count / Frequency Encoding に進み、CountEncoder(normalize=True) で列を 1 本に抑えたまま「そのカテゴリがどれくらい多いか」をモデルに渡す方法を学びます。続けて Target Encoding で、KFold の fold ごとに平均を計算する OOF の実装と、smoothing による少数カテゴリの平滑化を押さえます。最後に Ordered Target Statistics で、sort_values("西暦") で時系列順に並べたデータを CatBoostEncoder に渡し、「その行より前のデータだけ」で平均を取ることで、時系列データで未来の情報が混ざらないようにする手法を確認します。