숫자의 크기를 맞추는 두 가지 방식 – 표준화와 정규화

고객을 비슷한 특성끼리 분류하기 위해 다음 두 변수를 사용한다고 하자.

  • 연간 구매금액: 10만 원에서 1,000만 원
  • 고객만족도: 1점에서 5점

고객 A와 고객 B의 차이가 구매금액에서 100만 원이고 만족도에서 3점이라면, 유클리드 거리를 계산할 때 구매금액 차이가 거의 모든 거리를 결정하게 된다.

단순한 거리는 다음과 같이 계산한다.

\[
d=\sqrt{(x_{A1}-x_{B1})^2+(x_{A2}-x_{B2})^2}
\]

구매금액은 단위가 크고 만족도는 단위가 작기 때문에, 만족도 차이는 계산에서 사실상 무시될 수 있다.

그렇다고 구매금액이 만족도보다 본질적으로 더 중요한 것은 아니다. 숫자의 단위가 더 클 뿐이다.

이 문제를 해결하기 위해 각 변수의 중심이나 범위를 일정한 기준으로 바꾸는 작업을 수행한다. 대표적인 방법이 표준화와 최소–최대 정규화다.

두 방법은 모두 숫자의 스케일을 조정하지만 질문이 다르다.

평균에서 얼마나 떨어져 있는지를 표현하려면 표준화를 사용한다.

관찰된 최솟값과 최댓값 사이에서 어느 위치에 있는지를 표현하려면 최소–최대 정규화를 사용한다.

하지만 이 설명만으로는 충분하지 않다. 어떤 분석에서는 스케일 조정이 결과를 크게 바꾸지만, 다른 분석에서는 예측결과가 전혀 달라지지 않을 수 있다. 이상값, 훈련자료와 시험자료의 분리, 범위를 벗어나는 새 관측값도 고려해야 한다.

표준화와 정규화는 용어부터 구분해야 한다

데이터 분석에서 ‘정규화’라는 용어는 하나의 뜻으로만 사용되지 않는다.

분야에 따라 다음과 같은 서로 다른 작업을 정규화라고 부르기도 한다.

  • 값을 0과 1 사이로 변환하는 최소–최대 스케일링
  • 벡터의 길이를 1로 만드는 단위벡터 정규화
  • 확률의 합이 1이 되도록 조정하는 확률 정규화
  • 데이터 분포를 정규분포에 가깝게 변환하는 작업
  • 신경망의 배치 정규화
  • 데이터베이스 정규화

따라서 논문이나 분석보고서에 “자료를 정규화하였다”고만 쓰면 정확히 어떤 변환을 했는지 알 수 없다.

반드시 사용한 식과 기준을 밝혀야 한다.

이 글에서는 다음과 같이 용어를 사용한다.

용어이 글에서의 의미
표준화평균을 빼고 표준편차로 나누는 z점수 변환
정규화최솟값과 최댓값을 이용한 0–1 변환
강건한 스케일링중앙값과 사분위범위를 이용한 변환
단위벡터 정규화각 관측벡터의 길이를 1로 만드는 변환

표준화는 평균과 표준편차를 기준으로 바꾼다

표준화는 각 관측값에서 평균을 빼고 표준편차로 나누는 방법이다.

모집단의 평균과 표준편차를 알고 있다면 다음과 같이 계산한다.

\[
z_i=\frac{x_i-\mu}{\sigma}
\]

실제 데이터 분석에서는 모집단 평균과 표준편차를 모르는 경우가 많다. 이때 표본평균과 표본표준편차를 사용한다.

\[
z_i=\frac{x_i-\bar{x}}{s}
\]

각 기호의 의미는 다음과 같다.

  • \(x_i\): 원래 관측값
  • \(\bar{x}\): 표본평균
  • \(s\): 표본표준편차
  • \(z_i\): 표준화된 값

표본표준편차는 다음과 같이 계산한다.

\[
s=\sqrt{\frac{\sum_{i=1}^{n}(x_i-\bar{x})^2}{n-1}}
\]

같은 표본에서 계산한 평균과 표본표준편차로 표준화하면 변환된 값의 표본평균은 0이 된다.

\[
\bar{z}=0
\]

변환된 값의 표본표준편차는 1이 된다.

\[
s_z=1
\]

z점수는 평균에서 떨어진 거리를 나타낸다

z점수는 원래 값이 평균에서 몇 표준편차만큼 떨어져 있는지를 나타낸다.

  • \(z=0\): 평균과 같은 값
  • \(z=1\): 평균보다 1표준편차 높은 값
  • \(z=-1\): 평균보다 1표준편차 낮은 값
  • \(z=2.5\): 평균보다 2.5표준편차 높은 값

예를 들어 국어점수 90점과 수학점수 85점을 비교한다고 하자.

국어 평균이 80점이고 표준편차가 5점이라면 국어 z점수는 다음과 같다.

\[
z_{\mathrm{국어}}=\frac{90-80}{5}=2
\]

수학 평균이 70점이고 표준편차가 10점이라면 수학 z점수는 다음과 같다.

\[
z_{\mathrm{수학}}=\frac{85-70}{10}=1.5
\]

원점수는 수학이 85점으로 국어 90점보다 낮다. 하지만 각 과목의 평균과 표준편차를 고려하면 국어점수가 평균에서 더 멀리 떨어져 있다.

이 학생은 국어에서 평균보다 2표준편차, 수학에서 평균보다 1.5표준편차 높은 성취를 보였다.

표준화된 값은 0과 1 사이에 제한되지 않는다

표준화 결과는 특정 범위로 제한되지 않는다.

