Кодування таргету

Як перемагати в змаганнях Kaggle за допомогою Python

Yauhen Babakhin

Kaggle Grandmaster

Категоріальні ознаки з високою кардинальністю

 

  • Label encoder присвоює унікальний номер кожній категорії
  • One-hot encoder створює нову ознаку для кожного значення категорії
  • Допоможе target encoding!
Як перемагати в змаганнях Kaggle за допомогою Python

Середнє кодування таргету

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Test ID Categorical Target
10 A ?
11 A ?
12 B ?
13 A ?
Як перемагати в змаганнях Kaggle за допомогою Python

Середнє кодування таргету

 

  1. Обчисліть середнє на train, застосуйте до test
  2. Розбийте train на K фолдів. Рахуйте середнє на (K-1) фолдах, застосуйте до K-го фолда
  3. Додайте ознаку із середнім до моделі
Як перемагати в змаганнях Kaggle за допомогою Python

Обчисліть середнє на train

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Як перемагати в змаганнях Kaggle за допомогою Python

Обчисліть середнє на train

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Як перемагати в змаганнях Kaggle за допомогою Python

Обчисліть середнє на train

Train ID Categorical Target
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Як перемагати в змаганнях Kaggle за допомогою Python

Кодування для test

Test ID Categorical Target Mean encoded
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Як перемагати в змаганнях Kaggle за допомогою Python

Кодування на train з out-of-fold

Train ID Categorical 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
Як перемагати в змаганнях Kaggle за допомогою Python

Кодування на train з out-of-fold

Train ID Categorical 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
Як перемагати в змаганнях Kaggle за допомогою Python

Кодування на train з out-of-fold

Train ID Categorical 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
Як перемагати в змаганнях Kaggle за допомогою Python

Кодування на train з out-of-fold

Train ID Categorical 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
Як перемагати в змаганнях Kaggle за допомогою Python

Кодування на train з out-of-fold

Train ID Categorical 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
Як перемагати в змаганнях Kaggle за допомогою Python

Практичні поради

Як перемагати в змаганнях Kaggle за допомогою Python

Практичні поради

Згладжування

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

Як перемагати в змаганнях Kaggle за допомогою Python

Практичні поради

Згладжування

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

Нові категорії

  • Заповнюйте нові категорії у тестових даних global_mean
Як перемагати в змаганнях Kaggle за допомогою Python

Практичні поради

 

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

 

Test ID Categorical Target Mean encoded
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Як перемагати в змаганнях Kaggle за допомогою Python

Давайте потренуємось!

Як перемагати в змаганнях Kaggle за допомогою Python

Preparing Video For Download...