본문 바로가기
Data Analysis/Preprocessing

4. 피처 스케일링 (Feature Scaling)

by 베짱이28호 2025. 4. 24.

피처 스케일링 (Feature Scaling)

1. 개요

  • 피처마다 값의 단위나 범위가 다를 경우, 특정 모델은 이를 민감하게 반영하게 됨
  • 특히 거리 기반 모델(KNN, SVM), 경사 하강법 기반 모델(로지스틱 회귀, 신경망 등)에서는 **스케일 조정이 필수
  • 이상치, 정규분포 여부 등을 고려하여 적절한 스케일러를 선택해야 함

2. 스케일링 종류

2-1. MinMaxScaler

$$
x' = \frac{x - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}}
$$

  • 모든 데이터를 0~1 사이로 정규화
  • 최소값을 0, 최대값을 1로 맞추는 방식 → 범위 유지
  • 이상치에 매우 민감
  • 이미 범위가 정해진 피처(나이, 점수 등) 또는 딥러닝 전처리에서 자주 사용
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaled = scaler.fit_transform(df[['col1', 'col2']])
df[['col1', 'col2']] = scaled

2-2. StandardScaler

$$
x' = \frac{x - \mu}{\sigma}
$$

  • 데이터를 평균 0, 표준편차 1로 정규화
  • 중심이동 + 분산 조정 → 정규분포 가정 모델에서 유리
  • 이상치에 민감
  • 선형 회귀, 로지스틱 회귀, 신경망 계열 모델에서 기본적으로 사용
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaled = scaler.fit_transform(df[['col1', 'col2']])
df[['col1', 'col2']] = scaled

2-3. RobustScaler

$$
x' = \frac{x - \text{median}(x)}{IQR} = \frac{x - Q_2}{Q_3 - Q_1}
$$

  • 데이터를 중앙값 기준으로 정규화하고, 스케일 기준으로 IQR을 사용
  • 이상치에 강하고, 값이 한쪽으로 치우친 실무 피처에 적합
  • 특히 수익, 사용량처럼 일부 유저만 극단적인 값을 가지는 데이터에 유용
from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()
scaled = scaler.fit_transform(df[['col1', 'col2']])
df[['col1', 'col2']] = scaled

3. 스케일러 선택 기준

기준 MinMaxScaler StandardScaler RobustScaler
중심 기준 최소값 (min) 평균 (mean) 중앙값 (median)
스케일 기준 최대값 - 최소값 (max - min) 표준편차 (std) IQR (Q3 - Q1)
적용 범위 0 ~ 1 평균 0, 표준편차 1 중앙 기준 상대적 범위
분포 가정 없음 정규분포 가정 없음
이상치 민감도 매우 큼 낮음 (이상치에 강함)
권장 사용 모델 딥러닝, KNN, 거리 기반 모델 선형 회귀, 로지스틱 회귀, PCA 이상치 많은 실무 데이터 (로그, 수익 등)
실무 사용 예시 픽셀, 정규화, 비정규 분포 통계 기반 모델, 회귀 수익, 사용량, 클릭수 등 이상치 포함 데이터
메서드 의미 사용 대상
fit() 학습 데이터를 기준으로 스케일 기준(평균, 최대/최소 등)을 학습 학습 데이터
transform() 이미 학습된 기준으로 데이터를 변환 학습/검증/테스트 데이터
fit_transform fit() + transform() 학습 데이터 전용
  • 데이터 분포를 바탕으로 scaler를 어떻게 할 지 저장한다.
  • 검증/테스트 데이터에는 transform()만 사용한다. (기존에 저장한 scaler 변경)

4. 실무 예시

4-1. 정규화가 필요한 모델 사용 시

  • 예: 신경망 기반 모델, KNN, PCA
  • 전략: 스케일링을 하지 않으면 큰 값에 끌려가거나 학습 수렴이 늦어짐
    MinMaxScaler 또는 StandardScaler 필수

4-2. 이상치가 존재하는 경우

  • 예: income, transaction 등에서 일부 극단값 존재
  • 전략: 단순 MinMax 또는 Standard 사용 시 왜곡 → 이후 RobustScaler 등 고려

4-3. 피처마다 단위가 다른 경우

  • 예: 키(cm), 몸무게(kg), 수입(만원) 등
  • 전략: 단위차를 제거하기 위해 스케일 조정 → StandardScaler 사용

5. 프로젝트 회고

[[게임 구매 예측 프로젝트]]

  1. 변수 스케일링 및 파생 변수 생성에서 MinMax 적용
    • 로그 데이터와 명성 같이 다른 종류의 feature의 경우, 값 분포가 차이났을텐데 MinMax Scaling을 사용했다.
    • 유저 수치형 피처 중 명성, 장비점수, 레벨 등이 서로 단위가 다르고 크기 차이도 크다
    • 스케일 차이에 의해 모델이 편향될 가능성이 있어서 전체 feature에 대해 StandardScaler를 적용하는 것이 더 좋았을 듯 하다.
    • 사실 RandomForest, LGBM, XGB같이 Tree based Model을 사용해서 feature에 집착할 필요는 없었다. (순서와 구간 분할에 집중)

댓글