\[
-\infty<z_i<\infty
\]

평균에서 매우 멀리 떨어진 값은 \(z=3\), \(z=-4\)처럼 절댓값이 큰 값을 가질 수 있다.

따라서 표준화는 값의 범위를 제한하려는 방법이 아니다. 평균과 표준편차를 기준으로 상대적인 위치를 표현하는 방법이다.

표준화가 정규분포를 만드는 것은 아니다

‘표준화’와 ‘정규분포’가 함께 언급되다 보니 표준화하면 데이터가 정규분포로 변한다고 오해하기 쉽다.

그러나 표준화는 데이터의 중심과 단위만 바꾸는 선형변환이다.

원래 자료가 오른쪽으로 치우쳐 있다면 표준화한 자료도 오른쪽으로 치우쳐 있다. 봉우리가 두 개라면 표준화 이후에도 봉우리가 두 개다.

표준화는 다음과 같은 특성을 바꾸지 않는다.

  • 관측값의 순서
  • 분포의 비대칭 방향
  • 봉우리의 개수
  • 이상값의 상대적 위치
  • 변수 간 피어슨 상관계수
  • 변수 간 스피어만 순위상관계수

표준화는 정규성 확보를 위한 변환이 아니다.

분포의 심한 비대칭성을 완화하려면 로그변환, 제곱근변환, Box–Cox 변환이나 Yeo–Johnson 변환처럼 분포의 형태를 실제로 바꾸는 비선형변환을 고려해야 한다.

Van den Berg 등(2006)은 중심화, 스케일링과 분포변환을 서로 구분해야 하며, 분석목적과 데이터 구조에 따라 전처리 결과가 크게 달라질 수 있다고 설명한다.

최소–최대 정규화는 범위를 0과 1로 바꾼다

최소–최대 정규화는 관측된 최솟값을 0, 최댓값을 1로 변환한다.

\[
x_i’=\frac{x_i-x_{\min}}{x_{\max}-x_{\min}}
\]

여기서 다음 관계가 성립한다.

\[
x_{\min}\rightarrow0
\]

\[
x_{\max}\rightarrow1
\]

나머지 값은 최솟값과 최댓값 사이에서 같은 비율로 변환된다.

원래 값이 전체 범위의 정확히 중간에 있으면 정규화된 값은 0.5가 된다.

원하는 범위로 변환할 수도 있다

값을 0과 1이 아닌 \(a\)와 \(b\) 사이로 변환하려면 다음 식을 사용할 수 있다.

\[
x_i’=a+\frac{(x_i-x_{\min})(b-a)}{x_{\max}-x_{\min}}
\]

예를 들어 -1과 1 사이로 변환하려면 \(a=-1\), \(b=1\)을 사용한다.

\[
x_i’=-1+\frac{2(x_i-x_{\min})}{x_{\max}-x_{\min}}
\]

최소–최대 정규화도 순서와 분포 모양을 유지한다

최소–최대 정규화는 양의 기울기를 가진 선형변환이다. 따라서 원래 값의 순서가 유지된다.

\[
x_i<x_j
\]

이면 변환 후에도 다음 관계가 유지된다.

\[
x_i'<x_j’
\]

원자료의 관측값 간 상대적인 간격도 동일한 비율로 축소된다.

따라서 최소–최대 정규화가 분포의 모양 자체를 왜곡한다고 말하는 것은 정확하지 않다. 히스토그램의 가로축 단위가 바뀔 뿐 비대칭성이나 봉우리의 구조는 유지된다.

다만 극단값이 존재하면 대부분의 값이 매우 좁은 구간에 압축될 수 있다. 수학적으로 분포 모양이 달라진 것은 아니지만, 알고리즘 입장에서는 정상적인 관측값을 구분하기 어려워질 수 있다.

같은 시험점수를 두 방식으로 변환해 보기

학생 5명의 시험점수가 다음과 같다고 하자.

학생원점수
A50
B60
C70
D80
E90

평균은 70점이다.

\[
\bar{x}=\frac{50+60+70+80+90}{5}=70
\]

표본표준편차를 이용한 표준화

편차제곱의 합은 다음과 같다.

\[
(50-70)^2+(60-70)^2+(70-70)^2+(80-70)^2+(90-70)^2=1000
\]

표본표준편차는 분모에 \(n-1\)을 사용한다.

\[
s=\sqrt{\frac{1000}{4}}\approx15.811
\]

각 점수를 표준화하면 다음과 같다.

학생원점수표준화 계산z점수
A50((50-70)/15.811)-1.265
B60((60-70)/15.811)-0.632
C70((70-70)/15.811)0.000
D80((80-70)/15.811)0.632
E90((90-70)/15.811)1.265

A의 점수는 평균보다 약 1.265표준편차 낮고, E의 점수는 평균보다 약 1.265표준편차 높다.

모집단표준편차를 사용하면 결과가 달라진다

이 학생 5명이 표본이 아니라 분석하려는 전체 모집단이라면 분모에 \(n\)을 사용한 모집단표준편차를 계산할 수 있다.

\[
\sigma=\sqrt{\frac{1000}{5}}\approx14.142
\]

이 값을 사용하면 50점과 90점의 z점수는 각각 약 -1.414와 1.414가 된다.

표본표준편차를 사용한 결과와 값이 다르다.

R의 기본 sd() 함수와 scale() 함수는 표본표준편차를 사용한다. 따라서 R 결과와 직접 비교하려면 분모가 \(n-1\)인 표본표준편차를 사용해야 한다.

최소–최대 정규화

최솟값은 50, 최댓값은 90이므로 범위는 40이다.

