데이터 스케일링(Data Scaling)

·2025년 4월 21일

Data

목록 보기
6/10
post-thumbnail

데이터 분석과 머신러닝에서 필수적으로 사용되는 데이터 스케일링(Data Scaling)에 대해 심층적으로 살펴보겠습니다. 스케일링이 무엇인지, 왜 중요한지, 그리고 다양한 스케일링 방법을 코드와 함께 상세히 소개합니다.




데이터 스케일링이란?

데이터 스케일링(Data Scaling)이란 데이터의 값의 범위를 일정한 기준에 맞춰 조정하는 과정입니다. 예를 들어, 키와 몸무게와 같은 두 가지 특성(feature)이 있다고 생각해봅시다. 키는 150200cm 범위를 가지지만, 몸무게는 50100kg 정도입니다. 이처럼 범위가 다른 데이터를 같은 범위로 맞추면 머신러닝 모델이 데이터를 더욱 잘 학습할 수 있습니다.




데이터 스케일링의 중요성

특성마다 다른 범위를 가지는 데이터가 있으면, 일부 머신러닝 모델은 학습 성능이 떨어질 수 있습니다. 특히 KNN, SVM, 신경망(Neural Network), 클러스터링(Clustering) 등의 모델은 특성 간 범위가 다르면 제대로 학습되지 않을 가능성이 큽니다.

주요 이점
특성 간 비교 분석 용이
선형 모델(Linear Model)과 신경망(Neural Network)의 학습 안정성 향상
모델의 학습 속도 개선




다양한 스케일링 방법

1. MinMaxScaler

데이터를 0과 1 사이의 범위로 변환합니다.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)

2. MaxAbsScaler

데이터를 -1과 1 사이의 범위로 변환합니다. 주로 데이터의 중심이 0에 가깝고 음수 값과 양수 값을 모두 가지는 데이터에 적합합니다.

from sklearn.preprocessing import MaxAbsScaler

scaler = MaxAbsScaler()
data_scaled = scaler.fit_transform(data)

3. StandardScaler

데이터의 평균을 0, 분산을 1로 만듭니다. 일반적으로 가장 많이 사용됩니다.

from sklearn.preprocessing import StandardScaler

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

4. RobustScaler

이상치(outlier)가 많을 때 사용하는 방법으로 중앙값이 0, IQR(Interquartile Range)이 1이 되도록 변환합니다.

from sklearn.preprocessing import RobustScaler

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

5. Normalizer

각 행(row)을 기준으로 정규화하여, 행의 유클리드 길이를 1로 만듭니다.

from sklearn.preprocessing import Normalizer

scaler = Normalizer()
data_scaled = scaler.fit_transform(data)

실제 예제: Normalizer의 이해

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import Normalizer

X = np.array([[3, 4], [6, 8]])
normalizer = Normalizer(norm='l2')
X_normalized = normalizer.transform(X)

plt.figure(figsize=(6,6))
plt.axhline(0, color='gray', linestyle='--', linewidth=0.5)
plt.axvline(0, color='gray', linestyle='--', linewidth=0.5)

plt.scatter(X[:, 0], X[:, 1], color='blue', label='Original Points')
plt.scatter(X_normalized[:, 0], X_normalized[:, 1], color='red', label='Normalized Points')

plt.grid(True)
plt.legend()
plt.title("Original vs Normalized Points")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()



스케일링이 모델 성능에 미치는 영향

스케일링은 특히 다음과 같은 모델의 성능을 크게 좌우합니다.

K-Nearest Neighbors (KNN)
Support Vector Machine (SVM)
Neural Networks
Clustering algorithms

의사결정 나무(Decision Tree) 모델과 같은 일부 모델은 스케일링에 민감하지 않지만, 위의 모델들은 데이터 범위에 따라 성능 차이가 크게 나타납니다.




도전 과제

아래의 과제를 통해 직접 스케일링의 효과를 경험해보세요!

실제 데이터를 준비하여 StandardScaler를 포함한 다양한 스케일러로 변환해 보세요.

스케일링 전후의 데이터를 사용하여 KNN, SVM과 같은 머신러닝 모델의 성능을 비교 분석해 보세요.

각 스케일러가 어떤 상황에서 효과적인지 직접 정리해보세요.




결론

데이터 스케일링은 머신러닝 모델의 성능을 향상시키고 안정적인 학습을 돕는 중요한 과정입니다. 다양한 스케일링 방법을 숙지하여, 상황에 맞게 적절한 방법을 선택하고 실제 모델에 적용해 보세요. 성능 향상을 직접 확인할 수 있을 것입니다!

0개의 댓글