목표값 인코딩 및 고급 범주형 데이터 처리
목표값 인코딩, 빈도 인코딩, 이진 인코딩, 고유값이 많은 열을 위한 임베딩을 다룹니다.
목표값 인코딩 및 고급 범주형 데이터 처리은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
범주형 인코딩 문제
모델에는 숫자가 필요하지만 범주는 텍스트입니다. 범주가 적을 때는 원-핫 인코딩이 잘 작동하지만, 범주 수가 많은 특성(수천 개의 도시나 제품)은 열을 너무 많이 만듭니다.
원-핫 인코딩과 레이블 인코딩의 한계
원-핫 인코딩은 차원 수를 폭발적으로 늘립니다. 단순한 레이블 인코딩은 잘못된 순서를 만들어 냅니다(도시 5가 도시 2보다 큰 것은 아닙니다). 범주 수가 많은 데이터에는 더 정교한 인코딩이 필요합니다.
타깃 인코딩이란 무엇인가요
타깃 인코딩은 각 범주를 해당 범주의 목표값 평균으로 대체합니다. 예를 들어 도시는 해당 도시에 속한 고객의 평균 이탈률이라는 하나의 유용한 숫자로 바뀝니다.
import pandas as pd
means = df.groupby("city")["target"].mean()
df["city_encoded"] = df["city"].map(means)과적합의 위험
드문 범주는 행이 적어 극단적인 평균을 얻게 되고, 목표값 정보가 새어 나가 과적합됩니다. 한 번만 나타난 범주는 그 하나의 레이블을 그대로 복사하게 됩니다. 이를 해결하려면 평활화를 사용합니다.
추정값 평활화
평활화는 범주의 평균과 전체 평균을 해당 범주의 표본 수에 따라 가중하여 결합합니다. 표본이 적은 범주는 전체 평균에 가까워지므로 분산이 줄어듭니다.
import pandas as pd
global_mean = df["target"].mean()
agg = df.groupby("city")["target"].agg(["mean", "count"])
smoothing = 10
agg["enc"] = (agg["count"] * agg["mean"] + smoothing * global_mean) / (agg["count"] + smoothing)
df["city_enc"] = df["city"].map(agg["enc"])범주형 인코더 라이브러리
category_encoders 패키지는 scikit-learn API로 이러한 인코더를 구현하므로, 파이프라인에 연결하고 훈련 세트와 테스트 세트에 일관되게 적용할 수 있습니다.
import category_encoders as ce
encoder = ce.TargetEncoder(cols=["city", "product"], smoothing=10)
X_enc = encoder.fit_transform(X_train, y_train)
X_test_enc = encoder.transform(X_test)실전에서 정보 누수 방지하기
항상 훈련 데이터에만 인코더를 fit한 다음 검증 데이터와 테스트 데이터에 transform하십시오. 더 나은 방법은 교차 검증 또는 폴드 외 인코딩을 사용하여 각 행이 해당 행을 제외한 데이터로 인코딩되도록 하는 것입니다.
import category_encoders as ce
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
pipe = make_pipeline(
ce.TargetEncoder(cols=["city"]),
LogisticRegression(),
)
# fit inside CV to encode without leakage이진 인코딩
BinaryEncoder는 범주를 이진 숫자로 변환하며, N개의 열 대신 log2(N)개의 열만 사용합니다. 원-핫 인코딩과 타깃 인코딩 사이의 간결한 절충안입니다.
import category_encoders as ce
encoder = ce.BinaryEncoder(cols=["product_id"])
X_enc = encoder.fit_transform(X_train)
# 256 categories -> 8 binary columns유용한 다른 인코더
category_encoders는 CountEncoder(각 범주의 빈도), LeaveOneOutEncoder(현재 행을 제외한 타깃 평균), CatBoostEncoder(순서가 반영된 타깃 통계량)도 제공합니다.
import category_encoders as ce
count_enc = ce.CountEncoder(cols=["city"])
loo_enc = ce.LeaveOneOutEncoder(cols=["city"])고유값 수가 많은 특성 다루기
고유값 수가 매우 많은 경우 타깃 인코딩이나 빈도 인코딩은 하나의 열로 압축하고, 이진 인코딩은 간결한 형태를 유지하며, 희소 범주를 "기타" 묶음으로 그룹화하면 잡음이 줄어듭니다. 고유값 수와 정보 누수 위험을 기준으로 선택하십시오.
import pandas as pd
freq = df["product"].value_counts()
rare = freq[freq < 20].index
df["product"] = df["product"].replace(rare, "other")인코더 선택하기
범주가 적으면 원-핫 인코딩을 사용하십시오. 범주가 많은 트리 모델에는 타깃 인코딩이나 CatBoost 인코딩을 사용하십시오. 간결성이 필요하면 이진 인코딩을 사용하십시오. 항상 훈련 데이터에만 fit하고 평활화 또는 폴드 외 방식을 사용하여 정보 누수를 방지하십시오.
확인 문제
범주형 인코딩에 대한 지식을 확인해 보십시오.
복습
복습: 타깃 인코딩은 범주를 해당 타깃의 평균으로 대체하며, 평활화를 사용해 표본이 적은 범주의 영향을 완화합니다. category_encoders(TargetEncoder, BinaryEncoder, CatBoost/LeaveOneOut)를 사용하고, 정보 누수를 방지하려면 훈련 데이터에만 fit하거나 폴드 외 방식으로 처리하십시오. 간결한 인코더는 원-핫 인코딩으로 처리하기 어려운 고유값이 많은 특성을 다룹니다.
자주 묻는 질문
“목표값 인코딩 및 고급 범주형 데이터 처리” 강의는 무료인가요?
네 — “목표값 인코딩 및 고급 범주형 데이터 처리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“목표값 인코딩 및 고급 범주형 데이터 처리”에서 뭘 배우나요?
목표값 인코딩, 빈도 인코딩, 이진 인코딩, 고유값이 많은 열을 위한 임베딩을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“목표값 인코딩 및 고급 범주형 데이터 처리” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 특성 선택 방법
- 상호작용 및 다항 특성 생성
- 목표값 인코딩 및 고급 범주형 데이터 처리
- Featuretools를 활용한 자동 특성 공학