\[
x_i’=\frac{x_i-50}{90-50}
\]

결과는 다음과 같다.

학생원점수최소–최대 정규화
A500.00
B600.25
C700.50
D800.75
E901.00

최솟값은 0, 최댓값은 1이 되었고 다른 값은 전체 범위에서의 상대적인 위치를 나타낸다.

두 변환의 해석 차이

학생원점수z점수최소–최대 값
A50-1.2650.00
B60-0.6320.25
C700.0000.50
D800.6320.75
E901.2651.00

z점수는 평균과 표준편차를 기준으로 해석한다.

A의 점수는 평균보다 약 1.265표준편차 낮다.

최소–최대 값은 관찰된 범위를 기준으로 해석한다.

A는 이 자료에서 가장 낮은 값이고, C는 관찰범위의 가운데에 있다.

최소–최대 값 0.5를 50번째 백분위수라고 해석해서는 안 된다. 0.5는 최솟값과 최댓값 사이의 수치적 중간이라는 뜻이지, 관측값의 절반이 그보다 작다는 뜻은 아니다.

표준화도 이상값에 민감하다

원문에서 표준화가 이상값에 비교적 강하다고 설명되는 경우가 있지만 이는 정확하지 않다.

표준화에 사용하는 평균과 표준편차는 모두 이상값에 민감하다.

다음 자료를 살펴보자.

50, 60, 70, 80, 90

여기에 극단값 1,000이 추가되면 평균과 표준편차가 크게 변한다.

그 결과 기존의 50점부터 90점까지의 z점수도 모두 달라진다.

표준화는 이상값을 제거하거나 약화하는 방법이 아니다. 이상값까지 포함해 평균과 표준편차를 계산하므로, 극단값이 표준화 기준 자체를 바꿀 수 있다.

Huber와 Ronchetti(2009)는 평균과 표준편차가 극단적인 오염값에 민감하며, 이상값이 중요한 자료에서는 중앙값과 사분위범위 같은 강건한 위치·산포 측도를 고려할 수 있다고 설명한다.

최소–최대 정규화는 이상값에 더욱 직접적으로 영향을 받는다

최소–최대 정규화는 최솟값과 최댓값을 직접 사용한다.

다음 자료에 1,000이 추가되었다고 하자.

50, 60, 70, 80, 90, 1000

최솟값은 50이고 최댓값은 1,000이다.

기존 값들을 정규화하면 다음과 같다.

원래 값정규화된 값
500.000
600.011
700.021
800.032
900.042
1,0001.000

원래 50에서 90 사이에 고르게 퍼져 있던 다섯 값이 0에서 약 0.042 사이에 몰렸다.

이상값 1,000이 전체 범위를 결정했기 때문이다.

따라서 극단값이 많거나 향후 관측범위가 크게 변할 수 있는 데이터에서는 최소–최대 정규화를 신중하게 사용해야 한다.

표준화와 정규화는 모든 분석에 필요한가

변수의 단위가 다르다고 해서 모든 통계분석에서 반드시 스케일을 맞춰야 하는 것은 아니다.

스케일 조정의 필요성은 분석방법이 변수의 단위에 어떻게 반응하는지에 따라 달라진다.

거리 기반 분석

k-최근접 이웃, k-평균 군집분석과 계층적 군집분석은 변수 사이의 거리를 사용한다.

변수의 단위가 다르면 값의 범위가 큰 변수가 거리계산을 지배할 수 있다. 따라서 스케일 조정이 매우 중요하다.

Milligan과 Cooper(1988)는 군집분석에서 변수 표준화 방식이 군집결과에 영향을 줄 수 있음을 보여주었다. Jain 등(1999)과 Kaufman과 Rousseeuw(2005)도 거리기반 군집분석에서 변수의 스케일과 거리측도의 선택이 핵심적인 설계요소라고 설명한다.

주성분분석

주성분분석은 변수들의 분산을 이용한다.

원래 공분산행렬을 사용하면 분산이 큰 변수가 주성분을 지배할 수 있다. 단위가 서로 다른 변수들을 함께 분석할 때는 표준화한 자료, 즉 상관행렬에 기반한 주성분분석을 고려할 수 있다.

그러나 모든 변수를 반드시 표준화해야 하는 것은 아니다. 원래 분산의 크기가 연구적으로 중요한 정보라면 표준화가 오히려 그 차이를 제거할 수 있다.

규제 회귀분석

릿지회귀와 라쏘회귀는 회귀계수의 크기에 벌점을 부여한다.

변수의 단위가 다르면 같은 정도의 영향도 서로 다른 크기의 회귀계수로 표현될 수 있다. 이 상태에서 동일한 벌점을 적용하면 단위가 작은 변수와 큰 변수가 불공정하게 처리될 수 있다.

따라서 규제 회귀에서는 예측변수를 표준화하는 것이 일반적으로 중요하다(Hastie et al., 2009; James et al., 2021).

신경망

입력변수의 스케일 차이는 경사하강법의 최적화 속도와 안정성에 영향을 줄 수 있다. 입력값이 비슷한 범위에 있으면 학습이 더 안정적으로 진행될 수 있다(Sola & Sevilla, 1997; Bishop, 2006).

그러나 입력변수의 표준화와 배치 정규화는 다른 개념이다.

배치 정규화는 신경망 내부의 중간 활성값을 미니배치 단위로 조정하고 학습 가능한 이동·스케일 모수를 추가하는 기법이다(Ioffe & Szegedy, 2015). 단순한 최소–최대 정규화와 같은 전처리가 아니다.

일반 선형회귀분석

