Codificación por target

Cómo ganar una competición de Kaggle con Python

Yauhen Babakhin

Kaggle Grandmaster

Categorías de alta cardinalidad

 

  • Label encoder asigna un número distinto a cada categoría
  • One-hot encoder crea una nueva variable por valor de categoría
  • ¡La codificación por target lo soluciona!
Cómo ganar una competición de Kaggle con Python

Codificación por media del target

ID train 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 test Categórica Target
10 A ?
11 A ?
12 B ?
13 A ?
Cómo ganar una competición de Kaggle con Python

Codificación por media del target

 

  1. Calcula la media en train y aplícala al test
  2. Divide train en K folds. Calcula la media en (K-1) folds y aplícala al fold K
  3. Añade la variable codificada por media del target al modelo
Cómo ganar una competición de Kaggle con Python

Calcular la media en train

ID train Categórica Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Cómo ganar una competición de Kaggle con Python

Calcular la media en train

ID train Categórica Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Cómo ganar una competición de Kaggle con Python

Calcular la media en train

ID train Categórica Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Cómo ganar una competición de Kaggle con Python

Codificar el test

ID test Categórica Target Media codificada
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Cómo ganar una competición de Kaggle con Python

Codificar train con out-of-fold

ID train Categórica 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
Cómo ganar una competición de Kaggle con Python

Codificar train con out-of-fold

ID train Categórica Target Fold Media 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
Cómo ganar una competición de Kaggle con Python

Codificar train con out-of-fold

ID train Categórica Target Fold Media 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
Cómo ganar una competición de Kaggle con Python

Codificar train con out-of-fold

ID train Categórica Target Fold Media 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
Cómo ganar una competición de Kaggle con Python

Codificar train con out-of-fold

ID train Categórica Target Fold Media 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
Cómo ganar una competición de Kaggle con Python

Guías prácticas

Cómo ganar una competición de Kaggle con Python

Guías prácticas

Suavizado

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

Cómo ganar una competición de Kaggle con Python

Guías prácticas

Suavizado

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

Nuevas categorías

  • Rellena nuevas categorías en el test con la media_global
Cómo ganar una competición de Kaggle con Python

Guías prácticas

 

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

 

ID test Categórica Target Media codificada
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Cómo ganar una competición de Kaggle con Python

¡Vamos a practicar!

Cómo ganar una competición de Kaggle con Python

Preparing Video For Download...