"매 categorical value → orthogonal binary vector". One-hot encoding 은 K 개 category 를 K 개 0/1 column 으로 펼치는 매 가장 단순한 categorical → numeric 변환. 매 linear model / tree-based model 의 default, 그러나 high-cardinality 에서는 target / hash encoding 으로 교체.
매 핵심
매 정의
category set {A, B, C} → vectors (1,0,0), (0,1,0), (0,0,1).
ordinal encoding (0,1,2) 와 달리 순서 가정 없음.
linear / kernel model 의 가정 (numeric distance) 을 깨지 않음.
매 dummy variable trap
K columns → 1 redundant (sum=1 의 collinearity).
linear regression 의 unregularized 경우 → drop_first=True.
tree / regularized model (Lasso, Ridge) → 매 전체 K 유지 가능.
fromsklearn.preprocessingimportLabelEncoder,OrdinalEncoder# DON'T: feed LabelEncoder output to linear modelle=LabelEncoder()y=le.fit_transform(["red","blue","green"])# [2, 0, 1] — fake order!# DO: OrdinalEncoder when order is realoe=OrdinalEncoder(categories=[["low","med","high"]])
언제: 매 quick prototype, low-cardinality categorical, linear / tree baseline.
언제 X: 매 high-cardinality (>1000), text tokens (use embedding), online learning with new categories.
❌ 안티패턴
Train-only fit: test set 의 unseen category 에 crash → handle_unknown="ignore".
Drop-first with regularized model: 불필요한 정보 손실.
OHE on high-cardinality without sparse: memory blowup.
LabelEncoder for features: fake ordinal 강제, linear model 망가짐.
Leak via target encoding without fold: target encoding 사용 시 K-fold 필수.