🖇 스케일링이란?
🖇 주요 스케일링 방법
🖇 스케일링 시 주의할 점
단위가 서로 다른 여러 변수들이 혼합된 데이터에서, 스케일링은 각 변수의 영향력을 균형 있게 조정해주는 역할을 한다.
특히 거리 기반 알고리즘이나 경사 하강법을 사용하는 선형 모델에서는 스케일링이 성능에 직접적인 영향을 주기도 한다.
이 글에서는 대표적인 세 가지 스케일링 기법인 StandardScaler, RobustScaler, MinMaxScaler를 중심으로
언제 어떤 방법을 선택해야 하는지, 그리고 스케일링 시 주의사항까지 정리해 보았다.
스케일링은 데이터의 범위를 조정하여 머신러닝 모델의 성능을 향상시키는 전처리 과정이다.
특히, 거리 기반 알고리즘(KNN, SVM 등)이나 경사 하강법을 사용하는 모델에서는 반드시 스케일링 써서 각각 변수의 특성에 따라 동일한 스케일을 지닐수 있게 맞춰주는것이 중요하다.
스케일링에는 여러 방식이 있으며, 각각의 특성과 장단점에 따라 선택이 달라진다.
아래에서 가장 널리 쓰이는 세 가지 스케일링 방법을 알아보자.
데이터의 평균을 0, 표준편차를 1로 조정하여 정규 분포를 따르도록 변환한다.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df[['feature1', 'feature2']])
장점
: 정규 분포를 따르는 데이터에 적합하며, 대부분의 머신러닝 알고리즘에서 효과적이다.
단점
: 이상치에 민감하여, 이상치가 있는 경우 성능이 저하될 수 있다.
모든 데이터가 정규 분포를 따르는 것은 아니다.
특히 이상치가 많은 데이터에서는 평균과 표준편차를 기반으로 하는 스케일링은 오히려 문제를 일으킬 수 있다.
이럴 때 사용할 수 있는 방법이 RobustScaler이다.
중앙값과 사분위 범위를 사용하여 데이터를 스케일링한다. 표준화와 유사하지만, 이상치의 영향을 덜 받는다.
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
scaled_data = scaler.fit_transform(df[['feature1', 'feature2']])
장점
: 이상치에 강건하여, 이상치가 많은 데이터에 적합하다.
단점
: 데이터의 분포를 완전히 정규화하지는 않는다.
데이터를 0과 1 사이의 범위로 조정한다. 주로 최소값과 최대값을 사용하여 계산한다.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(df[['feature1', 'feature2']])
장점
: 데이터의 분포를 유지하면서 스케일을 조정하므로, 신경망과 같은 알고리즘에서 유용하다.
단점
: 이상치에 민감하여, 이상치가 있는 경우 대부분의 데이터가 좁은 범위로 압축될 수 있다.
세 가지 스케일링 기법을 비교해 보면 아래와 같이 요약할 수 있다.
| 스케일링 기법 | 적합한 상황 | 특징 |
|---|---|---|
| StandardScaler | 정규 분포를 따르고 이상치가 없는 경우 | 이상치에 민감함 |
| RobustScaler | 이상치가 많은 경우 | 정규분포를 따르지 않을 때 유용 |
| MinMaxScaler | 데이터를 0과 1 사이로 조정해야 하는 경우 | 주로 딥러닝 모델에서 사용됨 |
✓ 스케일링은 훈련 데이터에 대해 fit하고, 테스트 데이터에는 transform만 수행해야 한다.
✓ 스케일링은 모델 학습 전에 반드시 수행해야 하며, 파이프라인을 사용하면 이 과정을 자동화할 수 있다.
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
pipeline = Pipeline([
('scaler', StandardScaler()),
('classifier', LogisticRegression())
])
pipeline.fit(X_train, y_train)
위 코드는 스케일링과 모델 학습을 한 번에 처리할 수 있는 파이프라인 구성 예시이다.
💡 왜 이렇게 사용하는가?
보통 머신러닝에서는 학습 데이터와 테스트 데이터가 분리되어 있다.
StandardScaler()는fit()시 평균과 표준편차를 계산한 후,transform()으로 데이터를 변환한다.
따라서 테스트 데이터를 변환할 때는 학습 데이터에서 계산된 값(평균/표준편차)을 그대로 사용해야 한다.테스트 데이터에
it_transform()을 적용하면, X_test 기준으로 평균/표준편차가 새로 계산되기 때문에 학습 기준과 달라지고 모델 성능이 왜곡될 수 있다.
지금까지 데이터 범위 조정할 수 있는 스케일링에 대해 알아보았다.
스케일링은 모델의 성능이나 학습 안정성에 직접적인 영향을 줄 수 있는 중요한 전처리 과정이다.
무작정 하나의 방법을 사용하는 것보다는 데이터의 분포와 이상치 여부를 먼저 확인하고, 상황에 맞는 스케일링 방법을 선택하는 것이 바람직할 것이다.
실제 프로젝트에서는 전처리 과정을 파이프라인으로 구성해두면,
스케일링뿐 아니라 전체 흐름을 더 깔끔하게 관리할 수 있다는 점도 함께 기억해두자 :)