move84

머신러닝 스케일링(Scaling)의 필요성과 방법 본문

머신러닝

머신러닝 스케일링(Scaling)의 필요성과 방법

move84 2025. 4. 12. 07:31
반응형

머신러닝 모델의 성능 향상을 위해 스케일링은 필수적인 전처리 과정입니다. 이 글에서는 스케일링이 왜 필요한지, 그리고 다양한 스케일링 방법들을 살펴보고, 실제 코드 예제를 통해 이해를 돕고자 합니다.


🎨 스케일링이 필요한 이유
머신러닝 모델은 입력 변수(feature)의 스케일에 민감하게 반응할 수 있습니다. 변수들의 스케일이 다르면 다음과 같은 문제들이 발생할 수 있습니다.

  1. 모델 성능 저하:

    • 특정 변수의 값이 다른 변수보다 훨씬 크면, 모델 학습 시 해당 변수의 영향력이 과도하게 커질 수 있습니다. 예를 들어, 집의 크기(단위: 평방미터)와 건축 연도(단위: 년)를 입력 변수로 사용하는 경우, 집의 크기가 모델 학습에 더 큰 영향을 미칠 수 있습니다.
    • 경사 하강법(Gradient Descent) 기반의 모델(예: 선형 회귀, 로지스틱 회귀, 신경망)에서, 스케일이 큰 변수는 학습 속도를 느리게 만들거나, local optima에 수렴하게 할 수 있습니다.
  2. 해석의 어려움:

    • 변수 스케일이 다르면 모델의 계수(coefficient) 또는 feature importance를 해석하기 어렵습니다. 예를 들어, 선형 회귀 모델에서 집 크기에 대한 계수가 100이고, 건축 연도에 대한 계수가 0.1이라고 할 때, 단순히 계수 크기만으로 집 크기가 건축 연도보다 1000배 더 중요하다고 해석할 수 없습니다.
  3. 거리 기반 모델의 문제:

    • K-최근접 이웃(K-Nearest Neighbors, KNN) 또는 서포트 벡터 머신(Support Vector Machine, SVM)과 같은 거리 기반 모델에서는 변수 스케일이 모델 성능에 큰 영향을 미칩니다. 스케일이 큰 변수에 의해 거리가 좌우되어, 다른 변수의 정보가 무시될 수 있습니다.

🖼️ 스케일링 방법
다양한 스케일링 방법들이 존재하며, 데이터의 특성에 따라 적절한 방법을 선택해야 합니다.

  1. Min-Max 스케일링 (Min-Max Scaling)

    • 데이터를 0과 1 사이의 값으로 변환합니다.
    • 각 변수의 최솟값을 0, 최댓값을 1로 설정합니다.
    • 이상치(outlier)에 민감하게 반응할 수 있습니다.
    • 수식: (X - X_min) / (X_max - X_min)
    from sklearn.preprocessing import MinMaxScaler
    import numpy as np
    
    data = np.array([[1, 10], [2, 20], [3, 30], [4, 40], [5, 50]])
    
    scaler = MinMaxScaler()
    scaled_data = scaler.fit_transform(data)
    
    print(scaled_data)
  2. Standard 스케일링 (Standard Scaling)

    • 데이터를 평균이 0, 표준편차가 1이 되도록 변환합니다.
    • 이상치의 영향을 덜 받습니다.
    • 수식: (X - μ) / σ (μ: 평균, σ: 표준편차)
    from sklearn.preprocessing import StandardScaler
    import numpy as np
    
    data = np.array([[1, 10], [2, 20], [3, 30], [4, 40], [5, 50]])
    
    scaler = StandardScaler()
    scaled_data = scaler.fit_transform(data)
    
    print(scaled_data)
  3. Robust 스케일링 (Robust Scaling)

    • 중앙값(median)이 0, IQR(Interquartile Range)이 1이 되도록 변환합니다.
    • 이상치의 영향을 최소화합니다.
    • 수식: (X - Q2) / IQR (Q2: 중앙값, IQR: Q3 - Q1)
    from sklearn.preprocessing import RobustScaler
    import numpy as np
    
    data = np.array([[1, 10], [2, 20], [3, 30], [4, 40], [5, 50], [100, 1000]]) # 이상치 추가
    
    scaler = RobustScaler()
    scaled_data = scaler.fit_transform(data)
    
    print(scaled_data)
  4. MaxAbs 스케일링 (MaxAbs Scaling)

    • 데이터를 -1과 1 사이의 값으로 변환합니다.
    • 각 변수의 절대값 중 최댓값을 기준으로 스케일링합니다.
    • 데이터가 양수와 음수를 모두 가질 때 유용합니다.
    • 수식: X / abs(X_max)
    from sklearn.preprocessing import MaxAbsScaler
    import numpy as np
    
    data = np.array([[-1, 10], [2, -20], [3, 30], [-4, -40], [5, 50]])
    
    scaler = MaxAbsScaler()
    scaled_data = scaler.fit_transform(data)
    
    print(scaled_data)

📝 스케일링 시 주의사항

  1. Train/Test 분리 후 스케일링:

    • 모델 학습 데이터(train data)와 평가 데이터(test data)를 분리한 후, train data를 사용하여 스케일링 모델(scaler)을 학습해야 합니다. 그 후, 학습된 스케일링 모델을 사용하여 train data와 test data를 모두 변환해야 합니다.
    • Test data를 사용하여 스케일링 모델을 학습하면, 모델 평가 시 정보 누수(data leakage)가 발생할 수 있습니다.
  2. 스케일링 방법 선택:

    • 데이터의 특성에 따라 적절한 스케일링 방법을 선택해야 합니다.
      • 데이터가 정규 분포에 가깝고 이상치가 적다면, Standard 스케일링이 적합합니다.
      • 데이터에 이상치가 많다면, Robust 스케일링이 더 나은 선택일 수 있습니다.
      • 데이터를 특정 범위(예: 0과 1 사이)로 제한하고 싶다면, Min-Max 스케일링을 사용할 수 있습니다.
  3. 스케일링 전 데이터 이해:

    • 스케일링을 적용하기 전에 데이터의 분포, 이상치 유무 등을 파악하는 것이 중요합니다. 시각화 도구(예: 히스토그램, 박스 플롯)를 사용하여 데이터를 탐색하는 것이 도움이 될 수 있습니다.

🔑 핵심 용어 정리

  • 스케일링 (Scaling): 변수들의 스케일을 조정하는 전처리 과정 (Preprocessing).
  • Min-Max 스케일링 (Min-Max Scaling): 데이터를 0과 1 사이로 변환하는 방법.
  • Standard 스케일링 (Standard Scaling): 데이터를 평균 0, 표준편차 1로 변환하는 방법.
  • Robust 스케일링 (Robust Scaling): 중앙값과 IQR을 사용하여 이상치에 강건하게 스케일링하는 방법.
  • 이상치 (Outlier): 다른 값들과 동떨어진 비정상적인 값.
  • 정보 누수 (Data Leakage): 학습 데이터에 평가 데이터의 정보가 포함되어 모델 성능을 과대평가하는 현상.
반응형