History
home
BDA 연혁
home

- 범주형 변수 가변수 처리

범주형 변수(categorical variable) 다루기

많은 머신러닝 모델들은 오직 수치형 변수만을 입력값으로 받는다. 데이터 분석을 진행하면서 범주형 범수에서 중요한 인사이트를 찾았지만, 이를 모델링에 적용할 수 없다면 큰 문제가 생길 것이다. 따라서 범주형 변수를 수치형으로 변환해주는 과정이 필요하다. 하지만 어떻게 범주형 변수가 가지고 있는 정보를 그대로 유지하면서 수치형으로 변환할 수 있을까?
이 중 많이 쓰는 기법이 가변수 (dummy variable)로 처리를 해주는 방법이다.

가변수 처리

가변수 처리는 범주형 변수를 0과 1의 값만을 갖는 변수로 전환하는 방법이다. 다음 예시를 통해 이를 이해해보자.
다음과 같이 요일에 대한 정보를 갖고 있는 피쳐가 있다고 생각해보자.
index
요일
0
1
2
이에 대한 가변수 처리는 다음과 같다. 범주형 변수에 카테고리 수만큼 컬럼을 추가하여, 해당 카테코리에 해당하는 컬럼에는 1, 아니면 0을 기입하는 것이다.
index
0
1
0
0
1
0
1
0
2
0
0
1
판다스에서 제공하는 get_dummies() 함수를 활용하여 가변수 처리를 해볼 수 있다. get_dummies() 에서 제공하는 파라미터는 다음과 같다.
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
Python
복사
dummy_na=True 로 설정하면 결측값까지도 가변수 처리가 가능하다. K개의 카테고리가 있다면 사실, K-1개의 가변수 만으로도 모든 카테고리를 구별할 수 있다. drop_first = True 는 첫번째 카테고리를 제거하여 이를 구현한다.
Q1. 어떻게 K개의 카테고리를 K-1개의 가변수 컬럼으로 구별이 가능할까?
Q2. 만약 수백개의 카테고리가 존재하고, 특정 카테고리의 수들은 매우 적을 경우 어떻게 전처리를 하는 것이 효율적일까?
아래는 판다스에서 제공하는 예시 코드이다.
In [60]: df = pd.DataFrame({"key": list("bbacab"), "data1": range(6)}) In [61]: pd.get_dummies(df["key"]) Out[61]: a b c 0 False True False 1 False True False 2 True False False 3 False False True 4 True False False 5 False True False In [62]: df["key"].str.get_dummies() Out[62]: a b c 0 0 1 0 1 0 1 0 2 1 0 0 3 0 0 1 4 1 0 0 5 0 1 0
Python
복사
In [63]: dummies = pd.get_dummies(df["key"], prefix="key") In [64]: dummies Out[64]: key_a key_b key_c 0 False True False 1 False True False 2 True False False 3 False False True 4 True False False 5 False True False In [65]: df[["data1"]].join(dummies) Out[65]: data1 key_a key_b key_c 0 0 False True False 1 1 False True False 2 2 True False False 3 3 False False True 4 4 True False False 5 5 False True False
Python
복사