에듀테크 프로젝트 대시보드
원-핫 인코딩 & 특성 스케일링
대부분의 머신러닝 모델은 숫자 벡터만 입력받을 수 있습니다. 그런데 실제 데이터에는 "과일 종류", "도시 이름" 같은 범주형(categorical) 값도 있고, "나이"와 "연 소득"처럼 단위와 크기가 완전히 다른 숫자들도 섞여 있습니다. 이 둘을 모델이 오해하지 않도록 다듬는 과정이 원-핫 인코딩과 특성 스케일링입니다.
"사과=0, 바나나=1, 체리=2" 처럼 범주에 그냥 번호를 매기는 것을 레이블 인코딩이라 합니다. 문제는 대부분의 모델이 숫자의 크기 관계를 그대로 믿는다는 점입니다. 모델 입장에서는 "체리(2)가 사과(0)의 2배"라는 뜻 없는 관계가 생겨버립니다. 순서가 없는 범주라면 이는 명백한 왜곡입니다.
| 과일 | 레이블 인코딩 | 원-핫: 사과 | 원-핫: 바나나 | 원-핫: 체리 |
|---|---|---|---|---|
| 사과 | 0 | 1 | 0 | 0 |
| 바나나 | 1 | 0 | 1 | 0 |
| 체리 | 2 | 0 | 0 | 1 |
원-핫 인코딩은 범주 개수만큼 새 열을 만들어, 해당하는 열만 1이고 나머지는 전부 0으로 채웁니다. 이렇게 하면 범주들 사이에 거짓 순서나 거리가 생기지 않습니다. 다만 범주 종류가 수천 개로 많아지면 열이 그만큼 늘어나는 차원 폭발이 단점이라, 그럴 땐 임베딩 같은 다른 기법을 씁니다.
"나이(0~100)"와 "연 소득(0~억 단위)"을 그대로 모델에 넣으면, 값의 크기 차이 때문에 소득이 거리 계산이나 경사하강법을 완전히 지배해버립니다. 두 가지 대표적인 스케일링 방법이 있습니다.
20명의 (나이, 연 소득) 데이터와 질의(연두색 ★)가 있습니다. 스케일링 전에는 유클리드 거리 계산에서 소득(단위가 훨씬 큼)이 나이를 완전히 압도합니다. 스케일링 후(두 특성을 표준화)에는 두 특성이 비슷한 비중으로 반영되어, 진짜로 나이와 소득이 함께 비슷한 이웃이 강조됩니다. 버튼을 눌러 KNN이 고르는 가장 가까운 이웃 3명(굵은 테두리)이 어떻게 달라지는지 확인해 보세요.
| 알고리즘 | 스케일링 영향 |
|---|---|
| KNN, k-평균 클러스터링 | 거리 계산 자체가 스케일에 좌우됨 — 필수 |
| 경사하강법 기반 모델(선형/로지스틱 회귀, 신경망) | 특성마다 기울기 크기가 달라 수렴이 느려지거나 지그재그로 진동 |
| SVM (커널 사용 시) | 거리·내적 기반이라 스케일에 민감 — 권장 |
| 결정 트리, 랜덤 포레스트 | 임계값으로 값의 순서만 비교하므로 스케일 영향 거의 없음 |