스케일은 모델이 느끼는 거리를 바꿔
연봉이 수천만 단위이고 방문 횟수가 한 자릿수라면 두 열의 숫자 크기는 크게 달라. 선형 모델의 규제, k-최근접 이웃과 k-평균의 거리, 신경망의 경사 계산은 이 크기에 영향을 받아. 그대로 두면 단위가 큰 열이 중요해서가 아니라 숫자가 커서 판단을 지배할 수 있어. 반면 결정나무는 값의 순서와 분할점에 관심이 있으므로 보통 스케일 조정이 필요하지 않아.
분포와 목적에 맞는 변환을 골라
평균을 중심으로 비교적 대칭인 수치에는 StandardScaler가 자연스러워. 극단치가 많다면 중앙값과 사분위 범위를 쓰는 RobustScaler가 덜 흔들려. 입력 범위를 0과 1 사이처럼 제한해야 한다면 MinMaxScaler를 쓸 수 있지만 새 자료가 학습 범위를 벗어날 수 있다는 점을 기억해. 오른쪽 꼬리가 긴 금액이나 횟수는 로그 변환 뒤 스케일링하는 편이 관계를 더 잘 드러내기도 해.
범주는 숫자로 바꿔도 뜻을 지켜야 해
- 원-핫 인코딩: 값 종류가 적고 순서가 없는 열에 좋아. 넓은 희소 행렬이 생기지만 대부분의 모델에서 안전해.
- 순서 인코딩: ‘낮음·중간·높음’처럼 실제 순서가 있을 때만 써. 임의의 번호는 거짓된 크기 관계를 만들어.
- 목표 인코딩: 종류가 많은 범주를 목표 평균으로 줄일 수 있지만 각 교차검증 폴드의 학습 부분에서만 계산해야 해.
- 해싱: 범주 사전을 저장하기 어렵고 충돌을 감수할 수 있을 때 고정된 차원으로 바꿔.
처음 보는 범주를 계획해
서비스에는 학습 때 없던 도시나 상품 코드가 반드시 들어와. 인코더가 오류를 낼지, ‘기타’로 묶을지, 해시 공간에 넣을지 미리 정해야 해. 무조건 기타로 합치면 중요한 새 범주의 변화를 놓칠 수 있으니 미지 범주 비율을 감시하고 사전 갱신 조건을 두는 게 좋아.
변환은 학습 자료에만 맞춰
평균, 표준편차, 범주 목록, 목표 평균을 전체 자료에서 계산하면 검증 정보가 새어. 먼저 자료를 나누고 각 변환기를 학습 부분에만 맞춰야 해. 교차검증에서는 폴드마다 이 과정이 반복되어야 하고. ColumnTransformer로 수치 열과 범주 열의 경로를 선언하면 어떤 열에 무슨 변환이 적용되는지 코드 한곳에서 볼 수 있어.
파이프라인이 유일한 입구가 되어야 해
스케일러와 인코더를 모델 앞에 묶어 원시 행부터 예측까지 한 호출로 실행해. 노트북에서 손으로 변환한 배열을 저장하면 제공 코드가 같은 순서와 통계를 재현하기 어려워져. 변환 뒤 열 이름과 차원을 검사하고, 직렬화한 파이프라인을 새 프로세스에서 불러 원시 행으로 시험해야 해.