규제가 없는 일반 최소제곱 선형회귀에서는 예측변수를 선형적으로 스케일링해도 절편을 포함한 모형의 적합값과 예측값은 본질적으로 변하지 않는다.

변수 \(X\)를 표준화하면 회귀계수의 수치와 해석 단위는 달라지지만 같은 정보를 사용한 모형의 적합 자체가 자동으로 개선되는 것은 아니다.

예를 들어 원자료의 회귀계수는 다음과 같이 해석할 수 있다.

소득이 1만 원 증가할 때 소비금액이 평균적으로 얼마나 달라지는가?

표준화된 변수의 회귀계수는 다음처럼 해석한다.

소득이 1표준편차 증가할 때 소비금액이 얼마나 달라지는가?

Gelman(2008)은 회귀변수의 스케일 조정이 계수 비교와 해석에 도움이 될 수 있지만, 변수 유형과 연구목적에 맞는 기준을 사용해야 한다고 설명한다.

의사결정나무

의사결정나무, 랜덤포레스트와 많은 트리 기반 부스팅 방법은 변수의 값 자체보다 관측값의 순서에 따라 분할점을 찾는다.

양의 선형변환은 순서를 바꾸지 않으므로 이론적으로는 표준화나 최소–최대 정규화가 트리의 분할결과를 바꾸지 않는 경우가 많다.

따라서 트리 기반 모형에서는 스케일 조정이 필수적이지 않은 경우가 많다. 다만 구현방식, 수치정밀도와 다른 전처리 단계에 따라 세부적인 차이는 발생할 수 있다.

어떤 분석이 스케일에 민감한가

분석방법스케일 민감도일반적인 권장
k-최근접 이웃높음표준화 또는 정규화
k-평균 군집분석높음변수 의미에 맞게 스케일 조정
계층적 군집분석높음거리측도와 함께 검토
주성분분석높음단위가 다르면 표준화 검토
서포트벡터머신대체로 높음스케일 조정 권장
신경망최적화에 영향입력변수 스케일 조정 권장
라쏘·릿지회귀높음예측변수 표준화 권장
일반 선형회귀적합값은 대체로 불변해석·수치계산 목적에 따라 선택
로지스틱 회귀적합확률은 대체로 불변규제 또는 최적화 시 중요
의사결정나무낮음일반적으로 필수 아님
랜덤포레스트낮음일반적으로 필수 아님

이 표는 절대적인 규칙이 아니다. 같은 알고리즘이라도 거리측도, 규제, 최적화 방식과 구현에 따라 결과가 달라질 수 있다.

표준화된 회귀계수가 변수의 중요도를 뜻하지는 않는다

여러 예측변수를 표준화한 뒤 회귀계수의 절댓값을 비교하면 어떤 변수가 더 중요하다고 판단하고 싶어질 수 있다.

그러나 표준화된 회귀계수만으로 변수의 중요도를 단정해서는 안 된다.

회귀계수는 다음 요소의 영향을 받는다.

  • 변수 간 상관관계
  • 측정신뢰도
  • 표본의 분산
  • 공변량 구성
  • 비선형성
  • 상호작용
  • 변수의 인과적 역할
  • 표본의 범위

표본 안에서 분산이 작은 변수는 표준화 과정에서 크게 확대될 수 있다. 측정오차가 큰 변수는 효과가 약하게 추정될 수 있다.

또한 변수 간 다중공선성이 있으면 한 변수의 계수는 다른 변수의 포함 여부에 따라 달라진다.

표준화된 계수는 단위를 맞춘 조건부 연관성이지, 자동적인 인과적 중요도나 정책적 중요도가 아니다.

훈련자료와 시험자료를 따로 처리해야 한다

머신러닝에서 가장 중요한 원칙은 스케일 기준을 훈련자료에서만 계산하는 것이다.

전체 데이터를 먼저 표준화한 뒤 훈련자료와 시험자료로 나누면 시험자료의 평균과 표준편차 정보가 훈련과정에 들어간다.

이는 데이터 누출이다.

올바른 절차는 다음과 같다.

  1. 자료를 훈련자료와 시험자료로 나눈다.
  2. 훈련자료에서 평균과 표준편차를 계산한다.
  3. 그 값으로 훈련자료를 표준화한다.
  4. 같은 평균과 표준편차로 시험자료를 변환한다.
  5. 시험자료의 평균과 표준편차를 새로 계산하지 않는다.

최소–최대 정규화도 동일하다.

  1. 훈련자료에서 최솟값과 최댓값을 계산한다.
  2. 그 기준으로 훈련자료를 변환한다.
  3. 같은 최솟값과 최댓값으로 시험자료를 변환한다.

Kuhn과 Johnson(2013)은 전처리 모수를 전체 자료에서 추정하면 성능평가가 낙관적으로 왜곡될 수 있으므로, 교차검증에서도 각 훈련폴드 안에서 전처리 기준을 다시 추정해야 한다고 설명한다.

시험자료는 0과 1 범위를 벗어날 수 있다

훈련자료에서 구매금액의 최솟값이 10만 원, 최댓값이 100만 원이었다고 하자.

시험자료에 구매금액 120만 원인 고객이 들어오면 정규화된 값은 다음과 같다.

\[
\frac{120-10}{100-10}\approx1.222
\]

1보다 큰 값이 나온다.

이는 계산오류가 아니다. 새로운 관측값이 훈련자료의 최댓값을 넘어섰다는 뜻이다.

마찬가지로 훈련자료의 최솟값보다 작은 새 값은 0보다 작게 변환될 수 있다.

