피처 스케일링 (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. 프로젝트 회고
[[게임 구매 예측 프로젝트]]
- 변수 스케일링 및 파생 변수 생성에서 MinMax 적용
- 로그 데이터와 명성 같이 다른 종류의 feature의 경우, 값 분포가 차이났을텐데 MinMax Scaling을 사용했다.
- 유저 수치형 피처 중
명성,장비점수,레벨등이 서로 단위가 다르고 크기 차이도 크다 - 스케일 차이에 의해 모델이 편향될 가능성이 있어서 전체 feature에 대해
StandardScaler를 적용하는 것이 더 좋았을 듯 하다. - 사실
RandomForest,LGBM,XGB같이 Tree based Model을 사용해서 feature에 집착할 필요는 없었다. (순서와 구간 분할에 집중)
'Data Analysis > Preprocessing' 카테고리의 다른 글
| 6. 데이터 불균형 처리 (Data Imbalance Handling) (0) | 2025.04.26 |
|---|---|
| 5. 피처 인코딩 (Feature Encoding) (0) | 2025.04.26 |
| 3. 피처 변환 (Feature Transformation) (0) | 2025.04.24 |
| 2. 이상치 처리 (Outlier Handling) (0) | 2025.04.23 |
| 1. 결측치 처리 (Missing Value Handling) (0) | 2025.04.23 |
댓글