정규화(Normalization) vs 표준화(Standardization)

2025. 5. 14. 21:29·Data Analysis
728x90

데이터 분석과 머신러닝을 할 때, 서로 다른 범위와 단위를 가진 수치형 데이터가 섞여 있을 경우 문제가 발생합니다.

예를 들어

  • 나이: 0 ~ 100
  • 연봉: 2,000,000 ~ 100,000,000

이렇게 단위가 다른 두 변수를 그대로 모델에 넣으면 큰 값이 더 중요한 변수처럼 작용하게 되어 모델이 편향될 수 있습니다.

이 문제를 해결하는 대표적인 방법이 바로 정규화(Normalization) 와 표준화(Standardization)입니다.

 

만일 거리 기반 알고리즘을 개발한다고 했을 때, KNN & KMeans 등은 변수의 스케일에 민감합니다.

문제 상황 예시
거리 기반 알고리즘 KNN, KMeans 등은 변수의 스케일에 민감
기울기 폭주/소실 딥러닝 학습 시 큰 수치로 인해 오차 급증 또는 학습 멈춤
모델 성능 왜곡 회귀분석 시 연봉 변수만 모델에 영향력을 행사

 

1. 정규화(Normalization)

정규화는 값의 범위를 0과 1 사이로 압축하여 스케일을 맞추는 작업입니다.

예를 들어, 학새들의 키가 150cm ~ 190cm 사이라면, 이를 0과 1로 바뀌면 이렇게 됩니다.

원래 키(cm) 정규화 결과
150 0.0
170 0.5
190 1.0

 

수식

X_normalized = (X - X_min) / (X_max - X_min)
  • 서로 범위가 다른 데이터를 같은 기준으로 비교할 때 사용
  • KNN, KMeans, 신경망 등 거리 기반 알고리즘을 사용할 때

그럼 정규화를 어떻게 하냐

가장 많이 사용하는 것이 MinMaxScaler입니다.

MinMaxScaler이란?

MinMaxScaler는 정규화를 자동으로 수행해주는 scikit-learn의 클래스입니다.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df[['income', 'age']] = scaler.fit_transform(df[['income', 'age']])

 

메서드 설명
fit() 데이터의 최대/최소값 계산
transform() 정규화 수식 적용
fit_transform() 두 작업을 한 번에 처리

 

주의사항

  • 이상치(outlier)에 민감
    • 하나의 값이 너무 크면 나머지 값들이 0에 몰려버림

2. 표준화(Standardization)

표준화는 데이터를 평균이 0, 표준편차가 1인 분포로 변환하는 작업입니다.

예를 들어, 수학 점수 평균이 70점, 표준편차가 10점일 때

점수 표준화 결과 (Z-score)

점수 표준화 결과 (Z-score)
70 0.0
80 1.0
60 -1.0

 

수식

X_standardized = (X - 평균) / 표준편차

 

  • 정규분포 기반 모델: 선형 회귀, 로지스틱 회귀, SVM 등 사용
  • 이상치가 있는 경우에도 안정적인 스케일 조정 가능

표준화를 하는 방법은 StandardScaler를 사용하면 됩니다.

StandardScaler란?

StandardScaler는 표준화를 자동으로 수행해주는 scikit-learn의 클래스입니다.

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df[['income', 'age']] = scaler.fit_transform(df[['income', 'age']])

 

메서드 설명
fit() 평균, 표준편차 계산
transform() Z-score 수식 적용
fit_transform() 두 작업을 한 번에 수행

 

 

주의사항

  • 결과 값이 음수나 소수로 나올 수 있으며, 직관적 해석은 어렵다
  • 단위(원, kg 등)를 잃게 됨

 

정리

개념 비유
정규화 모든 사람을 0~1 사이의 키로 만든다. → 상대적 키만 유지됨
표준화 모든 사람의 평균 키를 0으로 놓고, 그보다 얼마나 큰지 측정

 

 

이제 실제 사용 예시를 보도록 하겠습니다.

사용할 데이터는 sklearn.datasets의 breast_cancer (유방암 진단 데이터 셋) 데이터입니다.

from sklearn.datasets import load_breast_cancer
import pandas as pd

# 데이터 로드
data = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)

# 정규화
from sklearn.preprocessing import MinMaxScaler
df_norm = pd.DataFrame(MinMaxScaler().fit_transform(df), columns=df.columns)

# 표준화
from sklearn.preprocessing import StandardScaler
df_std = pd.DataFrame(StandardScaler().fit_transform(df), columns=df.columns)

 

 

정규화 및 표준화를 진행할 때 주의할점

  • 훈련 데이터와 테스트 데이터는 따로 스케일링해야 함
scaler = StandardScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)  # fit() 금지!
  • 범주형 변수에 스케일링 적용 금지
    • 먼저 인코딩을 해야합니다. (LabelEncoder, OneHotEncoder)
  • 중복 처리로 값 왜곡
    • ex: 정규화 후 로그 변환 = 과도환 왜곡

정리

정규화는 데이터의 범위를 0 ~ 1로, 표준화는 분포를 평균 0, 표준편차 1로 맞추는 것입니다.

사용 목적, 모델의 특성, 데이터의 분포에 따라 전략적으로 선택해야합니다.

두 방식 모두 사전 분석 → 정규화 / 표준화 → 모델링 흐름에 필수적인 전처리 과정입니다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Data Analysis' 카테고리의 다른 글

파생변수 생성 - Feature Engineering  (0) 2025.05.19
범주형 변수 인코딩 - Label, One-Hot, Ordinal  (0) 2025.05.19
이상치(Outliers) 탐지와 처리 방법  (0) 2025.05.14
결측치(Missing Values) 처리  (0) 2025.05.12
Hypothesis Test란?  (0) 2023.08.23
'Data Analysis' 카테고리의 다른 글
  • 파생변수 생성 - Feature Engineering
  • 범주형 변수 인코딩 - Label, One-Hot, Ordinal
  • 이상치(Outliers) 탐지와 처리 방법
  • 결측치(Missing Values) 처리
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (141) N
      • python (41) N
        • selenium (4)
        • algorithm (6) N
        • Django (6)
        • Pandas | Numpy (21) N
      • SQL (9)
      • Data Engineer (29)
      • Data Scientist (3)
      • Data Analysis (8)
      • Computer Science (35)
      • Why? (15)
      • 마음가짐 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
정규화(Normalization) vs 표준화(Standardization)
상단으로

티스토리툴바