피처 스케일링(Feature Scaling)은 데이터 전처리(Data Pre-processing) 단계 중 하나로, 데이터의 독립 변수 즉 피처(feature)에 적용됩니다. 데이터를 특정 범위 안으로 정규화하는 데 도움을 주는 핵심 기법입니다.
왜 스케일링이 필요한가?
대부분의 데이터셋에는 크기(magnitude), 단위, 범위가 서로 크게 다른 피처들이 포함되어 있습니다. 그런데 대부분의 머신러닝 알고리즘은 계산 과정에서 두 데이터 포인트 간의 유클리드 거리(Euclidean distance)를 사용하기 때문에 이것이 문제가 됩니다.
스케일링 없이 놔두면 이러한 알고리즘들은 단위를 무시한 채 피처의 크기만 고려하게 됩니다. 그 결과는 5kg과 5000g처럼 실제로는 같은 값이라도 단위에 따라 크게 달라질 수 있습니다.
크기가 큰 피처는 작은 피처보다 거리 계산에서 훨씬 많은 가중치를 차지하게 됩니다.
이러한 영향을 억제하려면 모든 피처를 동일한 크기 수준으로 맞춰야 하며, 이를 스케일링을 통해 달성할 수 있습니다.
피처 스케일링 방법
1. 표준화(Standardisation)
표준화는 각 값을 Z 점수(Z-score)로 대체하는 방식입니다.
$$x^{\prime}=\frac{x\:-\:\bar{x}}{\sigma}$$평균 μ = 0, 표준편차 σ = 1인 분포로 피처를 재분배합니다. Python에서는 sklearn.preprocessing.scale을 사용해 표준화를 손쉽게 구현할 수 있습니다.
2. 평균 정규화(Mean Normalisation)
$$x^{\prime}=\frac{x\:-\:mean(x)}{max(x)\:-\:min(x)}$$이 분포는 평균 μ = 0이며 값이 -1과 1 사이에 위치합니다. 표준화와 평균 정규화는 주성분 분석(PCA)처럼 0을 중심으로 하는 데이터를 가정하는 알고리즘에 활용할 수 있습니다.
3. Min-Max 스케일링(Min-Max Scaling)
$$x^{\prime}=\frac{x\:-\:min(x)}{max(x)\:-\:min(x)}$$이 스케일링은 값을 0과 1 사이로 변환합니다.
4. 단위 벡터(Unit Vector)
$$x^{\prime}=\frac{x}{\lVert\:x\:\rVert}$$전체 피처 벡터를 단위 길이로 만드는 방식으로 스케일링합니다. Min-Max 스케일링과 단위 벡터 기법은 [0, 1] 범위의 값을 생성하므로, 명확한 경계(hard boundary)가 있는 피처를 다룰 때 특히 유용합니다. 예를 들어 이미지 데이터의 경우 색상 값은 0부터 255까지만 존재합니다.
언제 스케일링해야 하는가?
경험칙(rule of thumb)에 따르면, 거리를 계산하거나 정규성을 가정하는 알고리즘이라면 피처 스케일링을 적용해야 합니다.
피처 스케일링이 중요한 알고리즘의 예는 다음과 같습니다.
k-최근접 이웃(k-Nearest Neighbors): 유클리드 거리 측도를 사용하는 k-NN은 피처의 크기에 민감하므로, 모든 피처가 동등하게 가중치를 갖도록 스케일링해야 합니다.
주성분 분석(PCA): PCA를 수행할 때 스케일링은 필수적입니다. PCA는 최대 분산을 가지는 피처를 찾으려 하는데, 크기가 큰 피처일수록 분산이 높기 때문에 PCA가 크기가 큰 피처 쪽으로 치우치게 됩니다.
경사 하강법(Gradient Descent): 스케일링을 통해 학습 속도를 높일 수 있습니다. θ는 작은 범위에서는 빠르게, 큰 범위에서는 느리게 감소하기 때문에, 변수들이 매우 불균형하면 최적값에 도달하기까지 비효율적으로 진동하게 됩니다.
트리 기반 모델(Tree-based models): 거리 기반 모델이 아니므로 다양한 범위의 피처를 잘 처리합니다. 따라서 트리 모델을 구축할 때는 스케일링이 필요하지 않습니다.
선형 판별 분석(LDA), 나이브 베이즈(Naive Bayes): 이러한 알고리즘은 설계 자체가 피처 크기 차이를 처리할 수 있도록 되어 있어 피처에 적절한 가중치를 부여합니다. 따라서 이들 알고리즘에서 스케일링을 수행해도 큰 효과를 보지 못할 수 있습니다.