본문 바로가기
데이터 분석

[머신러닝] 데이터 전처리 - 스케일링(Scaling)

by 데이널 2023. 9. 2.

스케일링이란

머신러닝에서는 input 데이터로 숫자를 넣어야 한다고 이전 포스팅에서 이야기 했습니다. 입력되는 데이터를 이용하여 알고리즘이 예측하기 위해서는 다음 단계가 필요합니다.바로 스케일링 입니다. 이 작업은 입력되는 숫자값의 범위 및 분포를 다른 변수들과 일치시켜주는 작업입니다. 

 

 

그렇다면 왜 스케일링을 하는 걸까요? 이유는 입력되는 변수에 대해 기계는 어떤 의미인지를 알 수 없다는 것입니다. 그래서 서로 크기의 편차가 크게되면 상대적으로 큰 변수의 영향을 더 받아 잘못된 예측을 하게 됩니다. 그렇기 때문에 변수 스케일링은 변수간의 불균형 없애서 그 정확도를 높여줍니다. 

 

그런데 머신러닝 알고리즘의 종류에 따라 굳이 스케일링을 하지 않아도 되는 것들이 있습니다. 예를 들어 의사결정나무와 같은 Tree 모델들은 각 변수의 information gain을 기반으로 판단하기 때문에 스케일링을 하지 않습니다. 이렇게 알고리즘의 특징을 모르면 무조건 변수를 스케일링하는 코드를 삽입하게 됩니다. 하지만 해당 코드는 실제로 불필요한 작업입니다.   

 

알고리즘 - 스케일링 필요성
알고리즘 - 스케일링 필요성

스케일링 방법들

1. 정규화

우선 가장 많이 사용하는 방법이 '정규화' 방법입니다. 이 방법은 변수의  범위를  0과 1사이로 만드는 방법입니다. 그리고 이런 것은 대표적인 스케일링 방법입니다. 이런 정규화 기법은 최소(min) 값과 최대(max) 값을 알 수 있는 경우 사용합니다. 보통 정규화하는 방법은 아래와 같은 수식으로 표현이 가능합니다. 최대값과 최소값의 차이를 분모로 놓고, 요소값과 최소값의 차이를 분자로 놓습니다. 이것을 'MinMax Scaler'라고 표현하기도 합니다.

  • 정규화 = (요소값-최소값)/(최대값-최소값)

예시 들어, 좀 더 쉽게 이야기해 보면 수학은 100점 만점의 70점이고, 영어는 200점 만점의 70점이라고 하면 두 점수가 70점이라고 같은 점수를 맞았다고 생각하지는 않을 것입니다. 이렇게 변수 간의 편차가 생길 때 정규화 방법을 사용합니다. 수학과 영어 점수를 정규화 하면 각각 0.7과 0.35가 나옵니다.(아래 예시 참고) 정규화해서 보니 수학 점수가 영어보다 높은 것 알 수 있습니다.

  • 예시
  • 수학 100점 만점(70점) -> (70-0)/(100-0) = 0.7
  • 영어 200점 만점(70점) -> (70-0)/(200-0) = 0.35

 

정규화 종류는 -1에서 1사이로 범위로 데이터 만드는 '센터링' 기법과 0과 1사이로 만드는 '레인징' 방법이 있습니다. 

  • 센터링(centering) 기법 : -1 ~ +1
  • 레인징(ranging) 기법 : 0 ~1

 

2. 표준화

 

사실 정규화와 표준화를 혼용해서 사용하기도 합니다. 하지만 대체적으로 변수들의 평균을 0, 분산을 1로 '스케일링'하는 것을 표준화라고 합니다. 이러한 방식은 원자료를 상대적인 위치를 나타내도록 값으로 변환하는 의미가 있습니다. 결과적으로 변수의 범위가 다를 경우 그 범위를 맞춰주는 작업이라고 생각할 수 있습니다. 일반적으로 feature들의 정규분포를 만들게 됩니다. 수식은 아래와 같이 표준편차를 분모로 놓고, 요소값과 평균과의 차이를 분자로 합니다. 

  • 표준화(또는 Z-score정규화) = (요소값 – 평균)/표준편차

 

여기서 표준화를 Z-score라고 하는 이유는 표준화를 통해 새로운 값을 Z값이라고 부르기 때문입니다. 원래 평균과 표준편차와 상관없이 정규분포 안에서 어디에 위치하는가를 알 수 있습니다. Z-score normalization 은 원자료의 x가 평균에서 얼마나 떨어져 있는지 표현하는 기법입니다. 결국 원자료를 우리가 해석할 수 있는 표준화된 형태인 Z-score로 변환해주는 작업을 합니다. 

 

Z-score
Z-score(표준화)

 

3. 로그 변환

로그 변환의 경우는 스케일 차이가 클 경우에 주로 사용합니다. 예를 들어, 연봉 (0, 수십억)이라는 변수는 0에서 수십 억원까지 분포되어 있습니다. 이러한 변수의 분포는 정규분포가 아니라 높은 연봉으로 갈수록 그 숫자가 적은 꼬리가 긴 형태로 나타납니다. 이런 경우 스케일링을 하더라도 변수의 해석이 어렵습니다.

 

이럴 때 로그 변환이 유효합니다.  결국 로그 변환은 왜도와 첨도를 가진 변수를 정규분포에 비슷하게 만들어 주는 효과가 있습니다. 즉 큰 수치 값을 같은 비율로 작은 수치 값으로 변환하는 작업을 합니다. 

 

일반적으로 선형적인 데이터에서는 MinMax Scaler를 사용하는 것을 선호하고, Skew가 심할 경우 로그 변환을 사용하여 다른 변수의 분포들과 비슷한 정규분포 형태로 맞춰준다고 할 수 있습니다. 

 

로그 변환
로그 변환