Target encoding

การแข่งขัน Kaggle ด้วย Python

Yauhen Babakhin

Kaggle Grandmaster

ฟีเจอร์หมวดหมู่ที่มี Cardinality สูง

 

  • Label encoder กำหนดตัวเลขที่แตกต่างกันให้แต่ละหมวดหมู่
  • One-hot encoder สร้างฟีเจอร์ใหม่สำหรับแต่ละค่าในหมวดหมู่
  • Target encoding ช่วยแก้ปัญหานี้!
การแข่งขัน Kaggle ด้วย Python

Mean target encoding

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

Mean target encoding

 

  1. คำนวณค่าเฉลี่ยจากชุด train แล้วนำไปใช้กับชุด test
  2. แบ่ง train เป็น K folds คำนวณค่าเฉลี่ยจาก (K-1) folds แล้วนำไปใช้กับ fold ที่ K
  3. เพิ่มฟีเจอร์ที่เข้ารหัสด้วย mean target เข้าสู่โมเดล
การแข่งขัน 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

แนวทางปฏิบัติ

Smoothing

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

แนวทางปฏิบัติ

Smoothing

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

หมวดหมู่ใหม่

  • ให้แทนที่หมวดหมู่ใหม่ในชุด test ด้วย 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...