데이터 과학 및 기계 학습에서는 대부분의 경우 데이터에 범주 형 변수가 포함되어 있습니다. 이러한 변수는 숫자가 아닌 값을 가지며, 예를 들어 성별, 국적, 학력 수준 등이 있을 수 있습니다. 이러한 범주형 데이터를 모델에 적용하기 위해서는 적절한 처리 방법이 필요합니다.
1. 더미 변수 인코딩 (One-Hot Encoding)
더미 변수 인코딩은 가장 일반적인 범주형 데이터 처리 방법 중 하나입니다. 이 방법은 각 범주 값을 새로운 열로 만들어, 해당 값이 존재하는 경우에는 1, 존재하지 않는 경우에는 0의 값을 할당합니다. 이를 통해 모델이 범주 정보를 이해할 수 있도록 도와줍니다.
import pandas as pd
# 범주형 데이터가 있는 데이터프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'red', 'green']})
# 더미 변수 인코딩 적용
encoded_data = pd.get_dummies(data['color'])
print(encoded_data)
Output:
blue green red
0 0 0 1
1 1 0 0
2 0 1 0
3 0 0 1
4 0 1 0
위의 예제에서 color
열의 범주형 데이터를 더미 변수 인코딩을 통해 변환한 결과를 확인할 수 있습니다. color
열의 범주인 ‘red’, ‘blue’, ‘green’은 각각 독립된 열로 생성되었으며, 해당 값이 있을 경우 1의 값을, 없을 경우 0의 값을 가지고 있음을 확인할 수 있습니다.
2. 순서형 인코딩 (Ordinal Encoding)
순서형 인코딩은 각 범주 값을 숫자로 변환하는 방법입니다. 이 방법은 범주 값들 사이의 상대적인 순서를 유지한 채로 변환합니다. 예를 들어, 옷의 사이즈인 ‘Small’, ‘Medium’, ‘Large’를 숫자로 변환한다고 가정해보겠습니다.
from sklearn.preprocessing import OrdinalEncoder
# 범주형 데이터가 있는 데이터프레임 생성
data = pd.DataFrame({'size': ['Small', 'Medium', 'Large', 'Medium']})
# 순서형 인코딩 적용
encoder = OrdinalEncoder()
encoded_data = encoder.fit_transform(data[['size']])
print(encoded_data)
Output:
[[2.]
[1.]
[0.]
[1.]]
위의 예제에서 size
열의 범주형 데이터를 순서형 인코딩을 통해 변환한 결과를 확인할 수 있습니다. ‘Small’은 2로, ‘Medium’은 1로, ‘Large’는 0으로 변환되었음을 확인할 수 있습니다.
3. 라벨 인코딩 (Label Encoding)
라벨 인코딩은 각 범주 값을 고유한 정수로 변환하는 방법입니다. 순서가 없는 범주형 변수를 처리할 때 주로 사용됩니다.
from sklearn.preprocessing import LabelEncoder
# 범주형 데이터가 있는 데이터프레임 생성
data = pd.DataFrame({'gender': ['Male', 'Female', 'Male', 'Male', 'Female']})
# 라벨 인코딩 적용
encoder = LabelEncoder()
encoded_data = encoder.fit_transform(data['gender'])
print(encoded_data)
Output:
[1 0 1 1 0]
위의 예제에서 gender
열의 범주형 데이터를 라벨 인코딩을 통해 변환한 결과를 확인할 수 있습니다. ‘Male’은 1로, ‘Female’은 0으로 변환되었음을 확인할 수 있습니다.
결론
이상으로 범주형 데이터의 처리 방법에 대해 알아보았습니다. 각각의 방법은 데이터의 특성에 따라 적합한 방법을 선택하여 사용해야 합니다. 더미 변수 인코딩은 범주 수가 많을 때 유용하며, 순서형 인코딩은 범주 값들 간에 순서가 있는 경우에 사용됩니다. 라벨 인코딩은 순서가 없는 범주 값들을 처리할 때 유용한 방법입니다.
References
- pandas.get_dummies documentation
- sklearn.preprocessing.OrdinalEncoder documentation
- sklearn.preprocessing.LabelEncoder documentation