Целевое кодирование

Победа в соревновании Kaggle на Python

Yauhen Babakhin

Kaggle Grandmaster

Категориальные признаки с высокой мощностью

 

  • Label encoder присваивает каждой категории уникальное число
  • One-hot encoder создаёт новый признак для каждого значения категории
  • На помощь приходит целевое кодирование!
Победа в соревновании 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. Вычислите среднее на обучающей выборке, примените к тестовой
  2. Разбейте обучающую выборку на K фолдов. Вычислите среднее на (K-1) фолдах, примените к K-му
  3. Добавьте признак со средним целевым кодированием в модель
Победа в соревновании 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
Победа в соревновании 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
Победа в соревновании 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
Победа в соревновании Kaggle на Python

Кодирование тестовой выборки

Test ID Categorical Target Mean encoded
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Победа в соревновании Kaggle на Python

Кодирование обучающей выборки методом 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

Кодирование обучающей выборки методом 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

Кодирование обучающей выборки методом 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

Кодирование обучающей выборки методом 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

Кодирование обучающей выборки методом 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...