Target encoding

Memenangi Kompetisi Kaggle dengan Python

Yauhen Babakhin

Kaggle Grandmaster

Fitur kategorikal berkardinalitas tinggi

 

  • Label encoder memberi nomor unik untuk tiap kategori
  • One-hot encoder membuat fitur baru untuk tiap nilai kategori
  • Target encoding jadi solusinya!
Memenangi Kompetisi Kaggle dengan Python

Mean target encoding

ID Train Kategorikal Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
ID Test Kategorikal Target
10 A ?
11 A ?
12 B ?
13 A ?
Memenangi Kompetisi Kaggle dengan Python

Mean target encoding

 

  1. Hitung rata-rata pada train, terapkan ke test
  2. Bagi train jadi K fold. Hitung rata-rata pada (K-1) fold, terapkan ke fold ke-K
  3. Tambahkan fitur mean target encoded ke model
Memenangi Kompetisi Kaggle dengan Python

Hitung rata-rata pada train

ID Train Kategorikal Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Memenangi Kompetisi Kaggle dengan Python

Hitung rata-rata pada train

ID Train Kategorikal Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Memenangi Kompetisi Kaggle dengan Python

Hitung rata-rata pada train

ID Train Kategorikal Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Memenangi Kompetisi Kaggle dengan Python

Encoding pada test

ID Test Kategorikal Target Mean encoded
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Memenangi Kompetisi Kaggle dengan Python

Encoding train dengan out-of-fold

ID Train Kategorikal 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
Memenangi Kompetisi Kaggle dengan Python

Encoding train dengan out-of-fold

ID Train Kategorikal 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
Memenangi Kompetisi Kaggle dengan Python

Encoding train dengan out-of-fold

ID Train Kategorikal 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
Memenangi Kompetisi Kaggle dengan Python

Encoding train dengan out-of-fold

ID Train Kategorikal 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
Memenangi Kompetisi Kaggle dengan Python

Encoding train dengan out-of-fold

ID Train Kategorikal 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
Memenangi Kompetisi Kaggle dengan Python

Panduan praktis

Memenangi Kompetisi Kaggle dengan Python

Panduan praktis

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]$$

Memenangi Kompetisi Kaggle dengan Python

Panduan praktis

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]$$

Kategori baru

  • Isi kategori baru di data test dengan global_mean
Memenangi Kompetisi Kaggle dengan Python

Panduan praktis

 

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

 

ID Test Kategorikal Target Mean encoded
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Memenangi Kompetisi Kaggle dengan Python

Ayo berlatih!

Memenangi Kompetisi Kaggle dengan Python

Preparing Video For Download...