이를 무조건 0과 1 사이로 잘라내면 새로운 값이 범위를 얼마나 벗어났는지에 관한 정보가 사라진다. 값의 제한이 실제 시스템 요구사항인지 먼저 판단해야 한다.

이상값이 많다면 강건한 스케일링을 고려한다

평균과 표준편차가 이상값에 민감하다면 중앙값과 사분위범위를 사용할 수 있다.

중앙값을 \(m\), 제1사분위수를 \(Q_1\), 제3사분위수를 \(Q_3\)라고 하자.

강건한 스케일링은 다음처럼 표현할 수 있다.

\[
r_i=\frac{x_i-m}{Q_3-Q_1}
\]

분모의 \(Q_3-Q_1\)은 사분위범위다.

이 방식은 중앙값을 중심으로 하고 자료의 가운데 50% 범위를 스케일 기준으로 사용한다. 평균과 표준편차보다 일부 극단값에 덜 민감하다.

그러나 강건한 스케일링도 이상값을 제거하지 않는다. 극단값은 여전히 매우 큰 변환값으로 남을 수 있다.

또한 사분위범위가 0인 변수에는 적용할 수 없다.

로그변환은 스케일링과 목적이 다르다

오른쪽으로 심하게 치우친 매출, 소득이나 대기시간에는 로그변환을 고려할 수 있다.

\[
y_i=\log(x_i)
\]

로그변환은 큰 값을 더 강하게 압축하므로 분포의 비대칭성과 이분산성을 줄일 수 있다.

하지만 로그변환은 선형 스케일링과 다르다.

표준화와 최소–최대 정규화는 관측값 간 간격을 일정한 비율로 바꾸지만, 로그변환은 큰 값 사이의 간격을 작은 값 사이의 간격보다 더 많이 압축한다.

따라서 로그변환은 분포와 관계의 형태를 바꾼다.

로그변환 후 회귀계수도 원래 단위의 절대변화가 아니라 비율이나 백분율 변화와 연결될 수 있다.

분포가 치우쳤다는 이유만으로 자동으로 로그변환하지 말고, 연구질문과 결과해석이 로그척도에 적합한지 확인해야 한다.

단위벡터 정규화는 최소–최대 정규화와 다르다

텍스트 분석이나 코사인 유사도에서는 각 관측벡터의 길이를 1로 만드는 정규화를 사용하기도 한다.

관측벡터가 \(p\)개의 값으로 구성되어 있다면 다음과 같이 변환한다.

\[
x_j’=\frac{x_j}{\sqrt{\sum_{k=1}^{p}x_k^2}}
\]

변환 후 벡터의 길이는 1이 된다.

\[
\sqrt{\sum_{j=1}^{p}(x_j’)^2}=1
\]

이 방법은 각 변수의 열을 조정하는 표준화와 다르다. 한 관측대상의 전체 벡터를 기준으로 행 방향에서 조정한다.

예를 들어 문서의 단어빈도를 비교할 때 긴 문서는 모든 단어 수가 많을 수 있다. 벡터 길이를 1로 맞추면 문서의 길이보다 단어구성의 방향을 비교할 수 있다.

Aksoy와 Haralick(2001)은 유사도 기반 분석에서 특성의 정규화 방식이 거리와 검색결과에 영향을 줄 수 있음을 보여준다.

R로 표준화와 정규화 계산하기

앞에서 사용한 시험점수를 R로 변환해 보자.

scores <- data.frame(
  student = c("A", "B", "C", "D", "E"),
  raw_score = c(50, 60, 70, 80, 90)
)

score_mean <- mean(scores$raw_score)
score_sd <- sd(scores$raw_score)

score_min <- min(scores$raw_score)
score_max <- max(scores$raw_score)

scores$z_score <-
  (scores$raw_score - score_mean) /
  score_sd

scores$minmax <-
  (scores$raw_score - score_min) /
  (score_max - score_min)

round(scores, 3)
R

round()는 문자열 열이 포함된 데이터프레임 전체에는 적용되지 않으므로 다음처럼 수치형 열만 반올림하는 방식이 안전하다.

scores$z_score <- round(
  scores$z_score,
  3
)

scores$minmax <- round(
  scores$minmax,
  3
)

scores
R

결과는 다음과 같다.

  student raw_score z_score minmax
1       A        50  -1.265   0.00
2       B        60  -0.632   0.25
3       C        70   0.000   0.50
4       D        80   0.632   0.75
5       E        90   1.265   1.00
R

R의 scale 함수 사용하기

R의 scale() 함수는 기본적으로 각 열에서 평균을 빼고 표본표준편차로 나눈다.

z_score <- scale(
  scores$raw_score
)

as.numeric(z_score)
R

계산에 사용된 평균과 표준편차는 속성으로 저장된다.

attr(
  z_score,
  "scaled:center"
)

attr(
  z_score,
  "scaled:scale"
)
R

scaled:center에는 평균이, scaled:scale에는 표본표준편차가 들어 있다.

scale()의 결과는 행렬이므로 벡터가 필요하면 as.numeric()을 사용한다.

훈련자료의 기준으로 시험자료 표준화하기

두 개의 수치형 변수가 있다고 하자.

train_data <- data.frame(
  age = c(22, 28, 35, 41, 52),
  income = c(2400, 3100, 4200, 5100, 6900)
)

test_data <- data.frame(
  age = c(25, 60),
  income = c(2800, 8000)
)
R

먼저 훈련자료만 이용해 표준화한다.

train_scaled <- scale(
  train_data
)
R

훈련자료에서 계산한 평균과 표준편차를 저장한다.

train_center <- attr(
  train_scaled,
  "scaled:center"
)

