目標編碼

用 Python 拿下 Kaggle 競賽

Yauhen Babakhin

Kaggle Grandmaster

高基數類別特徵

 

  • Label encoder 為每個類別指派不同數字
  • One-hot encoder 為每個類別值建立新特徵
  • 改用目標編碼!
用 Python 拿下 Kaggle 競賽

平均目標編碼

訓練 ID 類別 目標
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
測試 ID 類別 目標
10 A ?
11 A ?
12 B ?
13 A ?
用 Python 拿下 Kaggle 競賽

平均目標編碼

 

  1. 在訓練集計算平均值,套用到測試集
  2. 將訓練集切成 K 折。在(K-1)折上計算平均,套用到第 K 折
  3. 將平均目標編碼後的特徵加入模型
用 Python 拿下 Kaggle 競賽

在訓練集計算平均

訓練 ID 類別 目標
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
用 Python 拿下 Kaggle 競賽

在訓練集計算平均

訓練 ID 類別 目標
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
用 Python 拿下 Kaggle 競賽

在訓練集計算平均

訓練 ID 類別 目標
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
用 Python 拿下 Kaggle 競賽

測試集編碼

測試 ID 類別 目標 平均編碼
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
用 Python 拿下 Kaggle 競賽

使用 out-of-fold 的訓練編碼

訓練 ID 類別 目標 折數
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 競賽

使用 out-of-fold 的訓練編碼

訓練 ID 類別 目標 折數 平均編碼
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 競賽

使用 out-of-fold 的訓練編碼

訓練 ID 類別 目標 折數 平均編碼
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 競賽

使用 out-of-fold 的訓練編碼

訓練 ID 類別 目標 折數 平均編碼
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 競賽

使用 out-of-fold 的訓練編碼

訓練 ID 類別 目標 折數 平均編碼
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 競賽

實務指南

平滑化(Smoothing)

$$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 競賽

實務指南

平滑化(Smoothing)

$$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 競賽

實務指南

 

訓練 ID 類別 目標
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

測試 ID 類別 目標 平均編碼
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
用 Python 拿下 Kaggle 競賽

一起來練習吧!

用 Python 拿下 Kaggle 競賽

Preparing Video For Download...