머신러닝

스케일링(Scaling)

Wat_zy 2025. 12. 1. 15:02

스케일링:

수치형 데이터의 단위·크기·범위를 일정하게 맞추는 전처리 과정

머신러닝은 스케일이 다른 변수들이 섞여 있으면 모델이 특정 변수에 과도하게 영향을 받는 문제가 발생한다.

 

⚠ 스케일 민감 모델

  • KNN (거리 기반)
  • SVM (거리 기반)
  • 선형 회귀/로지스틱 회귀
  • 신경망(딥러닝)
  • PCA(주성분 분석)

반대로 트리 기반 모델은 스케일에 영향을 받지 않는다.
(RandomForest, XGBoost, LightGBM)

 

스케일링 종류

1) StandardScaler(표준화)

각 값을 평균(μ)=0, 표준편차(σ)=1로 변환하는 방식

즉, 데이터의 모양(분포)은 유지하면서 중심을 0, 분포 폭을 1로 조정한다.

언제 사용하는가?

  • 데이터가 정규분포에 가깝거나 대칭적일 때
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

 

2) MinMaxScaler(최소-최대 정규화)

각 값을 0~1 범위로 변환한다.

데이터의 절대 범위를 일정하게 만들 때 유용

언제 사용하는가?

  • 정규분포 형태가 아닐 때
  • 값의 범위를 동일하게 만들고 싶을 때
  • 딥러닝에서 자주 사용 (0~1 범위가 신경망과 잘 맞음)
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

 

3) RobultScaler(이상치에 강한 Scaler)

평균/표준편차 대신 중앙값(Median)IQR(사분위 범위) 기준으로 스케일링

이상치가 많은 경우 데이터 전체가 영향을 받지 않기 때문에 안정적

from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

 

스케일링 기준

목적 추천 스케일링
딥러닝 모델 MinMaxScaler
정규분포 데이터 StandardScaler
이상치가 많음 RobustScaler
차원 축소(PCA) StandardScaler 필수
거리 기반 모델(KNN/SVM) StandardScaler 또는 MinMaxScaler

 

스케일링의 실제 효과

  • KNN/SVM → 정확도 크게 향상됨
  • 선형/로지스틱 회귀 → 계수가 안정화되고 학습 수렴 속도 개선
  • 딥러닝 → 학습 속도 증가, 폭주/발산 방지
  • PCA → 주성분 방향이 달라지므로 필수

split 이전에 스케일링을 진행하면 Test 데이터의 정보가 scaler에 반영되어 데이터 누수가 발생하기에 scale은 split 이후에 해야 한다.

'머신러닝' 카테고리의 다른 글

회귀 분석 (Regression Analysis)  (0) 2025.12.22
인코딩(Encoding)  (0) 2025.12.01
지도학습 & 비지도학습  (0) 2025.11.28