Label Encoding

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.01
조회수
11
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

Label Encoding

개요

**Label Encoding라벨 인코딩)은주형 데이터(c data)를 머신러닝 모델이 처리할 수 있도록 정수형 숫자로 변환하는 기법 중 하나입니다. 머러닝 알고리즘 일반적으로 텍스트 형태의 범주형 변수를 직접 처리할 수 없으므로 이러한 변수를 수치형으로 변환하는처리 과정이 필수적입니다. Label Encoding은 각 범주(category)에 고유한 정수 값을 할당함으로써 이 문제를 해결합니다.

예를 들어, 색상 데이터가 ["빨강", "파랑", "초록"]일 경우, Label Encoding을 통해 각각 0, 1, 2와 같이 정수로 매핑할 수 있습니다. 이 방법은 간단하고 직관적이지만, 범주 간에 임의의 순서를 부여할 수 있기 때문에 주의가 필요합니다.


Label Encoding의 원리

기본 개념

Label Encoding은 범주형 변수의 각 고유 값을 정수(보통 0부터 시작)로 일대일 대응시킵니다. 변환 후의 데이터는 여전히 범주형이지만, 숫자 형태로 표현되어 모델 입력에 적합해집니다.

예시: | 색상 | Label Encoded | |----------|----------------| | 빨강 | 0 | | 파랑 | 1 | | 초록 | 2 |

사용 시기

Label Encoding은 다음과 같은 상황에서 유용합니다:

  • 순서형 범주(ordinal categorical data)에 적합합니다. 예: ["낮음", "중간", "높음"]0, 1, 2. 이 경우 숫자의 크기 순서가 의미를 가지므로 Label Encoding이 자연스럽습니다.
  • 모델이 범주 간의 순서를 고려하지 않아도 되는 경우, 또는 알고리즘이 순서를 인식하지 않는 경우에 사용할 수 있습니다.

Label Encoding의 장단점

장점

  • 간단하고 직관적: 구현이 매우 쉬우며, 데이터의 차원을 늘리지 않습니다.
  • 메모리 효율성: One-Hot Encoding과 달리, 새로운 열(column)을 생성하지 않기 때문에 데이터 크기가 작아집니다.
  • 고유값이 많은 경우 유리: 범주의 수가 매우 많을 경우(예: 100개 이상), One-Hot Encoding은 차원 폭발을 유발할 수 있으므로 Label Encoding이 더 효율적입니다.

단점

  • 의도하지 않은 순서 정보 유입: Label Encoding은 정수를 할당하면서 임의의 순서를 부여합니다. 예를 들어, ["사과", "바나나", "오렌지"]0, 1, 2를 할당하면, 모델이 "오렌지 > 바나나 > 사과"라는 순서를 오해할 수 있습니다.
  • 비모델 기반 알고리즘에 부적합: 대부분의 머신러닝 알고리즘(특히 선형 회귀, 로지스틱 회귀 등)은 숫자의 크기를 거리 또는 순서로 해석하기 때문에, 명목형 범주(nominal categorical data)에 Label Encoding을 적용하면 성능 저하를 초래할 수 있습니다.

Label Encoding과 One-Hot Encoding 비교

특성 Label Encoding One-Hot Encoding
차원 증가 없음 있음 (범주 수만큼 열 추가)
순서 정보 생성 여부 있음 (문제가 될 수 있음) 없음
메모리 사용량 낮음 높음 (고유값 많을수록 급증)
적합한 데이터 유형 순서형 범주 명목형 범주
모델 해석의 왜곡 가능성 높음 낮음

🔔 Tip: 명목형 범주(예: 국가, 성별, 도시명)에는 One-Hot Encoding 또는 Target Encoding, Embedding 등이 더 적합합니다.


Python에서의 구현 예시

Scikit-learn의 LabelEncoder를 사용하면 쉽게 Label Encoding을 수행할 수 있습니다.

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   빨강             1
1   파랑             0
2   초록             2
3   파랑             0
4   빨강             1

⚠️ 주의: LabelEncoder는 학습 데이터에만 .fit_transform()을 적용하고, 테스트 데이터에는 .transform()만 사용해야 합니다. 잘못된 적용은 데이터 누수(data leakage)를 유발할 수 있습니다.


고급 활용 및 대안

1. 순서형 데이터에 Label Encoding 사용

순서가 중요한 경우, 사용자가 직접 매핑을 정의할 수 있습니다.

mapping = {"낮음": 0, "중간": 1, "높음": 2}
data['등급_encoded'] = data['등급'].map(mapping)

2. 대안 기법

  • One-Hot Encoding: pd.get_dummies() 또는 sklearn.preprocessing.OneHotEncoder
  • Target Encoding: 범주별 타겟 평균값으로 인코딩 (회귀/분류 문제에 유용)
  • Embedding: 딥러닝에서 범주형 변수를 고차원 벡터로 변환

참고 자료 및 관련 문서


Label Encoding은 범주형 데이터 전처리의 기본 도구이지만, 데이터의 성격과 사용하는 모델에 따라 적절한 인코딩 방식을 선택하는 것이 중요합니다. 특히 명목형 데이터에는 주의를 기울여야 하며, 필요시 더 정교한 인코딩 기법을 고려해야 합니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?