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

핵심 요약
One-Hot Encoding은 범주형 데이터를 이진 벡터(binary vector)로 변환하여 머신러닝·딥러닝 모델이 처리할 수 있도록 하는 기본적인 전처리 기법이다. 각 범주(category)를 독립적인 차원으로 분리함으로써 순서나 거리를 부여하지 않고 범주 간 의미 왜곡을 방지하지만, 범주 수가 많아질수록 차원이 급격히 증가하고 희소(sparse) 행렬이 발생하는 단점이 있다. 이를 보완하기 위해 이진 인코딩, 해싱 트릭, 타깃 인코딩 등 다양한 대안 기법을 상황에 맞게 활용하는 것이 권장된다.

1. 정의 및 원리

원-핫 인코딩은 주어진 범주형 변수의 고유 값(unique values)을 개별적인 이진(0/1) 변수로 변환한다.
1) 각 범주에 대응되는 새로운 차원(feature)을 생성
2) 해당 범주의 차원만 1, 나머지는 0으로 표시

예를 들어, ‘색상’ 변수에 {빨강, 녹색, 파랑} 세 범주가 있을 때는 다음과 같이 표현한다:

색상빨강녹색파랑
빨강100
녹색010
파랑001

이 방식은 범주형 데이터 간에 순서나 거리 정보가 없음을 모델에 명확히 전달한다[1].

2. 구현 방법

2.1 scikit-learn 활용

from sklearn.preprocessing import OneHotEncoder
import numpy as np

ohe = OneHotEncoder(sparse=False)
data = np.array([['TV'], ['냉장고'], ['TV'], ['선풍기']])
encoded = ohe.fit_transform(data)
  • sparse=False 옵션을 통해 밀집 배열로 반환
  • ohe.get_feature_names_out()로 열 이름 확인 가능[2]

2.2 pandas 활용

import pandas as pd

df = pd.DataFrame({'제품':['TV','냉장고','TV','선풍기']})
df_encoded = pd.get_dummies(df, columns=['제품'])
  • 문자열 카테고리 값을 바로 변환
  • 자동으로 열 이름 ‘제품냉장고’, ‘제품_TV’, ‘제품선풍기’ 생성[2]

3. 장점 및 단점 비교

구분장점단점
모델 호환성대부분의 머신러닝 알고리즘이 수치형 입력을 요구하므로 범주형 데이터를 그대로 사용 가능[1]범주 수가 많으면 차원이 급증(차원의 저주)하여 과적합 및 메모리·연산 부담 증가[1][3]
의미 왜곡 방지범주별 독립 변수를 통해 서열(order)이나 거리(distance)를 부여하지 않음[1]생성된 희소 행렬로 인해 계산 효율이 떨어짐[3]
구현 용이성scikit-learn, pandas에서 간단한 API로 지원범주 간 유사성(similarity)을 반영 불가[4]

4. 대안 인코딩 기법

차원 폭발 및 희소성 문제를 해결하기 위해 아래와 같은 기법들이 제안된다:

기법설명장단점
이진 인코딩(Binary Encoding)범주를 정수로 변환한 뒤, 이 정수를 이진수(binary)로 표현하고 각 비트(bit)를 차원으로 사용[5]차원 수를 $$ \lceil \log_2 n \rceil $$개로 줄임
해석성 저하 및 정보 손실 가능
해싱 트릭(Feature Hashing)해시 함수를 이용해 범주를 고정된 크기의 벡터 공간으로 매핑[6]메모리 효율적·충돌 가능성 있음
타깃 인코딩(Target Encoding)각 범주를 타깃 변수의 통계량(평균·빈도 등)으로 대체[7]고차원 처리 우수·과대적합 주의, 교차 검증 필요
빈도 인코딩(Frequency Encoding)각 범주의 출현 빈도로 대체단순·빈도 중요시되는 상황 적합
동일 빈도 시 구분 불가