train_scale <- attr(
  train_scaled,
  "scaled:scale"
)
R

시험자료에는 같은 기준을 적용한다.

test_scaled <- scale(
  test_data,
  center = train_center,
  scale = train_scale
)
R

확인한다.

train_scaled
test_scaled
R

시험자료를 다음처럼 별도로 표준화하면 안 된다.

# 권장하지 않는 방식
scale(test_data)
R

시험자료의 평균과 표준편차를 새로 사용하면 훈련자료와 시험자료가 서로 다른 좌표계에 놓이게 된다.

훈련자료 기준으로 최소–최대 정규화하기

훈련자료의 열별 최솟값과 최댓값을 계산한다.

train_min <- vapply(
  train_data,
  min,
  numeric(1)
)

train_max <- vapply(
  train_data,
  max,
  numeric(1)
)

train_range <- train_max - train_min
R

범위가 0인 변수가 있는지 확인한다.

if (any(train_range == 0)) {
  stop(
    "최댓값과 최솟값이 같은 변수가 있습니다."
  )
}
R

훈련자료를 변환한다.

train_01 <- sweep(
  as.matrix(train_data),
  2,
  train_min,
  "-"
)

train_01 <- sweep(
  train_01,
  2,
  train_range,
  "/"
)
R

시험자료에는 동일한 기준을 적용한다.

test_01 <- sweep(
  as.matrix(test_data),
  2,
  train_min,
  "-"
)

test_01 <- sweep(
  test_01,
  2,
  train_range,
  "/"
)
R

결과를 확인한다.

train_01
test_01
R

시험자료의 소득 8,000은 훈련자료의 최댓값 6,900을 넘기 때문에 정규화 결과가 1보다 크게 나타난다.

이는 정상적인 결과다.

이상값이 두 변환에 미치는 영향 확인하기

ordinary <- c(
  50, 60, 70, 80, 90
)

with_outlier <- c(
  50, 60, 70, 80, 90, 1000
)
R

표준화 결과를 비교한다.

as.numeric(
  scale(ordinary)
)

as.numeric(
  scale(with_outlier)
)
R

최소–최대 정규화를 계산하는 함수를 만든다.

minmax_scale <- function(x) {
  x_min <- min(
    x,
    na.rm = TRUE
  )

  x_max <- max(
    x,
    na.rm = TRUE
  )

  x_range <- x_max - x_min

  if (!is.finite(x_range) || x_range == 0) {
    stop(
      "유효한 범위를 계산할 수 없습니다."
    )
  }

  (x - x_min) / x_range
}
R

두 자료에 적용한다.

minmax_scale(ordinary)

minmax_scale(with_outlier)
R

1,000이 추가되면 기존의 50에서 90까지 값들이 0에 매우 가까운 구간으로 압축되는 것을 확인할 수 있다.

강건한 스케일링을 R로 계산하기

중앙값과 사분위범위를 사용하는 함수를 만들 수 있다.

robust_scale <- function(x) {
  center <- median(
    x,
    na.rm = TRUE
  )

  spread <- IQR(
    x,
    na.rm = TRUE
  )

  if (!is.finite(spread) || spread == 0) {
    stop(
      "사분위범위가 0이거나 계산할 수 없습니다."
    )
  }

  (x - center) / spread
}
R

이상값이 포함된 자료에 적용한다.

robust_scale(
  with_outlier
)
R

강건한 스케일링은 중심부의 값을 평균·표준편차 방식보다 안정적으로 표현할 수 있다. 하지만 1,000이라는 이상값 자체가 사라지는 것은 아니다.

변환하면 안 되는 변수도 있다

데이터프레임의 모든 숫자 열을 자동으로 표준화하면 문제가 생길 수 있다.

숫자로 저장되어 있어도 실제로는 수량변수가 아닌 경우가 있기 때문이다.

예를 들어 다음 변수는 신중하게 처리해야 한다.

  • 고객번호
  • 학번
  • 우편번호
  • 상품코드
  • 지역코드
  • 범주형 변수를 숫자로 코딩한 값
  • 연도와 날짜
  • 순서를 의미하지 않는 등급코드

지역을 서울 1, 부산 2, 대구 3으로 코딩했다고 해서 평균과 표준편차를 이용해 표준화할 수 있는 수치형 변수가 되는 것은 아니다.

범주형 변수는 더미변수나 적절한 범주형 인코딩을 사용해야 한다.

0과 1로 된 변수는 표준화해야 하는가

성별, 구매 여부와 처치 여부처럼 0과 1로 코딩된 변수는 그대로 사용할 수도 있고 분석목적에 따라 중심화하거나 표준화할 수도 있다.

표준화하면 희귀한 범주의 값이 크게 확대될 수 있다. 회귀계수의 해석도 “0에서 1로 바뀔 때의 차이”가 아니라 “1표준편차 증가할 때의 차이”로 바뀐다.

따라서 연속형 변수와 동일한 규칙으로 모든 이항변수를 자동 표준화해서는 안 된다.

Gelman(2008)은 연속형 변수와 이항변수의 회귀계수를 비교하기 위해 연속형 변수를 2표준편차로 나누는 방법을 제안했지만, 이 역시 연구목적에 따라 선택하는 하나의 방법이지 보편적인 규칙은 아니다.

표준화와 정규화를 비교하면

