호기심 많은 분석가

[Machine Learning] 카테고리 변수를 다루는 법 본문

Coding/Machine Learning & Python

[Machine Learning] 카테고리 변수를 다루는 법

DA Hun 2021. 5. 12. 23:17

1. 4종류의 Categorical Variables

Variable Name 변수명 의미 예시
Nominal 명목변수 2개 이상의 종류가 있는,
순서가 무의미한 변수
Blood Type (A, O,...)
Ordinal 순위변수 '순서'의 개념이 존재하는 변수 GRADE (A, B, C,..)
Cyclical 주기변수 '주기'의 개념이 존재하는 변수 DAY (Mon, Tues,...)
Binary 이산변수 2가지 종류밖에 존재하지 않는 변수 SEX (M, F,...)

2. Categorical Variables를 다루는 3가지 중요한 방법

2-1. ENCODING : 순위 변수는 mapping을 통해, 나머지는 Labelencoder를 통해 숫자로 변환

  • 추가 정보 : SVM(Support Vector Machine)이나 NN(Neural Network) 같은 Linear MOdel에서는 데이터가 정규화되어 있을 것으로 예상하기 때문에, 이 Type을 사용할 수 없다.

2-2. Binarize : 이진화

  • N개의 카테코리에 대해서 N <== 2^k를 만족하는 k개의 column이 생긴다.
  • One-Hot보다 밀도가 높기 때문에 같은 데이터 대비 저장 용량이 매우 크다
    • 추가적인 내용은 Scipy의 csr_matrix 참조

2-3. ONE-HOT : 원-핫 인코딩

  • Binary Encoding에서는 이진화든, 원핫이든 같은 결과가 나온다.
    • 하나만 1, 나머지는 0이 된다.
  • 데이터가 Sparse한 대신, 저장 용량 측면에서 이점이 있다.
    • Sparse 하다란, 차원/전체 공간에 비해 데이터가 있는 공간이 매우 협소한 데이터를 의미한다.

3. Categoricla 변수를 대처하는 다른 방법 - GROUPBY

3-1. GROUPBY Count로 기존의 Value 대치

3-2. 두개 이상의 변수를 묶어서 변환

  • 어떤 변수들을 합쳐야 하는가?
    • 데이터, feature의 종류, 도메인 지식, CPU메모리 등등에 따라 다르다.
    • 이 방법을 사용시 data imbalance는 조금 해소될 수 있으나, 다중 공선성의 문제가 고려된다.