Cílové kódování

Jak vyhrát soutěž na Kaggle v Pythonu

Yauhen Babakhin

Kaggle Grandmaster

Kategorické příznaky s vysokou kardinalitou

 

  • Label encoder přiřadí každé kategorii jedinečné číslo
  • One-hot encoder vytvoří nový příznak pro každou hodnotu kategorie
  • Pomůže cílové kódování!
Jak vyhrát soutěž na Kaggle v Pythonu

Průměrné cílové kódování

ID (train) Kategorická Cíl
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
ID (test) Kategorická Cíl
10 A ?
11 A ?
12 B ?
13 A ?
Jak vyhrát soutěž na Kaggle v Pythonu

Průměrné cílové kódování

 

  1. Vypočítejte průměr na trénovacích datech, aplikujte na testovací
  2. Rozdělte trénovací data na K foldů. Vypočítejte průměr na (K-1) foldech, aplikujte na K-tý fold
  3. Přidejte příznak s průměrným cílovým kódováním do modelu
Jak vyhrát soutěž na Kaggle v Pythonu

Výpočet průměru na trénovacích datech

ID (train) Kategorická Cíl
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Jak vyhrát soutěž na Kaggle v Pythonu

Výpočet průměru na trénovacích datech

ID (train) Kategorická Cíl
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Jak vyhrát soutěž na Kaggle v Pythonu

Výpočet průměru na trénovacích datech

ID (train) Kategorická Cíl
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Jak vyhrát soutěž na Kaggle v Pythonu

Kódování testovacích dat

ID (test) Kategorická Cíl Průměrné kódování
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Jak vyhrát soutěž na Kaggle v Pythonu

Kódování trénovacích dat metodou out-of-fold

ID (train) Kategorická Cíl 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
Jak vyhrát soutěž na Kaggle v Pythonu

Kódování trénovacích dat metodou out-of-fold

ID (train) Kategorická Cíl Fold Průměrné kódování
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
Jak vyhrát soutěž na Kaggle v Pythonu

Kódování trénovacích dat metodou out-of-fold

ID (train) Kategorická Cíl Fold Průměrné kódování
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
Jak vyhrát soutěž na Kaggle v Pythonu

Kódování trénovacích dat metodou out-of-fold

ID (train) Kategorická Cíl Fold Průměrné kódování
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
Jak vyhrát soutěž na Kaggle v Pythonu

Kódování trénovacích dat metodou out-of-fold

ID (train) Kategorická Cíl Fold Průměrné kódování
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
Jak vyhrát soutěž na Kaggle v Pythonu

Praktické pokyny

Jak vyhrát soutěž na Kaggle v Pythonu

Praktické pokyny

Vyhlazování

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

Jak vyhrát soutěž na Kaggle v Pythonu

Praktické pokyny

Vyhlazování

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

Nové kategorie

  • Nové kategorie v testovacích datech vyplňte hodnotou global_mean
Jak vyhrát soutěž na Kaggle v Pythonu

Praktické pokyny

 

ID (train) Kategorická Cíl
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

ID (test) Kategorická Cíl Průměrné kódování
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Jak vyhrát soutěž na Kaggle v Pythonu

Lass uns üben!

Jak vyhrát soutěž na Kaggle v Pythonu

Preparing Video For Download...