구분표준화최소–최대 정규화
기준평균과 표준편차최솟값과 최댓값
기본 식((x-\bar{x})/s)((x-x_{\min})/(x_{\max}-x_{\min}))
결과 범위제한 없음훈련자료에서는 0에서 1
중심평균이 0최솟값이 0
산포표본표준편차가 1범위가 1
이상값 민감도평균과 표준편차가 민감최솟값과 최댓값이 매우 민감
순서 보존보존보존
분포 모양선형적으로 보존선형적으로 보존
새 자료0과 1 범위 제한 없음0 미만 또는 1 초과 가능
주요 활용z점수, PCA, 규제회귀, 거리분석고정범위 입력, 영상값, 일부 신경망
해석평균에서 몇 표준편차 떨어졌는가관찰범위에서 어느 위치인가

어떤 방법을 선택해야 하는가

평균과 표준편차를 기준으로 비교하고 싶다

표준화를 고려할 수 있다.

시험점수, 심리척도와 생체측정값처럼 평균에서 얼마나 떨어져 있는지가 중요한 상황에 적합하다.

모든 값을 일정한 범위에 넣어야 한다

최소–최대 정규화를 고려할 수 있다.

입력값이 특정 범위에 있어야 하는 시스템이나 픽셀값처럼 이론적인 최솟값과 최댓값이 분명한 자료에 유용하다.

관찰된 표본의 최솟값과 최댓값보다 물리적으로 가능한 범위를 사용하는 것이 더 안정적인 경우도 있다.

예를 들어 8비트 흑백 영상의 픽셀값은 0에서 255이므로 다음처럼 고정된 기준을 사용할 수 있다.

\[
x’=\frac{x}{255}
\]

이상값이 많다

중앙값과 사분위범위를 이용한 강건한 스케일링을 고려한다.

하지만 이상값이 오류인지 실제 희귀사례인지 먼저 확인해야 한다.

분포가 심하게 치우쳐 있다

로그변환이나 다른 비선형변환을 검토한 뒤 필요한 경우 표준화를 추가할 수 있다.

스케일링만으로 비대칭성이 사라지지는 않는다.

거리 또는 내적을 이용하는 알고리즘이다

표준화나 정규화의 필요성이 크다.

어떤 방법을 사용하느냐에 따라 거리와 유사도가 달라지므로 교차검증을 통해 선택할 수 있다.

트리 기반 모형이다

스케일링이 필수적이지 않은 경우가 많다.

전처리를 추가하기 전에 실제로 필요한지 확인해야 한다.

분석보고서에는 무엇을 밝혀야 할까

“변수를 정규화했다”는 문장만으로는 분석을 재현할 수 없다.

다음 정보를 구체적으로 제시해야 한다.

  1. 어떤 변수를 변환했는가?
  2. 표준화인가 최소–최대 정규화인가?
  3. 사용한 정확한 식은 무엇인가?
  4. 표본표준편차와 모집단표준편차 중 무엇을 사용했는가?
  5. 평균·표준편차 또는 최솟값·최댓값을 어느 자료에서 계산했는가?
  6. 훈련자료와 시험자료를 분리한 뒤 계산했는가?
  7. 교차검증 안에서 전처리를 다시 추정했는가?
  8. 이상값을 어떻게 처리했는가?
  9. 범위가 0인 변수는 어떻게 처리했는가?
  10. 새 자료가 0과 1 범위를 벗어날 때 어떻게 처리했는가?
  11. 변환 후 계수를 어떻게 해석했는가?
  12. 원래 단위로 역변환할 수 있도록 기준값을 저장했는가?

보고서에는 다음처럼 작성할 수 있다.

연속형 예측변수는 훈련자료에서 계산한 평균과 표본표준편차를 이용해 z점수로 표준화하였다. 검증자료와 시험자료에는 훈련자료에서 계산한 동일한 평균과 표준편차를 적용하였다.

최소–최대 정규화를 사용했다면 다음과 같이 작성할 수 있다.

각 연속형 예측변수는 훈련자료의 최솟값과 최댓값을 이용해 0에서 1 범위로 변환하였다. 시험자료가 훈련범위를 벗어날 경우 변환값을 0과 1로 강제 제한하지 않았다.

자주 발생하는 오류

표준화하면 정규분포가 된다고 생각한다

표준화는 중심과 단위를 바꿀 뿐 분포 모양을 정규분포로 만들지 않는다.

표준화는 이상값에 강하다고 생각한다

평균과 표준편차는 모두 이상값에 민감하다.

최소–최대 정규화가 분포를 왜곡한다고 생각한다

최소–최대 정규화는 선형변환이므로 순서와 분포의 형태를 유지한다. 다만 이상값 때문에 대부분의 값이 좁은 구간에 몰릴 수 있다.

시험자료를 따로 표준화한다

시험자료의 평균과 표준편차를 사용하면 훈련자료와 서로 다른 기준이 적용된다. 훈련자료에서 계산한 기준을 재사용해야 한다.

전체 자료를 표준화한 뒤 훈련·시험자료로 나눈다

시험자료의 정보가 훈련과정에 들어가는 데이터 누출이 발생한다.

정규화된 값은 언제나 0과 1 사이라고 생각한다

훈련범위를 벗어난 새 관측값은 0보다 작거나 1보다 클 수 있다.

모든 숫자 변수를 표준화한다

고객번호, 지역코드와 범주형 숫자코드는 수치형 측정변수가 아니다.

표준화된 회귀계수가 변수의 중요도라고 생각한다

표준화된 계수도 다중공선성, 측정오차와 모형구성의 영향을 받는다.

스케일링이 모형의 모든 문제를 해결한다고 생각한다

스케일링은 결측값, 교란, 비선형성, 표본편향과 측정오차를 해결하지 않는다.

변환기준을 저장하지 않는다

