카운트 인코딩
카운트 인코딩
개요
카운트 인코딩(Count Encoding)은 범주형 변수(Categorical Variable)를 수치형 변수로 변환하는 대표적인 인코딩 기법 중 하나입니다. 머신러닝 모델은 일반적으로 문자열 형태의 범주형 데이터를 직접 처리할 수 없기 때문에, 이러한 데이터를 수치화하는 전처리 과정이 필수적입니다. 카운트 인코딩은 각 범주(category)가 데이터셋 내에서 나타나는 빈도(frequency)를 그 범주의 값으로 대체함으로써 인코딩을 수행합니다.
이 기법은 특히 고유 카테고리 수(Cardinality)가 많은 범주형 변수에서 유용하게 사용되며, 단순하면서도 강력한 정보를 제공할 수 있어 다양한 데이터 과학 프로젝트에서 널리 활용됩니다.
카운트 인코딩의 원리
기본 개념
카운트 인코딩은 다음과 같은 방식으로 작동합니다:
- 범주형 변수의 각 고유 값(unique value)을 식별합니다.
- 각 값이 전체 데이터셋에서 몇 번 등장하는지를 세어 빈도를 계산합니다.
- 원래의 범주 값을 해당 빈도 수로 대체합니다.
예를 들어, 다음과 같은 데이터가 있다고 가정해 봅시다:
이름 |
---|
김철수 |
이영희 |
김철수 |
박민수 |
이영희 |
김철수 |
이 경우, 이름 열에 대한 카운트 인코딩은 다음과 같이 됩니다:
- 김철수: 3회 → 3
- 이영희: 2회 → 2
- 박민수: 1회 → 1
결과적으로 인코딩 후의 데이터는:
이름 |
---|
3 |
2 |
3 |
1 |
2 |
3 |
이렇게 변환됩니다.
수학적 표현
카운트 인코딩은 다음과 같이 수식으로 표현할 수 있습니다:
[ \text{CountEncoding}(x_i) = \sum_{j=1}^{n} \mathbb{I}(x_j = x_i) ]
여기서: - ( x_i ): ( i )-번째 샘플의 범주 값 - ( n ): 전체 샘플 수 - ( \mathbb{I} ): 지시 함수(indicator function), 조건이 참이면 1, 거짓이면 0
카운트 인코딩의 장점과 단점
장점
- 단순성: 구현이 매우 간단하며 계산 비용이 낮습니다.
- 정보 보존: 빈도 정보는 데이터의 분포를 반영하므로, 모델이 특정 범주가 일반적인지 희귀한지 판단하는 데 도움을 줍니다.
- 고차원 문제 해결: 원-핫 인코딩(One-Hot Encoding)처럼 차원이 급격히 증가하지 않아 메모리 사용이 효율적입니다.
- 결측치 처리 가능: 희귀한 범주는 낮은 카운트 값을 가지므로, 후속 처리에서 쉽게 그룹화하거나 처리 가능합니다.
단점
- 정보 왜곡 가능성: 동일한 빈도를 가진 다른 범주를 동일한 값으로 인코딩하므로, 의미론적 차이가 사라질 수 있습니다.
- 과적합 가능성: 훈련 데이터에서만 빈도를 계산하면, 테스트 데이터에 새로운 범주가 등장할 경우 처리가 어렵습니다.
- 순서 정보의 부재: 범주 간의 순서나 계층 구조가 있을 경우, 카운트 인코딩은 이를 반영하지 못합니다.
카운트 인코딩의 활용 사례
1. 고객 행동 분석
고객의 구매 기록에서 특정 제품 카테고리의 등장 빈도를 인코딩하여, "자주 구매하는 고객"과 "희귀 구매 고객"을 구분할 수 있습니다. 이는 추천 시스템이나 클러스터링 모델에서 유용한 피처가 됩니다.
2. 텍스트 마이닝
문서 내 단어의 출현 빈도를 기반으로 단어를 인코딩하는 경우, TF-IDF 등의 복잡한 기법보다 먼저 적용할 수 있는 기초적인 전처리 단계로 사용됩니다.
3. 고유 카테고리 수가 많은 피처
예: 사용자 ID, 제품 코드, 지역 코드 등 카테고리 수가 수천~수만 개에 달하는 경우, 원-핫 인코딩은 불가능하지만 카운트 인코딩은 실용적인 대안이 됩니다.
구현 예시 (Python)
다음은 Python에서 pandas
를 사용하여 카운트 인코딩을 구현하는 예시입니다:
import pandas as pd
# 샘플 데이터 생성
data = pd.DataFrame({'city': ['서울', '부산', '서울', '대구', '부산', '인천', '서울']})
# 각 범주의 빈도 계산
count_map = data['city'].value_counts().to_dict()
# 카운트 인코딩 적용
data['city_encoded'] = data['city'].map(count_map)
print(data)
출력 결과:
city city_encoded
0 서울 3
1 부산 2
2 서울 3
3 대구 1
4 부산 2
5 인천 1
6 서울 3
관련 인코딩 기법
기법 | 설명 |
---|---|
라벨 인코딩(Label Encoding) | 범주에 정수 번호를 부여 (순서 없음) |
원-핫 인코딩(One-Hot Encoding) | 각 범주를 독립된 이진 열로 변환 |
타깃 인코딩(Target Encoding) | 범주별 타깃 변수의 평균으로 인코딩 |
이진 인코딩(Binary Encoding) | 라벨 인코딩 후 이진수로 변환하여 차원 축소 |
참고 자료 및 관련 문서
- Scikit-learn Documentation - Preprocessing
- pandas.DataFrame.value_counts
- James, G. et al. (2013). An Introduction to Statistical Learning. Springer. Chapter 8: Tree-Based Methods (인코딩 전처리 관련 설명 포함)
- Micci-Barreca, D. (2001). A Preprocessing Scheme for High-Cardinality Categorical Attributes in Classification and Prediction Problems. ACM SIGKDD Explorations.
카운트 인코딩은 데이터 과학 프로젝트에서 범주형 변수를 효과적으로 처리하기 위한 기본적이면서도 강력한 도구입니다. 적절한 상황에서 활용하면 모델 성능 향상에 기여할 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.