Label Encoding
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.
요
Label Encoding(레이블 인코딩)은 머신러닝과 데이터 과학에서 범주형(categorical) 데이터를 모델이 이해할 수 있는 수치형(numerical) 형식으로 변환하는표적인 전처리 기법 중 하나입니다. 범주형 변수는 성별(남성, 여성), 지역(서울, 부산, 대구), 제품 카테고리와 같이 유한한 값만을 가지는 변수를 말하며, 대부분의 머신러닝 알고리즘은 이러한 텍스트 기반의 데이터를 직접 처리할 수 없기 때문에 수치형으로 변환하는 과정이 필수적입니다.
Label Encoding은 각 범주에 고유한 정수 값을 매핑함으로써 이 변환을 수행합니다. 예를 들어, ['봄', '여름', '가을', '겨울']이라는 계절 변수는 [0, 1, 2, 3]과 같이 인코딩될 수 있습니다.
이 문서에서는 Label Encoding의 개념, 사용 사례, 장단점, 구현 방법 및 주의사항을 다룹니다.
Label Encoding의 원리
정의와 동작 방식
Label Encoding은 범주형 변수의 각 고유한 값을 정수(보통 0부터 시작)로 매핑하는 간단한 인코딩 기법입니다. 이 방식은 순서가 없는 범주(nominal category)와 순서가 있는 범주(ordinal category) 모두에 적용 가능하지만, 특히 순서형 변수(ordinal variable)에 적합합니다.
예를 들어, 교육 수준 변수가 다음과 같을 경우:
교육 수준 |
---|
고졸 |
대졸 |
석사졸업 |
박사졸업 |
이를 Label Encoding하면:
교육 수준 | 인코딩 값 |
---|---|
고졸 | 0 |
대졸 | 1 |
석사졸업 | 2 |
박사졸업 | 3 |
이러한 방식은 교육 수준의 서열 관계(고졸 < 대졸 < 석사 < 박사)를 수치적으로 표현할 수 있어 모델이 의미 있는 패턴을 학습하기에 유리합니다.
Label Encoding vs One-Hot Encoding
Label Encoding은 다른 인코딩 방식인 One-Hot Encoding(원-핫 인코딩)과 자주 비교됩니다. 두 기법의 주요 차이점은 다음과 같습니다:
항목 | Label Encoding | One-Hot Encoding |
---|---|---|
차원 증가 | 없음 (1차원 유지) | 범주 수만큼 새로운 열 생성 |
순서 정보 반영 | 가능 (의도적일 경우) | 불가능 (모든 범주 동등하게 취급) |
사용 적합성 | 순서형 변수 또는 고유값이 많은 경우 | 명목형 변수, 고유값이 적을 때 |
과적합 위험 | 낮음 | 높을 수 있음 (특히 고차원일 때) |
데이터 크기 증가 | 최소화 | 크게 증가 |
예를 들어, 100개의 도시를 나타내는 변수가 있을 경우, One-Hot Encoding은 100개의 새로운 열을 생성하지만, Label Encoding은 단일 열에 0~99의 정수를 할당하여 메모리 사용을 최소화합니다.
구현 예시 (Python)
Python의 대표적인 데이터 과학 라이브러리인 [scikit-learn](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%EB%8F%84%EA%B5%AC/scikit-learn)
과 [pandas](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%EB%8F%84%EA%B5%AC/pandas)
를 사용하여 Label Encoding을 쉽게 구현할 수 있습니다.
scikit-learn 사용
from sklearn.preprocessing import LabelEncoder
import pandas as pd
# 샘플 데이터
data = pd.DataFrame({'계절': ['봄', '여름', '가을', '겨울', '봄']})
# Label Encoder 생성 및 적용
le = LabelEncoder()
data['계절_encoded'] = le.fit_transform(data['계절'])
print(data)
출력 결과:
계절 계절_encoded
0 봄 0
1 여름 1
2 가을 2
3 겨울 3
4 봄 0
pandas 사용
# pandas의 factorize() 활용
data['계절_encoded_pandas'] = pd.factorize(data['계절'])[0]
또는 map()
을 사용하여 수동으로 매핑 가능:
mapping = {'봄': 0, '여름': 1, '가을': 2, '겨울': 3}
data['계절_encoded_manual'] = data['계절'].map(mapping)
장점과 단점
장점
- 메모리 효율성: 고유 범주가 많은 경우에도 차원 증가 없이 처리 가능.
- 간단한 구현: 코드가 직관적이고 학습 곡선이 낮음.
- 순서형 변수에 적합: 서열이 있는 데이터에서 자연스러운 수치 표현 가능.
단점
- 의도하지 않은 순서 부여: 명목형 변수(예: 색상: 빨강, 파랑, 초록)에 Label Encoding을 적용하면 모델이 "빨강 < 파랑 < 초록"과 같은 잘못된 순서 관계를 학습할 수 있음.
- 비대칭성 문제: 특정 값에 높은 숫자가 할당되면 가중치가 불균형하게 작용할 수 있음.
- 모델 오해 가능성: 선형 회귀, 신경망 등에서는 인코딩된 숫자를 실제 수치로 오해할 수 있음.
사용 시 고려사항
- 변수의 성격 파악: 변수가 명목형(nominal)인지 순서형(ordinal)인지 반드시 확인해야 합니다.
- 대안 기법 검토: 고유값이 적고 명목형인 경우 One-Hot Encoding, 고유값이 매우 많은 경우 Target Encoding 또는 Embedding을 고려할 수 있습니다.
- 역변환 필요성: 예측 후 결과 해석을 위해 인코딩된 값을 원래 레이블로 되돌리는
[inverse_transform](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%A4%80%EB%B9%84/inverse_transform)()
사용이 중요합니다.
참고 자료 및 관련 문서
- Scikit-learn LabelEncoder 문서
- Pandas factorize 함수 문서
- 관련 기법: One-Hot Encoding, Ordinal Encoding, Target Encoding
Label Encoding은 데이터 전처리의 기본이 되는 중요한 기법으로, 올바른 상황에서 사용될 경우 효율적이고 효과적인 수치화를 제공합니다. 그러나 그 단순함만큼 주의 깊은 사용이 요구되며, 데이터의 성격과 모델의 요구사항을 고려한 선택이 필수적입니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.