데이터 분석을 하다 보면 다양한 규모의 데이터를 함께 다루는 일이 다반사입니다. 각각의 데이터를 따로 본다면 상관없지만, 데이터를 가지고 새로운 지표를 만든다거나 할 때는 스케일에 유념해야 하죠. 그래서 분석에 앞서 데이터 스케일링(Data Scaling)을 진행하는 경우가 많습니다.

데이터 스케일링은 머신러닝을 할 때 필수적으로 확인해야 할 작업이기도 해요. 여러 변수를 바탕으로 작업을 할 때 스케일이 큰 데이터와 스케일이 작은 데이터가 혼재된 상태로 작업을 하다 보면 큰 데이터의 영향력이 커져서 나머지 작은 스케일의 데이터가 잡아먹히는 수가 있기 때문이죠.

좀 더 자세히 살펴봅시다. 머신러닝 학습 과정에서 보통은 유클리드 거리(Euclidean Distance)를 사용합니다(오랜만에 등장하는 유클리드 선생님이 기억이 나질 않으시다면?! [매드매스003]을 참고해주세요). 유클리드 거리란 두 점 사이의 거리를 계산할 때 흔히 쓰는 방법입니다. 위의 그래프에서 $(x_1, y_1)$과 $(x_2, y_2)$ 사이의 거리 $d$를 계산할 때 피타고라스 정리를 써서 계산하면 아래와 같은 식이 나올 겁니다. 이 계산법이 바로 유클리드 거리죠. 차원이 늘어나면 또 다른 변수인 $z$가 추가되는 식으로 계산을 하면 다차원에서도 유클리드 거리를 적용할 수 있어요.

$$ d = \sqrt{(x_2-x_1)^2 \,\,+ \,\,(y_2-y_1)^2} $$

이 유클리드 거리를 보면 두 변수 간의 차이를 계산해야하는데 $X$가 $Y$에 비해서 엄청 큰 스케일을 가지고 있다고 하면 사실상 $Y$의 수치는 유클리드 거리에 큰 영향을 주지 않을 거예요. $X$라는 녀석에게 잡아먹히는 거죠. 그걸 막기 위해서 데이터 스케일링이 필요한 거죠.

가장 대표적인 데이터 스케일링이 바로 정규화(Normalization)와 표준화(Standardization)입니다. 표준화는 평균을 0으로 하고 표준편차를 1로 만드는 과정을 말해요. 정규화는 최솟값과 최댓값을 이용해 데이터 스케일을 조정합니다. 아래와 같은 공식을 이용하죠. 정규화 과정을 거치면 데이터는 0과 1 사이에 분포하게 되죠.

$$ x_{new} = {x -x_{min} \over x_{max} - x_{min}} $$

하지만 정규화는 이상치 문제가 생길 수 있어요. 이상치는 극단값이라고도 불리는데요 전체적인 데이터 패턴에서 벗어난 값을 의미해요. 정규화 공식에 최댓값과 최솟값을 사용하다 보니 분포가 왜곡될 가능성이 있는 것이죠. 이걸 해결하기 위한 방법이 표준화입니다. 표준화는 표준정규분포처럼 평균을 0으로, 표준편차를 1로 만들죠. 식은 아래와 같습니다. $\mu$는 평균을 뜻하고 $\sigma$는 표준편차를 의미합니다.

$$ x_{new} = {x - \mu \over \sigma} $$

출처 : cs231n, Stanford University

출처 : cs231n, Stanford University