#개념

원-핫 인코딩(One-Hot Encoding)은 "빨강", "파랑", "초록"처럼 순서가 없는 범주형 변수(Categorical Variable)를 머신러닝 모델이 처리할 수 있는 수치 표현으로 바꾸는 가장 기본적인 특징 엔지니어링(Feature Engineering) 기법이다. 범주의 개수가 $K$개일 때 길이 $K$의 벡터를 만들고, 관측값이 속한 범주의 위치만 1, 나머지는 모두 0으로 채운다. 예를 들어 색상 범주가 {빨강, 파랑, 초록}이면 "파랑"은 $[0, 1, 0]$으로 표현된다.
범주를 단순히 0, 1, 2와 같은 정수로 바꾸는 레이블 인코딩(Label Encoding)은 "초록(2)이 빨강(0)보다 크다"는 존재하지 않는 순서와 거리를 모델에 암묵적으로 주입하므로, 명목형(nominal) 변수에는 원-핫 인코딩이 원칙이다. 원-핫 벡터는 모든 범주가 서로 직교하고 같은 거리를 가지므로 범주 간에 어떠한 선후 관계도 가정하지 않으며, 통계학에서는 각 열을 더미 변수(Dummy Variable) 또는 지시 변수(indicator variable)라고 부른다.
원-핫 인코딩을 적용할 때 가장 먼저 고려할 점은 더미 변수 함정(Dummy Variable Trap)이다. $K$개의 더미 열은 항상 합이 1이므로 하나의 열은 나머지 열의 선형 결합으로 완전히 결정되며, 절편(intercept)이 있는 선형 회귀나 로지스틱 회귀에서는 설계 행렬의 열이 선형 종속이 되어 완전한 다중공선성(Multicollinearity)이 발생한다.
이 경우 최소제곱 해가 유일하지 않고 회귀 계수의 해석이 불가능해지므로, 기준 범주(reference category) 하나를 제거하고 $K-1$개의 열만 사용한다. pandas의 get_dummies(drop_first=True)나 scikit-learn OneHotEncoder(drop='first')가 이 역할을 하며, 남은 계수는 "기준 범주 대비 효과"로 해석된다. 다만 정칙화(Regularization)가 적용된 선형 모델이나 트리 기반 모델에서는 다중공선성이 치명적이지 않고, 오히려 열을 제거하면 기준 범주의 정보가 다른 열들에 분산되어 정칙화 효과가 범주마다 비대칭해지거나 트리 분기가 불리해질 수 있으므로 $K$개를 모두 유지하는 편이 나은 경우도 많다.
또한 트리 모델(Tree-based Model)은 원-핫 인코딩과 궁합이 좋지 않다. 결정 트리는 한 번의 분기에서 하나의 열만 보므로 원-핫 열은 "이 범주인가, 아닌가"라는 매우 불균형한 이진 분기만 만들 수 있고, 범주가 많을수록 각 열의 정보 이득이 희석되어 수치형 변수보다 선택되기 어려워진다. 그래서 LightGBM과 CatBoost는 범주형 변수를 원-핫으로 펼치지 않고 그대로 입력받아 범주를 그룹으로 묶는 분할이나 순서 기반 목표 통계를 사용하는 전용 처리를 제공한다. 반대로 선형 모델(Linear Model)과 신경망(Neural Network)은 각 범주에 독립적인 가중치(Weight)를 학습할 수 있으므로 원-핫 인코딩이 자연스럽게 맞는다.
두 번째 문제는 고카디널리티(High Cardinality)다. 우편번호, 사용자 ID, 상품 ID처럼 범주가 수만에서 수백만 개에 이르면 열의 수가 그만큼 늘어나 메모리와 계산 비용이 폭증하고, 대부분의 값이 0인 극도로 희소(Sparse)한 행렬이 된다. 희소 행렬 자료구조(CSR 등)를 사용하면 저장 공간은 아낄 수 있지만, 희귀 범주의 열은 학습 데이터에 몇 번 등장하지 않아 과대적합(Overfitting)의 원인이 되고 차원의 저주를 악화시킨다. 이를 완화하는 대안은 여러 가지다.
고카디널리티 범주의 인코딩 대안
  • 순서 인코딩(Ordinal Encoding): 범주 사이에 자연스러운 순서가 있는 변수(소형·중형·대형)에 정수를 그대로 부여한다.
  • 빈도 인코딩(Frequency Encoding): 각 범주를 등장 횟수나 비율 하나의 숫자로 대체하여 열 수를 1로 줄인다.
  • 목표 인코딩(Target Encoding): Micci-Barreca(2001)가 제안한 방법으로, 각 범주를 그 범주에 속한 샘플의 목표 변수 평균(분류라면 양성 비율)으로 대체하되 샘플 수가 적은 범주는 전체 평균 쪽으로 축소(smoothing)한다. 다만 목표 변수를 직접 사용하므로 학습 데이터로 인코딩하고 같은 데이터로 모델을 학습하면 데이터 누수(Data Leakage)가 발생하여 성능이 과대평가되며, 반드시 폴드 분할(out-of-fold)이나 순서 기반 통계로 계산해야 한다.
  • 해싱 인코딩(Hashing Encoding): Weinberger 등(2009)의 해싱 트릭(hashing trick)을 적용하여 범주 문자열을 해시 함수로 고정된 $m$차원 버킷에 사상하는 방법으로, 범주 사전을 미리 알 필요가 없고 새로운 범주도 처리할 수 있지만 서로 다른 범주가 같은 버킷에 충돌할 수 있다.
  • 임베딩(Embedding): 가장 강력한 대안으로, 범주를 정수 인덱스로 바꾼 뒤 $K \times d$ 크기($d \ll K$)의 조회 테이블에서 밀집 벡터를 꺼내 신경망과 함께 학습하면 원-핫 벡터가 표현할 수 없는 범주 간 유사성이 벡터 공간에 자연스럽게 반영된다.
