Kodowanie docelowe

Zwycięstwo w konkursie Kaggle w Pythonie

Yauhen Babakhin

Kaggle Grandmaster

Cechy kategoryczne o wysokiej kardynalności

 

  • Koder etykiet przypisuje odrębną liczbę każdej kategorii
  • Koder one-hot tworzy nową cechę dla każdej wartości kategorii
  • Z pomocą przychodzi kodowanie docelowe!
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie docelowe średnią

ID treningu Kategoryczna Docelowa
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
ID testowy Kategoryczna Docelowa
10 A ?
11 A ?
12 B ?
13 A ?
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie docelowe średnią

 

  1. Oblicz średnią na zbiorze treningowym i zastosuj do testowego
  2. Podziel zbiór na K foldów. Oblicz średnią na (K-1) foldach i zastosuj do K-tego
  3. Dodaj cechę kodowaną docelową średnią do modelu
Zwycięstwo w konkursie Kaggle w Pythonie

Obliczanie średniej na zbiorze treningowym

ID treningu Kategoryczna Docelowa
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Zwycięstwo w konkursie Kaggle w Pythonie

Obliczanie średniej na zbiorze treningowym

ID treningu Kategoryczna Docelowa
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Zwycięstwo w konkursie Kaggle w Pythonie

Obliczanie średniej na zbiorze treningowym

ID treningu Kategoryczna Docelowa
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie zbioru testowego

ID testowy Kategoryczna Docelowa Kodowanie średnią
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie treningu metodą out-of-fold

ID treningu Kategoryczna Docelowa 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
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie treningu metodą out-of-fold

ID treningu Kategoryczna Docelowa Fold Kodowanie średnią
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
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie treningu metodą out-of-fold

ID treningu Kategoryczna Docelowa Fold Kodowanie średnią
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
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie treningu metodą out-of-fold

ID treningu Kategoryczna Docelowa Fold Kodowanie średnią
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
Zwycięstwo w konkursie Kaggle w Pythonie

Kodowanie treningu metodą out-of-fold

ID treningu Kategoryczna Docelowa Fold Kodowanie średnią
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
Zwycięstwo w konkursie Kaggle w Pythonie

Wskazówki praktyczne

Zwycięstwo w konkursie Kaggle w Pythonie

Wskazówki praktyczne

Wygładzanie

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

Zwycięstwo w konkursie Kaggle w Pythonie

Wskazówki praktyczne

Wygładzanie

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

Nowe kategorie

  • Nowe kategorie w danych testowych należy wypełnić wartością global_mean
Zwycięstwo w konkursie Kaggle w Pythonie

Wskazówki praktyczne

 

ID treningu Kategoryczna Docelowa
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

ID testowy Kategoryczna Docelowa Kodowanie średnią
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Zwycięstwo w konkursie Kaggle w Pythonie

Czas na ćwiczenia!

Zwycięstwo w konkursie Kaggle w Pythonie

Preparing Video For Download...