인공지능

피처 스케일링과 정규화

존카터 2025. 8. 27. 12:37

이상치에 민감한 기법과, 이상치 영향을 줄이는 기법 정리

스케일링은 피처(열)별 수치 범위를 맞추는 작업이고, 정규화는 샘플(행)별 벡터의 크기를 1로 맞추는 작업이다. 어떤 기법은 이상치에 민감하고, 어떤 기법은 비교적 둔감하다. 


1) 이상치에 민감한 기법

StandardScaler

평균을 기준점으로 잡고 표준편차로 나누어 표준화하는 방식이다.

z = (x - μ) / σ

여기서 μ는 평균, σ는 표준편차이다. 평균과 표준편차는 극단값의 영향을 크게 받는다. 데이터에 1000 같은 큰 값이 하나 섞이면 평균과 표준편차가 끌려 올라가고, 정상 구간(예: 10~15)은 z-스케일에서 서로 바싹 붙어버린다. 결국 정상 구간의 미세한 차이가 뭉개지는 문제가 생긴다. 실전에서는 먼저 이상치 유무를 확인하고, 필요하면 클리핑(상·하단 자르기), 윈저라이징(끝값으로 묶기), 혹은 로그/루트 같은 단순 변환을 곁들인 뒤 StandardScaler를 적용하는 편이 안전하다. 이상치가 많다면 아예 RobustScaler처럼 중앙값·IQR 기반 방법으로 바꾸는 선택도 합리적이다.

MinMaxScaler

최솟값을 0, 최댓값을 1로 맞추는 방식이다.

x' = (x - x_min) / (x_max - x_min)

데이터에 큰 이상치가 하나라도 있으면 그 값이 사실상 x_max가 되고, 대부분의 정상 값이 0 근처 얇은 구간에 압축된다. 이렇게 되면 모델이 정상 값들 사이를 가려내기 어려워진다. 실전에서는 최솟값·최댓값 대신 분위수(예: 5~95%)를 범위로 삼아 압축을 완화하거나, 분포 자체를 균등·정규 분포로 재매핑하는 QuantileTransformer로 갈아타는 식으로 대응하는 편이 낫다.


2) 이상치 영향이 덜한(또는 줄여 주는) 기법

RobustScaler

중앙값과 IQR(사분위 범위)을 사용한다.

x' = (x - median) / IQR

중앙값과 IQR은 평균·표준편차보다 이상치에 덜 끌려간다. 그래서 정상 구간의 상대적 차이를 더 온전히 보존하기 쉽다. 다만 이상치 자체가 사라지는 것은 아니므로, 여전히 아주 큰 값으로 남을 수 있다. 실전에서는 필요하면 클리핑이나 로그 변환을 곁들여 극단값의 영향력을 한 번 더 낮추는 편이 좋다.

QuantileTransformer

값의 순위를 기준으로 재매핑하여, 출력 분포를 균등(uniform)이나 정규(normal)에 가깝게 만든다. 이상치가 있어도 순위만 바꾸지 않으면 레버리지가 커지지 않는다. 다만 원래의 간격 정보가 사라지고 순위 중심의 표현으로 바뀌므로, 거리 기반 모델에서 의미가 달라질 수 있다. 보통 교차검증으로 성능을 확인하면서 쓰는 편이 합리적이다.

PowerTransformer (Yeo–Johnson / Box–Cox)

양의 꼬리가 긴 분포를 더 온순하게 만들어 표준화·회귀에 어울리도록 돕는다. Box–Cox는 입력이 양수여야 하고, Yeo–Johnson은 음수와 0도 다룰 수 있다. 수치의 스케일과 함께 변환에 따른 해석의 변화가 생길 수 있으므로, 모델의 목적과 지표를 함께 보면서 적용하는 편이 좋다.

클리핑/윈저라이징, 로그·루트 변환

클리핑은 임계값 밖의 값을 임계값으로 잘라내는 방법이고, 윈저라이징은 임계값 밖의 값을 경계값으로 치환하는 방법이다. 두 방법 모두 정보 손실이 있으나, 실무에서는 도메인 상 말이 되는 범위를 기준으로 과한 꼬리를 다듬을 때 유용하다. 로그·루트 변환은 큰 값을 완만하게 눌러 주는 간단한 수단이라 자주 쓰인다. 로그는 양수에서만 동작하므로, 0/음수는 오프셋을 더한 뒤 변환하는 식으로 처리한다.


3) 참고: Normalizer는 이상치 방지용이라기보다 ‘규모 차이 제거’용이다

정규화는 샘플(행) 단위로 벡터의 길이를 1로 맞춘다.

x' = x / ||x||

문서 길이나 거래 횟수처럼 “얼마나 많이”가 섞인 데이터를 비교할 때, 길이 차이를 걷어 내고 패턴(방향)만 보겠다는 의도에 잘 맞는다. 반대로 절대량의 차이가 중요한 문제라면 정규화를 적용하면 안 된다. 이상치 자체를 완화하는 도구와는 목적이 다르다는 점을 구분해 두는 편이 좋다.


4) 어떤 것을 고르는 것이 좋은가

선형·거리 기반 모델(SVM, 로지스틱 회귀, KNN, PCA 등)에서는 StandardScaler가 기본값처럼 쓰이지만, 이상치가 눈에 띄면 RobustScaler나 QuantileTransformer, PowerTransformer로 바꾸는 편이 더 낫다. 신경망에서는 MinMaxScaler나 StandardScaler를 많이 쓰고, 이상치가 심하면 사전 클리핑이나 로그 변환을 곁들인다. 문서·코사인 유사도 기반 작업은 Normalizer가 어울린다. 트리·부스팅 계열은 대체로 스케일링 이득이 작으나, 꼬리가 과도하게 길면 간단한 이상치 손질은 도움이 된다. 무엇을 선택하든, 학습 데이터로만 fit을 하고 검증·테스트에는 transform만 적용하여 데이터 누수를 막는 것이 기본이다.