Python DeepLearning

데이터 전처리와 피처 스케일링 기법

PyExplorer 2025. 3. 29. 14:24
728x90

데이터 전처리와 피처 스케일링 기법

딥러닝 모델을 효과적으로 학습시키기 위해서는 적절한 데이터 전처리가 필수적입니다. 데이터 전처리는 원시 데이터를 모델이 이해할 수 있도록 변환하는 과정이며, 그중에서도 피처 스케일링(feature scaling)은 모델의 성능을 크게 향상시키는 중요한 단계입니다. 이번 포스팅에서는 데이터 전처리와 피처 스케일링 기법에 대해 설명하고, Python을 활용한 예제 코드도 함께 살펴보겠습니다.

1. 데이터 전처리란?

데이터 전처리는 머신러닝 및 딥러닝 모델이 효과적으로 학습할 수 있도록 데이터를 변환하는 과정입니다. 주로 다음과 같은 작업이 포함됩니다.

  • 결측치 처리 (Missing Value Handling): 누락된 데이터를 채우거나 제거하는 과정
  • 이상치 처리 (Outlier Handling): 비정상적으로 크거나 작은 값을 처리하는 과정
  • 범주형 데이터 인코딩 (Categorical Encoding): 문자열이나 범주형 데이터를 숫자로 변환하는 과정
  • 정규화 및 표준화 (Normalization & Standardization): 데이터의 스케일을 조정하는 과정

특히, 피처 스케일링은 신경망 학습에서 중요한 역할을 하며, 데이터의 범위를 일정하게 맞춰줌으로써 학습 속도를 향상시키고, 모델의 성능을 안정적으로 유지할 수 있도록 도와줍니다.

2. 피처 스케일링의 필요성

데이터셋의 각 피처(feature)들이 서로 다른 범위를 갖고 있다면, 모델의 학습 과정에서 특정 피처가 다른 피처보다 더 큰 영향을 미칠 수 있습니다. 특히, 경사 하강법(Gradient Descent) 기반의 최적화 기법을 사용할 경우, 스케일 차이가 크면 학습이 비효율적으로 진행될 수 있습니다. 이를 방지하기 위해 피처 스케일링을 적용하게 됩니다.

대표적인 피처 스케일링 기법으로는 정규화(Normalization)표준화(Standardization)가 있습니다.

3. 정규화(Normalization)

정규화는 데이터를 0과 1 사이의 범위로 조정하는 방법입니다. 주로 Min-Max Scaling이 사용됩니다.

3.1 Min-Max Scaling

Min-Max Scaling은 다음 공식을 사용하여 데이터를 변환합니다.

$$
X' = \frac{X - X_{min}}{X_{max} - X_{min}}
$$

이 방법은 데이터가 특정 범위(일반적으로 0~1) 내에서 변환되므로, 값이 한정된 경우에 효과적입니다. 하지만 이상치(outlier)에 매우 민감하다는 단점이 있습니다.

3.2 Python 예제 코드 (Min-Max Scaling)

import numpy as np
from sklearn.preprocessing import MinMaxScaler

# 예제 데이터 생성
data = np.array([[10], [20], [30], [40], [50]])
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)

print("원본 데이터:")
print(data)
print("\nMin-Max Scaling 적용 후:")
print(scaled_data)

위 코드에서는 sklearn.preprocessing.MinMaxScaler를 사용하여 데이터를 0과 1 사이의 값으로 변환하였습니다.

4. 표준화(Standardization)

표준화는 데이터를 평균이 0, 표준편차가 1이 되도록 변환하는 방법입니다. 주로 Z-score Normalization이 사용됩니다.

4.1 Z-score Normalization

표준화는 다음 공식을 사용하여 데이터를 변환합니다.

$$
X' = \frac{X - \mu}{\sigma}
$$

여기서 $ \mu $는 평균, $ \sigma $는 표준편차입니다. 이 방법은 이상치에 덜 민감하며, 데이터가 정규 분포를 따를 경우 더 효과적으로 작동합니다.

4.2 Python 예제 코드 (Z-score Normalization)

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)

print("\nZ-score Normalization 적용 후:")
print(standardized_data)

위 코드를 실행하면 데이터가 평균 0, 표준편차 1을 가지도록 변환됩니다.

5. 로버스트 스케일링 (Robust Scaling)

로버스트 스케일링(Robust Scaling)은 이상치에 영향을 덜 받도록 설계된 방법입니다. 데이터의 중앙값(median)과 사분위 범위(IQR, Interquartile Range)를 사용하여 변환합니다.

공식은 다음과 같습니다.

$$
X' = \frac{X - Q2}{Q3 - Q1}
$$

여기서 Q2는 중앙값(median), Q1은 1사분위 값, Q3는 3사분위 값입니다.

Python 예제 코드 (Robust Scaling)

from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()
robust_scaled_data = scaler.fit_transform(data)

print("\nRobust Scaling 적용 후:")
print(robust_scaled_data)

이 방법은 이상치(outlier)가 포함된 데이터에서도 안정적인 결과를 제공하는 장점이 있습니다.

6. 피처 스케일링 적용 시 주의할 점

  • 훈련 데이터와 테스트 데이터에 동일한 변환 적용: 학습 데이터에서 스케일링을 적용한 후, 동일한 변환을 테스트 데이터에도 적용해야 합니다.
  • 이상치(outlier) 고려: Min-Max Scaling은 이상치에 민감하므로, 이상치가 있는 경우 Robust Scaling을 고려해야 합니다.
  • 스케일링 적용 여부 평가: 모델의 성능이 오히려 감소할 수 있으므로, 스케일링 전후의 성능을 비교하는 것이 중요합니다.

7. 결론

피처 스케일링은 딥러닝 모델의 성능을 개선하는 중요한 전처리 과정 중 하나입니다. 데이터의 분포와 특성을 고려하여 적절한 스케일링 기법을 선택하는 것이 중요합니다.

스케일링 기법 적용 방법 장점 단점
Min-Max Scaling 0~1 범위로 변환 간단하고 직관적 이상치에 민감
Z-score Normalization 평균 0, 표준편차 1로 변환 이상치에 덜 민감 데이터가 정규 분포를 따르지 않으면 성능 저하 가능
Robust Scaling 중앙값과 IQR을 사용 이상치에 강함 분포가 극단적인 경우 성능 저하 가능

적절한 스케일링 기법을 선택하여 모델의 학습을 최적화하고, 보다 좋은 성능을 얻을 수 있도록 해야 합니다.

728x90