Target encoding

Vincere una competizione Kaggle con Python

Yauhen Babakhin

Kaggle Grandmaster

Feature categoriche ad alta cardinalità

 

  • Il label encoder assegna un numero distinto a ogni categoria
  • L'one-hot encoder crea una nuova feature per ogni valore di categoria
  • Target encoding al salvataggio!
Vincere una competizione Kaggle con Python

Mean target encoding

ID train Categoriale Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
ID test Categoriale Target
10 A ?
11 A ?
12 B ?
13 A ?
Vincere una competizione Kaggle con Python

Mean target encoding

 

  1. Calcola la media sul train, applica al test
  2. Dividi il train in K fold. Calcola la media su (K-1) fold, applica al K-esimo fold
  3. Aggiungi la feature mean target encoded al modello
Vincere una competizione Kaggle con Python

Calcola la media sul train

ID train Categoriale Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Vincere una competizione Kaggle con Python

Calcola la media sul train

ID train Categoriale Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Vincere una competizione Kaggle con Python

Calcola la media sul train

ID train Categoriale Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Vincere una competizione Kaggle con Python

Encoding sul test

ID test Categoriale Target Mean encoded
10 A ? 0,66
11 A ? 0,66
12 B ? 0,25
13 A ? 0,66
Vincere una competizione Kaggle con Python

Encoding sul train con out-of-fold

ID train Categoriale 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
Vincere una competizione Kaggle con Python

Encoding sul train con out-of-fold

ID train Categoriale 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
Vincere una competizione Kaggle con Python

Encoding sul train con out-of-fold

ID train Categoriale 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
Vincere una competizione Kaggle con Python

Encoding sul train con out-of-fold

ID train Categoriale 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
Vincere una competizione Kaggle con Python

Encoding sul train con out-of-fold

ID train Categoriale 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
Vincere una competizione Kaggle con Python

Guide pratiche

Vincere una competizione Kaggle con Python

Guide pratiche

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

Vincere una competizione Kaggle con Python

Guide pratiche

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

Nuove categorie

  • Riempi le nuove categorie nel test con una global_mean
Vincere una competizione Kaggle con Python

Guide pratiche

 

ID train Categoriale Target
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

ID test Categoriale Target Mean encoded
10 A ? 0,43
11 B ? 0,38
12 C ? 0,40
Vincere una competizione Kaggle con Python

Passons à la pratique !

Vincere una competizione Kaggle con Python

Preparing Video For Download...