타깃 인코딩

Python으로 Kaggle 대회 공략하기

Yauhen Babakhin

Kaggle Grandmaster

고유값이 많은 범주형 특성

 

  • 라벨 인코더: 각 범주에 고유 번호 부여
  • 원-핫 인코더: 각 범주 값마다 새 특성 생성
  • 타깃 인코딩으로 해결!
Python으로 Kaggle 대회 공략하기

평균 타깃 인코딩

학습 ID 범주형 타깃
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
테스트 ID 범주형 타깃
10 A ?
11 A ?
12 B ?
13 A ?
Python으로 Kaggle 대회 공략하기

평균 타깃 인코딩

 

  1. 학습에서 평균 계산, 테스트에 적용
  2. 학습을 K 폴드로 분할. (K-1) 폴드에서 평균 계산, K번째 폴드에 적용
  3. 평균 타깃 인코딩 특성을 모델에 추가
Python으로 Kaggle 대회 공략하기

학습 데이터에서 평균 계산

학습 ID 범주형 타깃
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Python으로 Kaggle 대회 공략하기

학습 데이터에서 평균 계산

학습 ID 범주형 타깃
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Python으로 Kaggle 대회 공략하기

학습 데이터에서 평균 계산

학습 ID 범주형 타깃
1 A 1
2 B 0
3 B 0
4 A 1
5 B 0
6 A 0
7 B 1
Python으로 Kaggle 대회 공략하기

테스트 인코딩

테스트 ID 범주형 타깃 평균 인코딩
10 A ? 0.66
11 A ? 0.66
12 B ? 0.25
13 A ? 0.66
Python으로 Kaggle 대회 공략하기

폴드 외(OOF)로 학습 인코딩

학습 ID 범주형 타깃 폴드
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
Python으로 Kaggle 대회 공략하기

폴드 외(OOF)로 학습 인코딩

학습 ID 범주형 타깃 폴드 평균 인코딩
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
Python으로 Kaggle 대회 공략하기

폴드 외(OOF)로 학습 인코딩

학습 ID 범주형 타깃 폴드 평균 인코딩
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
Python으로 Kaggle 대회 공략하기

폴드 외(OOF)로 학습 인코딩

학습 ID 범주형 타깃 폴드 평균 인코딩
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
Python으로 Kaggle 대회 공략하기

폴드 외(OOF)로 학습 인코딩

학습 ID 범주형 타깃 폴드 평균 인코딩
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
Python으로 Kaggle 대회 공략하기

실무 가이드

Python으로 Kaggle 대회 공략하기

실무 가이드

스무딩

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

Python으로 Kaggle 대회 공략하기

실무 가이드

스무딩

$$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으로 채웁니다
Python으로 Kaggle 대회 공략하기

실무 가이드

 

학습 ID 범주형 타깃
1 A 1
2 B 0
3 B 0
4 A 0
5 B 1

 

테스트 ID 범주형 타깃 평균 인코딩
10 A ? 0.43
11 B ? 0.38
12 C ? 0.40
Python으로 Kaggle 대회 공략하기

Lass uns üben!

Python으로 Kaggle 대회 공략하기

Preparing Video For Download...