이전 글에서 '머신러닝에서 input 데이터로 숫자 형태를 넣어야 한다'는 "변수 속성 통일"에 대해 다뤘습니다. 속성을 숫자 형태(type)으로 통일해야 한다는 개념이었죠.
이번에는 알고리즘이 예측에 편향이 생기지 않기 위해 스케일링을 해야 합니다. 이 작업은 입력되는 숫자값의 범위 및 분포를 다른 변수들과 일치시켜주는 작업입니다.
스케일링을 하는 이유
그렇다면 왜 스케일링을 하는 걸까요?
이유는 입력되는 변수에 대해 기계는 어떤 의미인지를 알 수 없다는 것입니다. 예를 들어, 100이라는 값이 들어왔다면 100점 만점의 100이면 높은 것이고, 500점 만점의 100이면 낮인 것인지 우리는 알지만 기계는 모릅니다.
그래서 서로 크기의 편차가 크게되면 상대적으로 큰 변수의 영향을 더 받아 잘못된 예측을 하게 됩니다. 그렇기 때문에 변수 스케일링은 변수간의 불균형 없애서 그 정확도를 높여줍니다.
그런데 머신러닝 알고리즘의 종류에 따라 굳이 스케일링을 하지 않아도 되는 것들이 있습니다. 예를 들어 의사결정나무와 같은 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로 변환해주는 작업을 합니다.
3. 로그 변환
로그 변환의 경우는 스케일 차이가 클 경우에 주로 사용합니다. 예를 들어, 연봉 (0, 수십억)이라는 변수는 0에서 수십 억원까지 분포되어 있습니다.
이러한 변수의 분포는 정규분포가 아니라 높은 연봉으로 갈수록 그 숫자가 적은 꼬리가 긴 형태로 나타납니다. 이런 경우 스케일링을 하더라도 변수의 해석이 어렵습니다.
이럴 때 로그 변환이 유효합니다. 결국 로그 변환은 왜도와 첨도를 가진 변수를 정규분포에 비슷하게 만들어 주는 효과가 있습니다. 즉 큰 수치 값을 같은 비율로 작은 수치 값으로 변환하는 작업을 합니다.
일반적으로 선형적인 데이터에서는 MinMax Scaler를 사용하는 것을 선호하고, Skew가 심할 경우 Log 변환을 사용합니다. 그래서 다른 변수의 분포들과 비슷한 정규분포 형태로 맞춰준다고 할 수 있습니다.
MinMaxScaler, StandardScaler, RobustScaler 비교 분석
스케일링 기법에는 여러 종류가 있지만 그중에서도 MinMaxScaler, StandardScaler, RobustScaler가 가장 많이 사용됩니다. 각각의 특징과 적용 시 고려해야 할 사항을 자세히 알아보겠습니다.
MinMaxSacler | StandardScaler | RobustScaler | |
원리 | 데이터의 최솟값을 0, 최댓값을 1로 변환하여 모든 특징을 0과 1 사이의 값으로 변환합니다. | 데이터의 평균을 0, 표준편차를 1로 변환합니다. 즉, 데이터를 표준 정규 분포 형태로 변환합니다. | 중앙값과 IQR을 기반으로 스케일링합니다. 이상치의 영향을 최소화하기 위해 사분위수를 사용합니다. |
계산식 | x_scaled = (x - x_min) / (x_max - x_min) | x_scaled = (x - 평균) / 표준편차 | x_scaled = (x - 중앙값) / IQR |
장점 | 간단하고 직관적이며, 데이터의 원래 분포를 유지하는 편입니다. | 이상치에 비교적 덜 민감하고, 많은 머신러닝 알고리즘에서 가정하는 정규 분포 형태로 변환하기 때문에 모델 성능 향상에 도움이 됩니다. | 이상치에 매우 강건합니다. 이상치가 있어도 스케일링 결과가 크게 변하지 않습니다. |
단점 | 이상치에 민감합니다. 하나의 이상치만 있어도 전체 데이터의 스케일이 크게 변할 수 있습니다. | 이상치가 존재할 경우, 이상치에 의해 스케일링 결과가 크게 영향을 받을 수 있습니다. | 데이터의 분포가 비대칭일 경우, 스케일링 결과가 예상과 다르게 나올 수 있습니다. |
활용 | 이상치가 거의 없는 데이터, 특정 범위 내의 값으로 제한해야 하는 경우에 적합합니다. | 이상치가 적거나, 정규 분포를 가정하는 모델을 사용할 때 적합합니다. | 이상치가 많은 데이터, 또는 데이터 분포가 비대칭인 경우에 적합합니다. |
마치며
결론적으로, 데이터 스케일링은 머신러닝 모델의 성능을 향상시키기 위한 전처리 필수 단계인데요. 다양한 스케일링 기법을 이해하고 데이터의 특성에 맞는 적절한 기법을 선택하는 것이 포인트입니다. 이 부분 또한 머신러닝 모델 성능에 영향을 미치는 요소 있습니다.
'데이터 분석' 카테고리의 다른 글
파이썬으로 분석한 알고리즘 시스템 적용 가이드 (2) | 2024.10.17 |
---|---|
데이터 전처리 첫걸음, 변수 속성 불일치 해결법 (0) | 2024.10.07 |
데이터 분석 실패 원인 1위? 바로 변수 명명과 정제 실수! (1) | 2024.10.04 |
Boosting 알고리즘 - XGBoost 특징 및 장단점 (6) | 2024.08.30 |
Data Imputation(데이터 대치, 결측치 처리) 및 흔한 실수들 (0) | 2024.04.30 |