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

김동준·2025년 9월 15일

LLM

목록 보기
1/50

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

원-핫 인코딩은 범주형(카테고리) 변수를 머신러닝 알고리즘이 처리할 수 있는 숫자 형식으로 변환하는 기법입니다. 각 범주를 하나의 “1”과 나머지 “0”으로 이루어진 이진 벡터로 표현하여, 범주 간의 순서를 암시하지 않습니다.

왜 원-핫 인코딩을 사용할까?

머신러닝 모델은 일반적으로 숫자 입력을 필요로 합니다. 범주형 값을 단순히 정수(예: 0, 1, 2)로 매핑하면 모델이 그 값들 사이에 불필요한 순서 관계거리 개념을 학습할 수 있습니다. 원-핫 인코딩은 각 범주를 독립된 특성으로 처리하여 이러한 문제를 해결합니다.

동작 원리

  1. 데이터에서 해당 범주형 변수의 모든 고유 범주를 파악한다.
  2. 각 범주마다 새로운 이진 특성(컬럼)을 생성한다.
  3. 각 샘플에 대해, 해당 샘플이 속한 범주의 컬럼에만 1을, 나머지 컬럼에는 0을 할당한다.

예시

“색상(Color)” 변수가 {Red, Green, Blue} 세 가지 범주를 갖는 경우:

원본 데이터
| 샘플 | Color |
|---|---|
| 1 | Red |
| 2 | Blue |
| 3 | Green |
| 4 | Red |

원-핫 인코딩 결과
| 샘플 | Color_Red | Color_Green | Color_Blue |
|---|---|---|---|
| 1 | 1 | 0 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 0 |
| 4 | 1 | 0 | 0 |

Python 구현 예제

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# 샘플 DataFrame
df = pd.DataFrame({'Color': ['Red', 'Blue', 'Green', 'Red']})

# pandas.get_dummies 사용
df_encoded = pd.get_dummies(df, columns=['Color'])
print(df_encoded)
#    Color_Blue  Color_Green  Color_Red
# 0           0            0          1
# 1           1            0          0
# 2           0            1          0
# 3           0            0          1

# scikit-learn OneHotEncoder 사용
encoder = OneHotEncoder(sparse=False)
encoded_array = encoder.fit_transform(df[['Color']])
encoded_df = pd.DataFrame(
    encoded_array,
    columns=encoder.get_feature_names_out(['Color'])
)
print(encoded_df)
#    Color_Blue  Color_Green  Color_Red
# 0         0.0          0.0        1.0
# 1         1.0          0.0        0.0
# 2         0.0          1.0        0.0
# 3         0.0          0.0        1.0

주의사항

  • 차원 증가: 범주가 많을수록 특성 공간이 크게 늘어나고 희소(sparse)해진다.
  • 메모리·연산 비용: 희소 행렬(sparse matrix)을 사용해 메모리 부담을 완화할 수 있지만, 고차원에서는 여전히 부담이 클 수 있다.
  • 대안 기법:
    • 순서가 있는 범주: Ordinal Encoding
    • 딥러닝 임베딩: Embedding 레이어
    • 해싱 트릭: Feature Hashing

요약

원-핫 인코딩은 범주형 변수를 순서나 크기 개념 없이 이진 벡터로 변환하여 머신러닝 모델이 올바르게 처리하도록 돕는 기본적인 전처리 기법입니다. 카디널리티(cardinality)가 높은 변수에는 차원 수 증가 문제를 고려해 대안 기법을 함께 검토하는 것이 좋습니다.

출처

profile
Story Engineer

0개의 댓글