K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

カテゴリカルデータ前処理

01.4

カテゴリカルデータ前処理

まとめ
カテゴリカル変数のエンコーディングは、「元号」「町名」のような文字列の列を、モデルが受け取れる数値の列に置き換える処理です。この章では、カテゴリごとに 0/1 の列を作る One-Hot Encoding、出現回数や出現確率に置き換える Count / Frequency Encoding、カテゴリごとの目的変数の平均に置き換える Target Encoding、そして時系列の順に過去のデータだけで平均を取る Ordered Target Statistics の 4 つを扱います。選ぶ基準はカテゴリ数(10 種類なら One-Hot、1,000 種類なら Count か Target)、目的変数との関係の強さ、時系列の制約の 3 つです。Target Encoding では学習データの正解をそのまま特徴量に写すリークが起きるため、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 に渡し、「その行より前のデータだけ」で平均を取ることで、時系列データで未来の情報が混ざらないようにする手法を確認します。