수학적으로 임베딩 조회는 원-핫 벡터 $e_i$에 임베딩 행렬 $E$를 곱하는 $e_i^{\top} E$와 동일하므로, 임베딩은 "원-핫 인코딩 뒤에 학습 가능한 선형 계층을 둔 것"으로 이해할 수 있다. 자연어 처리(Natural Language Processing, NLP)에서 어휘 크기 $V$의 토큰을 원-핫으로 표현하면 모든 단어가 서로 같은 거리에 있어 "고양이"와 "강아지"의 유사성을 전혀 담지 못하는데, Word2Vec 이후의 단어 임베딩과 트랜스포머(Transformer)의 토큰 임베딩 계층은 바로 이 한계를 극복하기 위해 등장한 것이다.
실무에서는 학습 시점과 추론 시점의 범주 집합이 다를 수 있다는 점을 반드시 다뤄야 한다. 추론 데이터에 학습 때 없던 미지 범주(Unknown Category)가 등장하면 열 수가 달라져 모델 입력 차원이 맞지 않게 된다. pandas의 get_dummies는 호출할 때마다 데이터에 존재하는 범주로만 열을 만들기 때문에 학습·추론 데이터프레임의 열 구성이 달라지기 쉬워, 탐색적 분석에는 편리하지만 프로덕션 파이프라인에는 적합하지 않다.
scikit-learn의 OneHotEncoder는 fit 단계에서 범주 사전을 고정하고 transform에서 항상 같은 열을 생성하는 변환기(transformer)이며, handle_unknown='ignore'로 미지 범주를 모두 0인 벡터로 처리하거나 handle_unknown='infrequent_if_exist'로 "기타" 열에 몰아넣을 수 있고, min_frequency와 max_categories로 희귀 범주를 하나의 열로 묶어 고카디널리티를 완화하며, categories 인자로 가능한 범주 전체를 미리 지정할 수도 있다.
이 변환기를 Pipeline과 ColumnTransformer에 넣으면 전처리와 모델이 하나의 객체로 직렬화되어 학습-추론 간 불일치, 즉 학습-서빙 편차를 구조적으로 막을 수 있다. 결론적으로 원-핫 인코딩은 단순하고 해석이 쉬우며 선형 모델과 신경망에 안전한 기본 선택이지만, 범주 수가 많거나 트리 모델을 쓰거나 범주 간 의미적 관계가 중요할 때는 목표 인코딩·해싱·임베딩 같은 대안을 데이터와 모델에 맞게 선택해야 하며, 어떤 방법을 쓰든 인코더를 학습 데이터로 고정하고 추론 시 동일하게 적용하는 것이 핵심이다.

#관련 용어

특징 엔지니어링
원시 데이터를 모델이 학습하기 좋은 입력 특징으로 변환·생성하는 과정
임베딩
범주나 토큰을 의미적 유사성이 보존되는 저차원 밀집 실수 벡터로 표현하는 학습 가능한 인코딩
다중공선성
설명 변수들이 서로 선형 종속에 가까워 회귀 계수가 불안정해지거나 유일하게 정해지지 않는 현상
목표 인코딩
각 범주를 해당 범주에 속한 샘플의 목표 변수 통계량으로 대체하는 고카디널리티 범주형 인코딩 기법
데이터 누수
학습 시점에 알 수 없어야 할 정보가 특징에 섞여 들어가 모델 성능이 과대평가되는 문제
토큰화
텍스트를 모델 입력 단위인 토큰으로 분할하여 어휘 인덱스로 대응시키는 전처리 과정

#직무 연관도

DA
Data Analyst
보통
회귀 분석에서 더미 변수의 기준 범주와 계수 해석, 다중공선성 처리에 직접 활용된다
DS
Data Scientist
높음
범주형 특징의 표현 방식이 모델 종류에 따라 성능에 직접 영향을 미치므로, 인코딩 기법 선택과 고카디널리티·누수 문제의 처리는 모델링의 기본 역량이다
DE
Data Engineer
보통
학습과 서빙에서 동일한 인코더를 적용하고 미지 범주를 안전하게 처리하는 전처리 파이프라인을 구축·배포하는 데 필요하다

#사용 사례

전자상거래금융의료제조통신인터넷 서비스
개요
원-핫 인코딩은 선형 회귀·로지스틱 회귀의 더미 변수 구성, 신경망의 범주형 입력 처리, 자연어 처리의 어휘 표현, 추천 시스템의 사용자·상품 속성 표현 등 범주형 데이터를 다루는 거의 모든 머신러닝 작업의 기본 전처리 단계로 활용된다.
사례
전자상거래 구매 전환 예측 모델에서 결제 수단(카드, 계좌이체, 간편결제)과 접속 기기(iOS, Android, 웹)처럼 범주가 적은 변수는 원-핫 인코딩으로 펼쳐 로지스틱 회귀의 입력으로 사용하고, 수십만 개에 이르는 상품 ID는 원-핫 대신 임베딩 계층으로 처리한다. 인코더는 학습 데이터로 fit하여 파이프라인에 포함시키고, 추론 시 새로 추가된 결제 수단은 handle_unknown 옵션으로 모두 0인 벡터로 처리하여 서비스 장애를 방지한다.

#참고 자료

#추천 포스트

© 2024 diki All rights reserved.