브리프유 브리프유 로그인
자청의 유튜브 추출기

유튜브 영상의 자막과 AI요약을 추출해보세요

AI 채팅

BETA

범주형 데이터 마스터! 레이블 & 원핫 인코딩으로 데이터 정제 끝장내기 (ft. 실습)

게시일: 작성자: 자청의 유튜브 추출기

범주형 데이터 정제: 레이블 인코딩 vs 원핫 인코딩

이번 시간에는 문자로 된 데이터를 컴퓨터가 알아들을 수 있게 숫자로 바꾸는 방법을 배울 거야. 특히 '성별', '직업', '지역'처럼 순서가 없거나 있어도 숫자로 표현하기 애매한 범주형 데이터를 어떻게 다루는지 알아볼 거야.

범주형 데이터란?

범주형 데이터는 크게 두 가지로 나눌 수 있어.

  • 명목형 데이터: 순서가 없는 데이터야. 예를 들어 '성별'은 남자, 여자 순서가 따로 없지?
  • 순서형 데이터: 순서가 있는 데이터야. 예를 들어 '학년'은 1학년, 2학년, 3학년 순서가 있잖아.

컴퓨터는 숫자로만 이해하기 때문에 이런 범주형 데이터를 숫자로 바꿔줘야 해. 이때 사용하는 두 가지 방법이 바로 레이블 인코딩과 원핫 인코딩이야.

1. 레이블 인코딩 (Label Encoding)

레이블 인코딩은 각 범주에 고유한 숫자를 부여하는 방식이야.

  • 어떻게 작동해?

    • '성별'에서 '남자'는 0, '여자'는 1로 바꿀 수 있어.
    • '지역'에서 '대구'는 1, '부산'은 2, '서울'은 3으로 바꿀 수 있지.
    • '직업'에서도 '학생'은 0, '직장인'은 1, '자영업'은 2, '무직'은 3으로 바꿀 수 있어.
  • 주의할 점:

    • 숫자로 바뀌긴 하지만, 이 숫자에는 실제 순서의 의미가 없어. 예를 들어 '여자'(1)가 '남자'(0)보다 더 크다는 뜻이 아니야. 그냥 컴퓨터가 구분하기 쉽게 숫자로 바꿔준 것뿐이야.
    • 트리 기반 모델(예: 결정 트리)에서는 잘 작동하지만, 거리 기반 모델(예: K-NN)에서는 숫자 차이 때문에 잘못된 결과를 낼 수도 있어.

2. 원핫 인코딩 (One-Hot Encoding)

원핫 인코딩은 각 범주를 새로운 열(column)으로 만들고, 해당 범주에는 1, 나머지는 0으로 표시하는 방식이야.

  • 어떻게 작동해?

    • '성별' 데이터를 원핫 인코딩하면 '성별_남자', '성별_여자'라는 두 개의 열이 생겨.
    • 만약 데이터가 '남자'라면 '성별_남자' 열에는 1, '성별_여자' 열에는 0이 들어가.
    • '여자'라면 '성별_남자' 열에는 0, '성별_여자' 열에는 1이 들어가.
    • '지역' 데이터도 마찬가지로 '지역_광주', '지역_대구', '지역_부산', '지역_서울' 같은 열이 생기고, 해당 지역에만 1이 표시돼.
  • 장점:

    • 각 범주를 독립적인 특징으로 인식하기 때문에 순서 정보가 왜곡될 염려가 없어.
    • 대부분의 머신러닝 모델에서 안정적으로 사용할 수 있어.
  • 방법:

    • Pandas의 get_dummies() 함수를 사용하면 쉽게 할 수 있어.
    • OneHotEncoder라는 라이브러리를 사용해서도 할 수 있어.

원핫 인코딩 시 주의할 점: drop_first=True

원핫 인코딩을 할 때, 예를 들어 '성별_남자'와 '성별_여자' 두 개의 열이 생기잖아? 그런데 사실 '성별_남자'가 0이면 무조건 '성별_여자'는 1이고, 반대로 '성별_남자'가 1이면 '성별_여자'는 0이라는 걸 알 수 있어. 즉, 둘 중에 하나만 있어도 나머지 하나를 유추할 수 있다는 거지.

이처럼 중복되는 정보를 없애기 위해 drop_first=True 옵션을 사용해. 이렇게 하면 첫 번째 범주(예: '성별_남자') 열을 삭제해서 불필요한 중복을 막고, 다중 공선성(multicollinearity)이라는 문제를 방지할 수 있어.

인코딩 전후 비교

  • 인코딩 전: 원래의 범주형 데이터를 그대로 보여줘.
  • 인코딩 후: 레이블 인코딩은 숫자로, 원핫 인코딩은 0과 1로 변환된 데이터를 보여줘. 시각적으로 비교하면 변화를 더 쉽게 알 수 있어.

정리

| 구분 | 레이블 인코딩 | 원핫 인코딩 |
| :--------------- | :------------------------------------------ | :---------------------------------------------- |
| 출력 형태 | 정수값 (예: 0, 1, 2) | 0과 1값 |
| 열 개수 | 원래 열 개수 유지 | 범주 개수만큼 열이 늘어남 |
| 순서 의미 | 숫자 자체에 순서 의미 없음 (단순 라벨) | 순서 왜곡 없음 |
| 모델 적용 | 트리 기반 모델에 적합, 거리 기반 모델에 부적합 | 모든 모델에 안정적 (로지스틱, SVM, 신경망 등) |
| 주요 사용 | 순서형 데이터 | 명목형 데이터 |
| 중복 정보 방지 | 해당 없음 | drop_first=True 옵션으로 방지 가능 |

결론적으로, 범주형 데이터를 다룰 때는 순서가 있는지 없는지에 따라 레이블 인코딩이나 원핫 인코딩을 적절히 사용해야 해. 그리고 원핫 인코딩을 할 때는 drop_first=True를 사용해서 중복 정보를 제거하는 것이 중요해!

최근 검색 기록