Target encoding

Vencendo uma competição do Kaggle em Python

Yauhen Babakhin

Kaggle Grandmaster

Categorias de alta cardinalidade

 

  • Label encoder dá um número por categoria
  • One-hot cria uma nova feature por valor de categoria
  • Target encoding salva a pátria!
Vencendo uma competição do Kaggle em Python

Mean target encoding

ID treino Categórica Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
ID teste Categórica Target
10 A ?
11 A ?
12 B ?
13 A ?
Vencendo uma competição do Kaggle em Python

Mean target encoding

 

  1. Calcular média no treino e aplicar no teste
  2. Dividir treino em K dobras. Calcular média em (K-1) e aplicar na K-ésima
  3. Adicionar a feature de média do target ao modelo
Vencendo uma competição do Kaggle em Python

Calcular média no treino

ID treino Categórica Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Vencendo uma competição do Kaggle em Python

Calcular média no treino

ID treino Categórica Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Vencendo uma competição do Kaggle em Python

Calcular média no treino

ID treino Categórica Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Vencendo uma competição do Kaggle em Python

Codificação no teste

ID teste Categórica Target Média codificada
10 A ? 0,66
11 A ? 0,66
12 B ? 0,25
13 A ? 0,66
Vencendo uma competição do Kaggle em Python

Codificação no treino com out-of-fold

ID treino Categórica Target Dobra
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
Vencendo uma competição do Kaggle em Python

Codificação no treino com out-of-fold

ID treino Categórica Target Dobra Média codificada
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
Vencendo uma competição do Kaggle em Python

Codificação no treino com out-of-fold

ID treino Categórica Target Dobra Média codificada
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
Vencendo uma competição do Kaggle em Python

Codificação no treino com out-of-fold

ID treino Categórica Target Dobra Média codificada
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
Vencendo uma competição do Kaggle em Python

Codificação no treino com out-of-fold

ID treino Categórica Target Dobra Média codificada
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
Vencendo uma competição do Kaggle em Python

Guias práticos

Vencendo uma competição do Kaggle em Python

Guias práticos

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

Vencendo uma competição do Kaggle em Python

Guias práticos

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

Novas categorias

  • Preencher categorias novas no teste com a global_mean
Vencendo uma competição do Kaggle em Python

Guias práticos

 

ID treino Categórica Target
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

ID teste Categórica Target Média codificada
10 A ? 0,43
11 B ? 0,38
12 C ? 0,40
Vencendo uma competição do Kaggle em Python

Vamos praticar!

Vencendo uma competição do Kaggle em Python

Preparing Video For Download...