Combining(Cross columns)
- columns를 결합해서 새로운 column 생성
- 조합에 사용되는 column에 unique한 값이 너무 많다면 단순히 경우의 수 나열과 똑같아져 의미가 없어짐
- 따라서 unique한 값이 적은 column끼리 묶어서 새로운 columns를 만들도록 하자
- → 새로운 특성을 발견 가능
- wide&deep에서 활용
Categorifying
- 0 ~ n - 1까지의 category로 변경
- latent vector를 얻는 딥러닝에서 많이 활용
- 기존 column에 hashing으로 str 값이 입력된 경우 category(int)로 변경하면 데이터를 줄일 수 있음
- 자주 등장하지 않는 category를 그대로 사용한다면 overfitting이 발생!
- 자주 등장하지 않는 category를 묶어 다른 값으로 변환
- 만약 Train set에 없다가 validation set에 갑자기 나온 category도 별도로 묶어서 관리 돼야 함
- ex) low frequency : 0, unknown : 1로 설정
Target Encoding
특정 columns를 기준으로 groupby하여 얻은 값(sum, mean 등등)을 통해서 Encoding
- 이때, 데이터가 적은 category의 경우 소수의 데이터에 overfitting 발생 → smoothing 필요
- 데이터가 적은 category는 global mean과 같은 대체 값 사용
- 데이터가 많은 category는 해당 category의 값을 그대로 사용
- Encoding 값을 얻는 과정에서 Train 데이터에 overfitting 된다는 단점 → Out of Fold Prediction으로 완화 가능
Count Encoding
columns 기준 개수를 세어 Encoding
- 인기도, 활성도 파악 가능
- 3가지 방법으로 처리 가능
- Train 데이터에서 얻은 값을 Valid 데이터에 사용
- Train 데이터와 Valid 데이터에서 따로 구함
- Train/Valid를 concat후 얻은 값 활용
Binning
- 순서가 있는 범주형 변수 혹은 연속형 변수에 활용
- values를 단순화하여 overfitting 방지
- domain knowledge를 활용해 나눌 수 도 있음
- 상대적인 수치 반영에 효율적 → Standardization 효과
- 과자가 10만원인 경우와 스마트폰이 10만원인 경우를 다르게 반영할 수 있음
Scaling
- Normalization
- skewed 데이터의 경우엔 log 변환 후에 사용
- min-max
- 0 ~ 1 사이 값으로 표현 가능
- Gauss Rank
- 값에 순서를 매기기
- (-1, 1) 사이 값으로 scaling
- erfinv 함수를 통해 gaussian 분포로 변형
참고