운영환경에서 새 자료를 같은 방식으로 변환하려면 평균, 표준편차, 최솟값과 최댓값을 저장해야 한다.

변환 전에 확인할 질문

  1. 변수의 단위 차이가 분석결과에 영향을 주는가?
  2. 사용하는 알고리즘이 거리나 규제에 민감한가?
  3. 평균에서의 상대적 거리가 중요한가?
  4. 일정한 입력범위가 반드시 필요한가?
  5. 이상값이 존재하는가?
  6. 이상값은 오류인가 실제 사례인가?
  7. 분포가 심하게 치우쳐 있는가?
  8. 비선형변환이 필요한가?
  9. 훈련자료와 시험자료를 먼저 분리했는가?
  10. 범위가 0이거나 표준편차가 0인 변수가 있는가?
  11. 범주형 코드를 잘못 변환하고 있지 않은가?
  12. 변환 후 결과를 원래 단위로 해석할 수 있는가?
  13. 교차검증 안에서 전처리를 다시 수행하는가?
  14. 사용한 기준과 수식을 보고서에 기록했는가?

스케일 조정은 분석 프로그램의 자동 옵션이 아니라 연구목적에 따라 선택해야 하는 모형설계의 일부다.

숫자의 크기를 맞춘다고 의미까지 같아지는 것은 아닙니다

표준화와 최소–최대 정규화는 서로 다른 단위를 가진 숫자를 공통된 스케일로 바꾸는 방법이다.

표준화는 평균을 0, 표준편차를 1로 바꾼다.

이 값은 평균에서 몇 표준편차 떨어져 있는가?

최소–최대 정규화는 관찰범위를 0에서 1로 바꾼다.

이 값은 최솟값과 최댓값 사이에서 어느 위치에 있는가?

두 방법 모두 관측값의 순서와 기본적인 분포 모양을 유지한다. 그러나 평균·표준편차와 최솟값·최댓값은 모두 이상값의 영향을 받는다.

비전공자는 다음 다섯 문장으로 기억하면 된다.

표준화는 평균과 표준편차를 기준으로 한다.

최소–최대 정규화는 최솟값과 최댓값을 기준으로 한다.

표준화한다고 정규분포가 되는 것은 아니다.

두 방법 모두 이상값의 영향을 받을 수 있다.

훈련자료에서 계산한 변환기준을 시험자료에 그대로 적용해야 한다.

숫자의 크기를 맞추는 작업은 변수의 의미를 같게 만드는 작업이 아니다.

매출 1표준편차와 만족도 1표준편차는 수치적으로 같은 크기로 표현되지만 현실에서 같은 중요성을 갖는다고 볼 수는 없다. 변수의 단위는 조정할 수 있어도 연구개념과 의사결정의 의미는 통계적 변환만으로 결정되지 않는다.

좋은 전처리는 모든 변수를 무조건 같은 모양으로 만드는 일이 아니다. 분석방법이 어떤 숫자에 민감한지 이해하고, 필요한 범위에서만 변환하며, 그 기준을 새로운 데이터에도 일관되게 적용하는 일이다.

참고문헌

Aksoy, S., & Haralick, R. M. (2001). Feature normalization and likelihood-based similarity measures for image retrieval. Pattern Recognition Letters, 22(5), 563–582. https://doi.org/10.1016/S0167-8655(00)00112-4

Bishop, C. M. (2006). Pattern recognition and machine learning. Springer. https://link.springer.com/book/9780387310732

Gelman, A. (2008). Scaling regression inputs by dividing by two standard deviations. Statistics in Medicine, 27(15), 2865–2873. https://doi.org/10.1002/sim.3107

Hastie, T., Tibshirani, R., & Friedman, J. (2009). The elements of statistical learning: Data mining, inference, and prediction (2nd ed.). Springer. https://doi.org/10.1007/978-0-387-84858-7

Huber, P. J., & Ronchetti, E. M. (2009). Robust statistics (2nd ed.). Wiley. https://doi.org/10.1002/9780470434697

Ioffe, S., & Szegedy, C. (2015). Batch normalization: Accelerating deep network training by reducing internal covariate shift. Proceedings of the 32nd International Conference on Machine Learning, 37, 448–456. https://proceedings.mlr.press/v37/ioffe15.html

Jain, A. K., Murty, M. N., & Flynn, P. J. (1999). Data clustering: A review. ACM Computing Surveys, 31(3), 264–323. https://doi.org/10.1145/331499.331504

James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An introduction to statistical learning: With applications in R (2nd ed.). Springer. https://doi.org/10.1007/978-1-0716-1418-1

Kaufman, L., & Rousseeuw, P. J. (2005). Finding groups in data: An introduction to cluster analysis. Wiley. https://doi.org/10.1002/9780470316801

Kuhn, M., & Johnson, K. (2013). Applied predictive modeling. Springer. https://doi.org/10.1007/978-1-4614-6849-3

Milligan, G. W., & Cooper, M. C. (1988). A study of standardization of variables in cluster analysis. Journal of Classification, 5, 181–204. https://doi.org/10.1007/BF01897163

Sola, J., & Sevilla, J. (1997). Importance of input data normalization for the application of neural networks to complex industrial problems. IEEE Transactions on Nuclear Science, 44(3), 1464–1468. https://doi.org/10.1109/23.589532

Van den Berg, R. A., Hoefsloot, H. C. J., Westerhuis, J. A., Smilde, A. K., & van der Werf, M. J. (2006). Centering, scaling, and transformations: Improving the biological information content of metabolomics data. BMC Genomics, 7, 142. https://doi.org/10.1186/1471-2164-7-142

scroll to the top of the site