들어가며
이번 글에서는 데이터 변환 과정 중 하나인 스케일링에 대하여 다룰 것이다
스케일링이라고 하면 서로 다른 범위(단위)를 가진 특성들을 기준을 맞춰서 일정하게 만들어주는 과정이다
머신러닝 알고리즘은 입력된 데이터의 스케일이 다르면 학습이 불안정하거나 해석이 어려워져
제대로 작동하지 않는 경우가 있다
오늘은 스케일링 방법들 중 정규화와 표준화를 알아볼 것이다
정규화(min-max 스케일링)
정규화(normalization)는 min-max 스케일링이라고도 부르
특성에 대해 0~1의 범위에 들도록 스케일을 조정하는 것을 말한다
데이터에서 최솟값을 뺀 후 최댓값과 최솟값의 차이로 나누면 0~1 범위에 들도록 할 수 있다

사이킷런에서 이 과정을 해주는 MinMaxScaler 변환기를 제공한다
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler(feature_range=((0, 1))
housing_num_min_max_scaled = min_max_scaler.fit_transform(housing_num)
feature_range 매개변수를 통해 0~1이 아닌 다른 범위로 변경 할수도 있다
신경망 분야에서는 평균이 0인 데이터에서 잘 작동하므로
-1~1 범위를 선호한다고 한다
표준화(standardization)
표준화는 정규화와 달리 특정 범위로 값을 제한하지 않는다
표준화는 우선 값에서 평균을 뺀 후 표준 편차로 나누는 과정으로 스케일링한다

표준화는 정규화보다 이상치에 영향을 덜 받는다
만약 일반적인 값이 1~20 인데 100이라는 값이 있다면
정규화는 100을 1에 근접하게 맞추고 1~20의 값을 0~0.1 정도로 맞추게 된다
즉 이상치 하나만 있어도 값이 크게 변한다
하지만 표준화는 이상치에 영향을 받긴 하지만 정규화보다는 영향이 덜하다
표준화역시 사이킷런에서 변환기를 제공해준다
from sklearn.preprocessing import StandardScaler
std_scaler = StandardScaler()
housing_num_std_scaled = std_scaler.fit_transform(housing_num)
특성 분포의 꼬리가 두꺼울 때
특성의 분포가 꼬리가 두꺼운 경우 정규화와 표준화 진행 시 값을 작은 범위로 압축하게된다
꼬리가 두껍다는 것은 평균에서 멀리 떨어진 값이 비교적 많은 경우를 말한다
값이 작은 범위로 압축되는 것을 머신러닝 알고리즘은 일반적으로 좋아하지 않으므로
스케일링하기 전 데이터를 대칭이 되도록 변환을 해주어야
스케일링 했을 때 더 의미있고 안정적으로 작동하게된다
일반적으로는 특성을 제곱근이나 로그값으로 바꾸는 방식으로 변환한다

왼쪽 그래프가 꼬리가 두꺼운 경우이고 오른쪽은 로그값으로 변환된 모습이다
로그값으로 변환하자 가우스 분포(종 모양 분포)를 띈 모습이다
버킷타이징(bucketizing)
꼬리가 두꺼울 때 할 수 있는 또 다른 방법으로는 버킷타이징이 있다
버킷타이징은 분포를 동일한 크기의 버킷으로 나누어서 범주형 데이터로 바꾸는 방법이다
버킷타이징을 하면 연속형 데이터에서 범주형 데이터로 바뀌기에 값들의 크기나 거리 개념이 사라져
스케일링을 해도 의미가 없어진다
버킷타이징 방식으로는 여러가지 중 백분위수로 바꾸는 방법이 있는데
데이터 값을 0~20% / 20~40% / ~~ / 80~100% 로 나누어
각 카테고리에 속하는 데이터의 개수가 거의 비슷하게 만든다

추가로 데이터가 멀티모달 분포(정점(peak)가 2개 이상 나타나는 분포)인 경우
버킷타이징 방식을 사용하여 변환해줄 수 있다
이에 대한건 다음 글에서 다룰 것이다
마치며
이번 글에서는 스케일링 방식 중 표준화와 정규화에 대하여 알아보았고
스케일링을 진행하기 전 데이터를 어떻게 변환시켜야 더 안정적이게 학습하게될지에 대해서도 공부했다
스케일링을 진행하기 데이터 변환을 해야한다는 개념이 처음엔 잘 와닿지 않았다
왜냐하면 스케일링 자체가 데이터를 변환한다는 의미이기 때문에 그랬던 것 같다
여러 그래프랑 설명들을 보고 읽으면서 왜 이 과정을 거쳐야 하는 지 이 과정을 안거치면 어떻게되는지 이해해보니
개념이 구분되고 전체적인 프로세스가 머리 속에서 잘 정리되는 느낌을 받았다
다음 글에서는 아마 마지막에 잠깐 나온 버킷타이징과 관련된 멀티모달 분포에 대해 다루게 될 것 같다
'AI > Machine Learning' 카테고리의 다른 글
| [AI] 변환 파이프라인 (1) | 2026.02.08 |
|---|---|
| [AI] 방사 기저 함수(RBF)를 통한 유사도 측정으로 멀티모달 분포(multimodal distribution) 변환 (1) | 2026.02.08 |
| [AI] 텍스트 특성 다루기 (1) | 2026.02.06 |
| [AI] 데이터 정제하기 (0) | 2026.02.04 |
| [AI] 테스트 세트 만들기 (0) | 2026.02.03 |
