🐍 Python

LabelEncoder란? 머신러닝에서 범주형 데이터를 숫자로 변환하는 방법

itstory(Booho) 2025. 2. 9. 13:42
728x90

🔹 1. LabelEncoder란?

LabelEncoder범주형(카테고리형) 데이터를 숫자로 변환하는 기법입니다.
머신러닝 모델은 문자열 데이터를 직접 이해할 수 없기 때문에, 문자 데이터를 숫자로 변환해야 합니다.

예를 들어, "Male", "Female" 같은 성별 데이터를 0, 1과 같은 숫자로 변환할 수 있습니다.

📌 LabelEncoder 적용 전

ID Gender Smoker
1 Male Yes
2 Female No
3 Male No

 

📌 LabelEncoder 적용 후

ID Gender (Encoded) Smoker (Encoded)
1 1 1
2 0 0
3 1 0

이제 머신러닝 모델이 숫자로 변환된 데이터를 학습할 수 있습니다!

 

왜 레이블 인코딩이 필요할까?

머신러닝 모델은 숫자 데이터만 이해할 수 있기 때문입니다.
따라서, 문자열로 된 범주형 데이터를 숫자로 변환해야 합니다.

예제 데이터:

 

ID Gender Smoker
1 Male Yes
2 Female No
3 Male No

👎 이 데이터를 그대로 머신러닝 모델에 넣으면 오류 발생!
→ "Male"을 0, "Female"을 1로 변환해야 함
→ "Yes"를 1, "No"를 0으로 변환해야 함


🔹 2. LabelEncoder 사용법 (Python 코드 예제)

Python의 scikit-learn 라이브러리를 사용하면 간단하게 LabelEncoder를 적용할 수 있습니다.

✅ LabelEncoder 기본 사용법

from sklearn.preprocessing import LabelEncoder

# 샘플 데이터
gender = ["Male", "Female", "Male", "Female", "Male"]
smoker = ["Yes", "No", "No", "Yes", "No"]

# LabelEncoder 객체 생성
encoder = LabelEncoder()

# Gender 변환
gender_encoded = encoder.fit_transform(gender)
smoker_encoded = encoder.fit_transform(smoker)

print("Gender 인코딩 결과:", gender_encoded)
print("Smoker 인코딩 결과:", smoker_encoded)
 

📌 출력 결과

Gender 인코딩 결과: [1 0 1 0 1]  # Male → 1, Female → 0
Smoker 인코딩 결과: [1 0 0 1 0]  # Yes → 1, No → 0

이제 범주형 데이터를 숫자로 변환 완료!


🔹 3. Pandas 데이터프레임에서 LabelEncoder 적용하기

실제 머신러닝 프로젝트에서는 pandas.DataFrame에 LabelEncoder를 적용하는 경우가 많습니다.

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 데이터프레임 생성
df = pd.DataFrame({
    "Gender": ["Male", "Female", "Male", "Female", "Male"],
    "Smoker": ["Yes", "No", "No", "Yes", "No"]
})

# LabelEncoder 객체 생성
encoder = LabelEncoder()

# 모든 범주형 컬럼을 LabelEncoder로 변환
for col in df.columns:
    df[col] = encoder.fit_transform(df[col])

print(df)

 

📌 출력 결과

데이터프레임에서도 쉽게 변환 가능!
컬럼이 많다면 apply(LabelEncoder().fit_transform)으로 한 번에 변환 가능!


🔹 4. LabelEncoder의 주의할 점

1️⃣ 숫자가 크다고 해서 더 중요한 의미를 가지지는 않음!

  • 예를 들어, ["Low", "Medium", "High"]를 LabelEncoder로 변환하면 [0, 1, 2]가 됨.
  • 하지만 머신러닝 모델이 2 > 1 > 0처럼 크기가 의미 있는 데이터로 잘못 해석할 수 있음.
  • 이런 경우에는 OneHotEncoder를 사용해야 함!

2️⃣ OneHotEncoder가 더 적절한 경우도 있음

  • 범주형 데이터의 개수가 3개 이상이면 OneHotEncoding이 더 나을 수 있음.
  • 예제: ["Red", "Green", "Blue"] → OneHotEncoding하면 [1,0,0], [0,1,0], [0,0,1]
728x90

🔹 5. LabelEncoder vs OneHotEncoder 비교

비교 항목 LabelEncoder OneHotEncoder
변환 방식 각 값을 고유한 숫자로 변환 각 값을 별도 컬럼(One-Hot Vector) 으로 변환
데이터 형태 순서가 없는 범주형 데이터 순서가 없는 범주형 데이터, 클래스가 많을 때 적합
특징 숫자로 변환하지만 의미 있는 관계가 아님 여러 개의 컬럼이 생겨 메모리 사용량 증가
예제 "Male" → 1, "Female" → 0 "Male" → [1,0], "Female" → [0,1]
사용 추천 이진(2개) 범주형 데이터 3개 이상 범주형 데이터

 

📌 💡 LabelEncoder를 사용할 때, 숫자 크기에 의미가 없다는 점을 명심하세요!
📌 👉 OneHotEncoder가 더 적절한 경우도 있으므로 주의해야 합니다!


🔹 6. LabelEncoder 활용: 음료 추천 시스템 적용

현재 진행 중인 스타벅스 음료 추천 시스템에서 LabelEncoder를 활용하면,
"음료 카테고리(Beverage Category)" 를 숫자로 변환 가능
"핫/아이스(Hot/Iced)" 여부를 숫자로 변환 가능

📌 음료 추천 시스템에서 LabelEncoder 적용 예제

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 데이터 로드
df = pd.read_csv("data/starbucks_drinkMenu_expanded.csv")

# 적용할 범주형 컬럼 선택
categorical_columns = ["Beverage_category", "Beverage_prep"]

# LabelEncoder 적용
encoder = LabelEncoder()
for col in categorical_columns:
    df[col] = encoder.fit_transform(df[col])

print(df.head())

이제 머신러닝 모델이 음료 데이터를 학습할 수 있도록 변환 완료!
음료 추천 시스템에 LabelEncoder를 적용해 머신러닝 모델을 더욱 최적화할 수 있습니다.


✅ 마무리: LabelEncoder는 이렇게 활용하자!

이진 데이터(Yes/No, Male/Female) 변환할 때 사용
머신러닝 모델이 숫자 데이터를 요구할 때 적용
순서가 중요하지 않은 카테고리형 데이터에 적합
클래스 개수가 많으면 OneHotEncoder 고려

🔥 이제 직접 LabelEncoder를 활용해 보세요!

728x90