5. 결론 및 활용 시 고려사항

  • 범주 수가 수십 개 이내이고 메모리·연산 자원이 충분하면 원-핫 인코딩을 우선 고려.
  • 고차원 범주에서는 이진 인코딩, 해싱 트릭, 타깃 인코딩 중 데이터 특성과 모델 특성에 맞는 기법을 선택.
  • 딥러닝 NLP 분야에서는 원-핫 벡터를 워드 임베딩(word embedding)으로 변환하기 전 단계로 활용하기도 함[4].

적절한 인코딩 기법 선택은 모델 성능 및 학습 효율에 직결되므로, 데이터의 범주 수와 모델 구조를 종합적으로 검토하여 최적의 방식을 적용해야 한다.

출처
[1] [Machine Learning] One-Hot Encoding: 머신러닝을 위한 필수 데이터 … https://datasciencebeehive.tistory.com/99
[2] [데이터 전처리] One-Hot Encoding(원-핫 인코딩) https://everyday-joyful.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC-One-Hot-Encoding%EC%9B%90-%ED%95%AB-%EC%9D%B8%EC%BD%94%EB%94%A9
[3] [ML][용어] One-Hot Encoding (원-핫 인코딩) – Moon’s World https://moons.kr/entry/ML%EC%9A%A9%EC%96%B4-One-Hot-Encoding-%EC%9B%90-%ED%95%AB-%EC%9D%B8%EC%BD%94%EB%94%A9
[4] [딥 러닝을 이용한 자연어 처리 입문] 원-핫 인코딩(One-Hot Encoding) https://bambbang00.tistory.com/38
[5] 21 Binary Encoding – Feature Engineering A-Z https://feaz-book.com/categorical-binary
[6] Feature hashing – Wikipedia https://en.wikipedia.org/wiki/Feature_hashing
[7] Alternatives To One-Hot Encoding? – The Friendly Statistician https://www.youtube.com/watch?v=eixybj28vgU
[8] 원 핫 인코딩? One-Hot Encoding? https://bigdatamaster.tistory.com/177
[9] [머신러닝] 원핫인코딩이 트리 기반 모델의 성능을 저하시키는 이유 https://sungkee-book.tistory.com/34
[10] One-Hot Encoding(원-핫 인코딩) – A PIECE OF JOY – 티스토리 https://everyday-joyful.tistory.com/entry/One-Hot-Encoding%EC%9B%90-%ED%95%AB-%EC%9D%B8%EC%BD%94%EB%94%A9
[11] 원 핫 인코딩(One-Hot Encoding) 이해하기 – 네이버 블로그 https://blog.naver.com/baek2sm/221802541443
[12] 12-01 NLP에서의 원-핫 인코딩(One-hot encoding) – 위키독스 https://wikidocs.net/60853
[13] [인공지능] 원핫 인코딩 – velog https://velog.io/@sty0507/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%9B%90%ED%95%AB-%EC%9D%B8%EC%BD%94%EB%94%A9
[14] What is One-hot Encoding? – Dremio https://www.dremio.com/wiki/one-hot-encoding/
[15] One-hot – Wikipedia https://en.wikipedia.org/wiki/One-hot
[16] What alternatives are there to one hot encoding? : r/datascience https://www.reddit.com/r/datascience/comments/xwzh0t/what_alternatives_are_there_to_one_hot_encoding/
[17] FeatureHasher — scikit-learn 1.7.0 documentation https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.FeatureHasher.html
[18] 14 Binary encoding (Categorical encoding Python … – YouTube https://www.youtube.com/watch?v=lCKDwdAIGD4
[19] 02-08 원-핫 인코딩(One-Hot Encoding) – 위키독스 https://wikidocs.net/22647
[20] An alternative for one-hot encoding in neural network models – arXiv https://arxiv.org/abs/2311.05911

One-Hot의 유래:

예: [0, 0, 1, 0, 0]
      ↑    ↑
   Cold   Hot!

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다