머신러닝

범주형변수 인코딩 : Label Encoding VS One-Hot Encoding VS Ordinal Encoding 차이점

문기문기! 2023. 7. 19. 14:27

인코딩을 하는 이유?

우리가 머신러닝 모델링을 할때, object 형 데이터를 인코딩하게 된다.

컴퓨터는 사람과 달리 텍스트를 인식하지 못하기 때문에 해당 데이터를 숫자로 변환시켜 연산 가능하게 만들어주는 과정을 필요로 한다. 

 

 

 

인코딩 종류

 

1. Label Encoding (라벨 인코딩)

Label Encdoing 이란 문자열의 unique값을 숫자로 바꿔주는 방법이다. 

n개의 범주형 데이터를 0부터 n-1 까지의 연속적인 수치 데이터를 표현하는 것이다.

인코딩 결과가 수치적인 차이를 의미하지는 않는다.

 

 

하지만 ML 알고리즘에 적용할 경우 예측 성능이 떨어지고 Tree 계열 알고리즘은 사용이 가능하나 선형계열 모델(로지스틱회귀, svm,신경망 등) 알고리즘에는 사용되지 않는다. 그리고 설명변수가 아닌 목표변수(종속변수)에 대해 사용한다.

 

 

 

2. One-Hot Encoding (원-핫 인코딩)

One-Hot Encoding 이란 숫자가 아닌 변수들의 차원을 늘려 해당 컬럼이 맞으면 1 or 0 의 이진수를 갖는다. (1과 0 매핑)

원-핫 인코딩은 sklearn의 OneHotEncoder 클래스로 쉽게 사용 가능하지만, 문자열에서 바로 변환이 되지는 않기 때문에 라벨인코더를 통해 숫자로 변환 후 사용가능하다. ( 원-핫 인코딩 이전에 라벨 인코딩을 사용하는 이유)

 

 

모든 모델에 사용 가능하고 성능이 좋지만 범주의 종류가 많아지면 변수들이 증가하여 모델링의속도가 매우 느려진다.

 

 

 

2-1. pandas get_dummies

판다스 get_dummies() 메서드를 사용하여 쉽게 변환이 가능하다. drop_first=True 는 파라미터 default 값으로 첫번째 카테고리값은 쓰지 않는다. 첫번째 카테고리 값을 쓰지 않는 이유는 통계에서의 자유도와 같은 개념이라고 볼 수 있다. n개의 카테고리에서 n-1개가 정해진다면 나머지 하나의 변수의 값을 알 수 있기 때문에 제거한다.

 

 

2-2. OneHotEncoder 와 get_dummies의 차이점

OneHotEncoder 와 get_dummies 모두 동일한 결과를 제공하지만 기계 학습모델 Scikit-learn 파이프라인과 호환되기에 기계 학습 모델을 구축하는 경우 OneHotEncoder 를 사용하고 데이터분석을 하는 경우에는 OneHotEncoder, get_dummies 모두 고려할 수 있다. 

 

그래서 모델 구축이 아닌 데이터분석 단계에서는 get_dummies 를 사용할 것 같다.

 

( 출처 : https://pythonsimplified.com/difference-between-onehotencoder-and-get_dummies/ )

 

 

 

3. Ordinal Encoding

Ordinal Encoding 은 순서형 자료에 매우 적합한 인코딩 방식이다. 라벨 인코딩과 비슷하지만 라벨 인코딩은 순서를 고려하지 않고 숫자를 부여하고 Ordinal Encoding 은 순서를 고려한다. 

 

예시) 교육단계, 상품등급, 경력레벨 등