본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
통계의 기초

정규화(Normalisation)와 표준화(Standardisation)란 무엇인가?

by 아참형인간 2026. 9. 9.

https://product.kyobobook.co.kr/detail/S000001952215

 

시계열 데이터 처리와 분석 in R - 교보문고

복잡한 수학 공식 없이 코드 위주의 설명과 실제 데이터를 통해 배우는 시계열 데이터와 알고리즘! 20여 년간 우리나라의 교육통계 데이터를 다뤄온 저자가 꼼꼼하게 안내하는 시계열 데이터 입

product.kyobobook.co.kr

 

소개

머신러닝 튜토리얼을 조금이라도 따라 해본 적이 있다면 다음과 같은 코드를 분명 한 번쯤 작성해봤을 것이다.

from sklearn.preprocessing import MinMaxScaler, StandardScaler

그러고 나서 이런 의문이 들었을 것이다. 둘 중 어떤 것을 사용해야 하고, 그 이유는 무엇일까?

정규화(Normalisation)와 표준화(Standardisation)는 모두 모델링 전에 수치형 데이터의 스케일을 조정하는 특성 스케일링(feature scaling) 기법이다.

두 기법은 흔히 함께 언급되며, 초보자들은 종종 같은 의미로 혼용하기도 한다. 하지만 두 기법은 서로 다른 방식으로 데이터를 변환하며, 잘못 선택하면 모델의 성능에도 영향을 줄 수 있다.

이 글에서는 각 기법이 어떤 역할을 하는지, Python에서 어떻게 구현하는지, 그리고 각각 어떤 상황에서 사용해야 하는지 살펴본다.

정규화(Normalisation)란 무엇인가?

정규화는 모든 값이 일정한 범위 안에 들어오도록 데이터의 스케일을 조정하는 방법이다. 일반적으로 0에서 1 사이의 값으로 변환한다.

 

특성의 최솟값은 0, 최댓값은 1이 되며, 나머지 값들은 그 사이에서 비례적으로 조정된다.

Python 코드 예제

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

data = {
    'price': [150000, 250000, 400000, 500000, 1000000],
    'size_sqft': [800, 1200, 1800, 2200, 4000]
}
df = pd.DataFrame(data)

scaler = MinMaxScaler()
df_normalised = pd.DataFrame(
    scaler.fit_transform(df),
    columns=df.columns
)

출력 결과:

price: 150,000    [0.00]  |  size: 800 sqft    [0.00]
price: 250,000    [0.12]  |  size: 1,200 sqft  [0.13]
price: 400,000    [0.29]  |  size: 1,800 sqft  [0.31]
price: 500,000    [0.41]  |  size: 2,200 sqft  [0.44]
price: 1,000,000  [1.00]  |  size: 4,000 sqft  [1.00]

원래 사용하던 단위가 서로 달랐음에도 이제 두 특성 모두 동일하게 0~1 범위의 스케일을 갖게 된 것을 확인할 수 있다.

표준화(Standardisation)란 무엇인가?

표준화는 데이터의 평균이 0, 표준편차가 1이 되도록 스케일을 조정하는 방법이다. 정규화와 달리 값을 특정 범위 안으로 제한하지 않는다.

 

여기서 μ는 평균이고 σ는 표준편차이다.

표준화된 값(z-score)은 특정 데이터가 평균에서 표준편차 몇 배만큼 떨어져 있는지를 나타낸다. 예를 들어 2.0은 평균보다 표준편차의 2배만큼 높은 값이라는 의미이고, -1.5는 평균보다 표준편차의 1.5배만큼 낮은 값이라는 의미이다.

Python 코드 예제

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler

data = {
    'price': [150000, 250000, 400000, 500000, 1000000],
    'size_sqft': [800, 1200, 1800, 2200, 4000]
}
df = pd.DataFrame(data)

scaler = StandardScaler()
df_standardised = pd.DataFrame(
    scaler.fit_transform(df),
    columns=df.columns
)

출력 결과:

price: 150,000    [-1.049]  |  size: 800 sqft    [-1.081]
price: 250,000    [-0.710]  |  size: 1,200 sqft  [-0.721]
price: 400,000    [-0.203]  |  size: 1,800 sqft  [-0.180]
price: 500,000    [0.135]   |  size: 2,200 sqft  [0.180]
price: 1,000,000  [1.827]   |  size: 4,000 sqft  [1.802]

각 기법은 언제 사용해야 하는가?

가장 중요한 질문이다. 하나씩 살펴보자.

정규화를 사용하는 경우

  1. 알고리즘이 일정한 범위의 값을 요구하는 경우
    *Sigmoid나 tanh 활성화 함수를 사용하는 신경망은 입력값이 **0*에서 1 사이일 때 가장 잘 작동한다. 예를 들어 원래 0~255 범위인 이미지 픽셀 데이터는 거의 항상 0~1 범위로 정규화한다.
  2. 데이터에 큰 이상치가 없다는 것을 알고 있는 경우
    정규화는 최솟값과 최댓값을 기준으로 하기 때문에 하나의 극단적인 이상치만 있어도 나머지 값들이 0~1 범위의 매우 좁은 구간에 몰릴 수 있다.

표준화를 사용하는 경우

  1. 이상치가 있는 경우
    정규화와 달리 표준화는 극단적인 값에 의해 왜곡되지 않는다.

결론

정규화와 표준화는 모두 같은 문제를 해결하지만, 그 방법은 서로 다르다. 어떤 방법을 사용해야 할지 확신이 없다면 일반적으로 표준화가 더 안전한 선택이다.

가장 좋은 방법은 자신의 데이터를 이해하고, 이상치가 존재하는지 또는 발생할 가능성이 있는지를 파악한 다음 적절한 방법을 선택하는 것이다. 그래도 확신이 없다면 두 방법 모두 구현하기가 간단하므로 각각 적용해보고 자신의 상황에서 어떤 방법이 더 잘 작동하는지 확인할 수 있다.

특성 스케일링은 쉽게 간과하기 쉬운 단계이지만 모델 성능에는 의외로 큰 영향을 미칠 수 있다. 이를 올바르게 적용하는 작은 습관이 숙련된 데이터 과학자와 경험이 부족한 데이터 과학자를 구분하는 차이가 된다.

면책 조항: 이 글에 제시된 모든 의견은 저자 개인의 의견이다. 저자는 이 글에서 언급한 어떠한 회사나 제품과도 관련이 없다. 별도의 설명이 없는 한 이 글에 포함된 모든 이미지의 저작권은 저자에게 있다.

 

<출처: https://medium.com/data-science-collective/what-is-normalisation-and-standardisation-eba296eab858>

댓글