라벨 인코딩
라벨 인코딩
라벨 인코딩(Label Encoding)은 기계학습 데이터 과학 분야에서 범주형 데이터(categorical data)를 수치형 데이터로 변환하는 대표적인 전처리 기법 중 하나입니다. 머신러닝 알고리즘은 일반적으로 수치형 데이터를 입력으로 요구하기 때문에, 텍스트 형태의 범주(예: '빨강', '파랑', '초록')를 모델이 이해할 수 있는 숫자 형태로 변환하는 과정이 필요합니다. 라벨 인코딩은 이러한 변환을 수행하는 방법 중 하나로, 각 범주에 고유한 정수 값을 할당합니다.
이 문서에서는 라벨 인코딩의 개념, 사용 사례, 장단점, 그리고 실제 구현 방법에 대해 다룹니다.
개요
범주형 변수는 두 가지 주요 유형으로 나뉩니다: - 명목형(Nominal): 순서가 없는 범주 (예: 성별, 국가명) - 순서형(Ordinal): 순서가 있는 범주 (예: 학년, 등급 A/B/C)
라벨 인코딩은 특히 순서형 범주에 적합하며, 범주 간의 순서 관계를 수치로 반영할 수 있습니다. 예를 들어, '낮음', '중간', '높음'이라는 범주를 각각 0, 1, 2로 인코딩하면, 모델이 그 순서성을 학습할 가능성이 높아집니다.
그러나 명목형 변수에 라벨 인코딩을 무분별하게 적용하면, 모델이 임의의 숫자 간에 크기 관계를 오해할 수 있습니다(예: '사과'=1, '바나나'=2 → 바나나가 사과보다 크다고 잘못 해석). 이 문제는 원-핫 인코딩(One-Hot Encoding) 등을 통해 해결할 수 있습니다.
라벨 인코딩의 동작 원리
라벨 인코딩은 각 고유한 범주에 대해 0부터 시작하는 정수를 순차적으로 할당합니다. 할당 순서는 일반적으로 사전순으로 결정되며, 이는 구현 라이브러리에 따라 다를 수 있습니다.
예시
다음과 같은 범주형 데이터가 있다고 가정합시다:
색상 |
---|
빨강 |
파랑 |
초록 |
빨강 |
초록 |
라벨 인코딩을 적용하면:
색상 | 색상_라벨 |
---|---|
빨강 | 0 |
파랑 | 1 |
초록 | 2 |
빨강 | 0 |
초록 | 2 |
이처럼 각 범주가 고유한 정수로 매핑됩니다.
사용 사례
라벨 인코딩은 다음과 같은 상황에서 유용하게 사용됩니다:
- 순서형 범주 변수 처리: '초등학교', '중학교', '고등학교'와 같은 교육 수준 데이터를 인코딩할 때.
- 메모리 효율이 중요한 경우: 원-핫 인코딩은 범주 수가 많을수록 차원이 급격히 증가하지만, 라벨 인코딩은 항상 1차원을 유지합니다.
- 트리 기반 모델(예: 랜덤 포레스트, XGBoost): 이러한 모델은 수치의 크기 관계를 직접 해석하지 않고 분할 조건을 학습하므로 라벨 인코딩이 잘 작동할 수 있습니다.
장점과 단점
장점
- 단순하고 빠름: 구현이 간단하며 계산 비용이 낮음.
- 차원 축소 효과: 원-핫 인코딩처럼 차원을 늘리지 않아, 고차원 데이터의 과적합 위험을 줄일 수 있음.
- 트리 기반 모델과 호환성 우수: 범주 간의 순서가 의미 있는 경우 효과적.
단점
- 의도하지 않은 순서 부여: 명목형 변수에 적용 시, 숫자의 크기 관계가 잘못 해석될 수 있음.
- 모델 편향 가능성: 선형 회귀, 신경망 등은 수치의 대소 관계를 중요하게 여기므로, 'A'=1, 'B'=2라고 하면 B가 A보다 크다고 오해할 수 있음.
- 범주 간 거리 왜곡: 두 범주 간의 실제 거리와 인코딩된 숫자 간의 거리가 일치하지 않을 수 있음.
Python을 통한 라벨 인코딩 구현
Python의 대표적인 데이터 과학 라이브러리인 [scikit-learn](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/scikit-learn)
은 LabelEncoder
클래스를 제공하여 라벨 인코딩을 쉽게 수행할 수 있습니다.
코드 예시
from sklearn.preprocessing import LabelEncoder
import pandas as pd
# 샘플 데이터
data = pd.DataFrame({
'학년': ['초등', '중등', '고등', '초등', '고등']
})
# 라벨 인코더 생성 및 학습
le = LabelEncoder()
data['학년_인코딩'] = le.fit_transform(data['학년'])
print(data)
출력 결과:
학년 학년_인코딩
0 초등 0
1 중등 1
2 고등 2
3 초등 0
4 고등 2
⚠️ 주의:
LabelEncoder
는 1차원 배열만 입력으로 받기 때문에, 다중 열에 적용할 때는apply()
또는OrdinalEncoder
를 고려해야 합니다.
라벨 인코딩 vs 원-핫 인코딩
특성 | 라벨 인코딩 | 원-핫 인코딩 |
---|---|---|
차원 증가 | 없음 (1차원 유지) | 있음 (n개의 범주 → n개의 열) |
순서 정보 | 암시적으로 포함 가능 | 포함되지 않음 |
모델 호환성 | 트리 기반 모델에 적합 | 대부분의 모델에 적합 |
메모리 사용 | 낮음 | 높음 (고유값 많을수록) |
명목형 데이터 처리 | 부적합 | 적합 |
참고 자료 및 관련 문서
- Scikit-learn 공식 문서 - LabelEncoder
- Data Preprocessing in Machine Learning
- 관련 문서: 원-핫 인코딩, 순서형 인코딩, 데이터 전처리
라벨 인코딩은 데이터 전처리의 기본 도구이지만, 상황에 맞는 적절한 선택이 중요합니다. 범주형 변수의 성격(명목형/순서형)과 사용할 머신러닝 모델의 특성을 고려하여 인코딩 방식을 결정해야 합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.