Mã hóa theo mục tiêu

Chinh phục cuộc thi Kaggle bằng Python

Yauhen Babakhin

Kaggle Grandmaster

Đặc trưng phân loại có lực lượng lớn

 

  • Label encoder gán số riêng cho mỗi hạng mục
  • One-hot encoder tạo đặc trưng mới cho mỗi giá trị hạng mục
  • Target encoding là giải pháp!
Chinh phục cuộc thi Kaggle bằng Python

Mã hóa mục tiêu trung bình

Train ID Phân loại Mục tiêu
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Test ID Phân loại Mục tiêu
10 A ?
11 A ?
12 B ?
13 A ?
Chinh phục cuộc thi Kaggle bằng Python

Mã hóa mục tiêu trung bình

 

  1. Tính trung bình trên train, áp dụng cho test
  2. Chia train thành K fold. Tính trung bình trên (K-1) fold, áp dụng cho fold thứ K
  3. Thêm đặc trưng mã hóa mục tiêu trung bình vào mô hình
Chinh phục cuộc thi Kaggle bằng Python

Tính trung bình trên tập train

Train ID Phân loại Mục tiêu
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Chinh phục cuộc thi Kaggle bằng Python

Tính trung bình trên tập train

Train ID Phân loại Mục tiêu
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Chinh phục cuộc thi Kaggle bằng Python

Tính trung bình trên tập train

Train ID Phân loại Mục tiêu
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Chinh phục cuộc thi Kaggle bằng Python

Kiểm tra mã hóa

Test ID Phân loại Mục tiêu Mã hóa trung bình
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Chinh phục cuộc thi Kaggle bằng Python

Mã hóa train dùng out-of-fold

Train ID Phân loại Mục tiêu 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
Chinh phục cuộc thi Kaggle bằng Python

Mã hóa train dùng out-of-fold

Train ID Phân loại Mục tiêu Fold Mã hóa trung bình
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
Chinh phục cuộc thi Kaggle bằng Python

Mã hóa train dùng out-of-fold

Train ID Phân loại Mục tiêu Fold Mã hóa trung bình
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
Chinh phục cuộc thi Kaggle bằng Python

Mã hóa train dùng out-of-fold

Train ID Phân loại Mục tiêu Fold Mã hóa trung bình
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
Chinh phục cuộc thi Kaggle bằng Python

Mã hóa train dùng out-of-fold

Train ID Phân loại Mục tiêu Fold Mã hóa trung bình
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
Chinh phục cuộc thi Kaggle bằng Python

Hướng dẫn thực hành

Chinh phục cuộc thi Kaggle bằng Python

Hướng dẫn thực hành

Làm trơ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]$$

Chinh phục cuộc thi Kaggle bằng Python

Hướng dẫn thực hành

Làm trơ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]$$

Hạng mục mới

  • Điền hạng mục mới trong dữ liệu test bằng global_mean
Chinh phục cuộc thi Kaggle bằng Python

Hướng dẫn thực hành

 

Train ID Phân loại Mục tiêu
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

Test ID Phân loại Mục tiêu Mã hóa trung bình
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Chinh phục cuộc thi Kaggle bằng Python

Hãy luyện tập!

Chinh phục cuộc thi Kaggle bằng Python

Preparing Video For Download...