ターゲットエンコーディング

Pythonで挑むKaggleコンペティション

Yauhen Babakhin

Kaggle Grandmaster

高カーディナリティのカテゴリ特徴量

 

  • ラベルエンコーダは各カテゴリに一意の数を割り当てる
  • ワンホットはカテゴリごとに新しい特徴量を作る
  • ターゲットエンコーディングで解決!
Pythonで挑むKaggleコンペティション

平均ターゲットエンコーディング

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Test ID Categorical Target
10 A ?
11 A ?
12 B ?
13 A ?
Pythonで挑むKaggleコンペティション

平均ターゲットエンコーディング

 

  1. 学習で平均を計算し、テストに適用
  2. 学習をK分割。K-1分割で平均を計算し、K番目に適用
  3. 平均ターゲット特徴量をモデルに追加
Pythonで挑むKaggleコンペティション

学習データで平均を計算

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Pythonで挑むKaggleコンペティション

学習データで平均を計算

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Pythonで挑むKaggleコンペティション

学習データで平均を計算

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Pythonで挑むKaggleコンペティション

テストへの適用

Test ID Categorical Target Mean encoded
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Pythonで挑むKaggleコンペティション

学習データのOOFエンコーディング

Train ID Categorical Target Fold
1 A 1 1
2 B 0 1
3 B 0 1
4 A 1 1
5 B 0 2
6 A 0 2
7 B 1 2
Pythonで挑むKaggleコンペティション

学習データのOOFエンコーディング

Train ID Categorical Target Fold Mean encoded
1 A 1 1
2 B 0 1
3 B 0 1
4 A 1 1
5 B 0 2
6 A 0 2
7 B 1 2
Pythonで挑むKaggleコンペティション

学習データのOOFエンコーディング

Train ID Categorical Target Fold Mean encoded
1 A 1 1 0
2 B 0 1 0.5
3 B 0 1 0.5
4 A 1 1 0
5 B 0 2
6 A 0 2
7 B 1 2
Pythonで挑むKaggleコンペティション

学習データのOOFエンコーディング

Train ID Categorical Target Fold Mean encoded
1 A 1 1 0
2 B 0 1 0.5
3 B 0 1 0.5
4 A 1 1 0
5 B 0 2
6 A 0 2
7 B 1 2
Pythonで挑むKaggleコンペティション

学習データのOOFエンコーディング

Train ID Categorical Target Fold Mean encoded
1 A 1 1 0
2 B 0 1 0.5
3 B 0 1 0.5
4 A 1 1 0
5 B 0 2 0
6 A 0 2 1
7 B 1 2 0
Pythonで挑むKaggleコンペティション

実務ガイド

Pythonで挑むKaggleコンペティション

実務ガイド

スムージング

$$mean\_enc_i = \frac{target\_sum_i}{n_i}$$

$$smoothed\_mean\_enc_i = \frac{target\_sum_i + \alpha*global\_mean}{n_i + \alpha}$$

$$\alpha \in [5; 10]$$

Pythonで挑むKaggleコンペティション

実務ガイド

スムージング

$$mean\_enc_i = \frac{target\_sum_i}{n_i}$$

$$smoothed\_mean\_enc_i = \frac{target\_sum_i + \alpha*global\_mean}{n_i + \alpha}$$

$$\alpha \in [5; 10]$$

新規カテゴリ

  • テストの新規カテゴリは global_mean で埋める
Pythonで挑むKaggleコンペティション

実務ガイド

 

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

Test ID Categorical Target Mean encoded
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Pythonで挑むKaggleコンペティション

Passons à la pratique !

Pythonで挑むKaggleコンペティション

Preparing Video For Download...