move84

머신러닝 데이터 전처리(Data Preprocessing)의 필요성과 기법 본문

머신러닝

머신러닝 데이터 전처리(Data Preprocessing)의 필요성과 기법

move84 2025. 4. 10. 07:37
반응형

머신러닝 모델의 성능은 데이터의 품질에 크게 의존한다. 따라서, 원시 데이터(raw data)를 모델에 바로 적용하기보다는, 데이터 전처리(data preprocessing) 과정을 거쳐 데이터의 품질을 향상시키는 것이 중요하다. 데이터 전처리(data preprocessing)는 결측치 처리, 이상치 제거, 데이터 변환, 스케일링 등 다양한 기법을 포함하며, 이러한 과정을 통해 모델의 정확도와 일반화 성능을 높일 수 있다.

데이터 전처리(Data Preprocessing)의 필요성

머신러닝 모델은 입력 데이터에 매우 민감하게 반응한다. 현실 세계의 데이터는 불완전하고, 노이즈를 포함하며, 일관성이 없을 수 있다. 이러한 데이터의 특성은 모델의 학습을 방해하고, 성능 저하의 원인이 된다. 따라서, 데이터 전처리(data preprocessing)는 다음과 같은 이유로 필수적이다.

  • 결측치 처리 (Handling Missing Values): 데이터셋에 결측치(missing values)가 존재하면, 대부분의 머신러닝 알고리즘은 제대로 작동하지 않는다. 결측치를 적절하게 처리하지 않으면 모델 학습 자체가 불가능하거나, 모델의 예측 성능이 크게 저하될 수 있다.

  • 이상치 제거 (Outlier Removal): 이상치(outliers)는 데이터의 전체적인 패턴에서 벗어난 값으로, 모델의 학습에 부정적인 영향을 미칠 수 있다. 이상치는 모델의 편향을 유발하고, 과적합(overfitting)을 초래할 수 있다.

  • 데이터 변환 (Data Transformation): 데이터의 분포가 특정 알고리즘에 적합하지 않은 경우, 데이터 변환을 통해 모델의 성능을 향상시킬 수 있다. 예를 들어, 로그 변환(log transformation)은 데이터의 왜도(skewness)를 줄여 정규분포에 가깝게 만들어준다.

  • 스케일링 (Scaling): 서로 다른 변수의 스케일(scale)이 크게 차이 나는 경우, 스케일링을 통해 모든 변수가 모델 학습에 동일한 영향을 미치도록 할 수 있다. 스케일링은 경사 하강법(gradient descent) 기반의 알고리즘에서 특히 중요하다.

🧰 데이터 전처리(Data Preprocessing) 기법

데이터 전처리(data preprocessing)는 다양한 기법을 포함하며, 데이터의 특성과 모델의 요구사항에 따라 적절한 기법을 선택해야 한다. 주요 데이터 전처리(data preprocessing) 기법은 다음과 같다.

  1. 결측치 처리 (Handling Missing Values)

    • 결측치 제거 (Deletion): 결측치가 포함된 행 또는 열을 제거하는 방법이다. 이 방법은 결측치의 비율이 낮고, 결측치가 무작위로 발생한 경우에 유용하다. 하지만, 결측치가 많은 경우 데이터를 너무 많이 잃을 수 있다.

      import pandas as pd
      
      # 결측치를 포함하는 행 제거
      df.dropna(axis=0, inplace=True)
      
      # 결측치를 포함하는 열 제거
      df.dropna(axis=1, inplace=True)
    • 결측치 대체 (Imputation): 결측치를 특정 값으로 대체하는 방법이다. 평균값(mean), 중앙값(median), 최빈값(mode) 등을 사용할 수 있으며, 머신러닝 알고리즘을 사용하여 결측치를 예측하는 방법도 있다.

      # 평균값으로 결측치 대체
      df['column_name'].fillna(df['column_name'].mean(), inplace=True)
      
      # 중앙값으로 결측치 대체
      df['column_name'].fillna(df['column_name'].median(), inplace=True)
      
      # 최빈값으로 결측치 대체
      df['column_name'].fillna(df['column_name'].mode()[0], inplace=True)
  2. 이상치 제거 (Outlier Removal)

    • IQR (Interquartile Range) 기반 제거: IQR은 1사분위수(Q1)와 3사분위수(Q3)의 차이로, IQR의 1.5배를 이용하여 이상치를 정의한다. 즉, Q1 - 1.5 * IQR보다 작거나 Q3 + 1.5 * IQR보다 큰 값을 이상치로 간주한다.

      Q1 = df['column_name'].quantile(0.25)
      Q3 = df['column_name'].quantile(0.75)
      IQR = Q3 - Q1
      
      # 이상치 제거
      df = df[(df['column_name'] >= Q1 - 1.5 * IQR) & (df['column_name'] <= Q3 + 1.5 * IQR)]
    • Z-score 기반 제거: Z-score는 데이터 포인트가 평균에서 얼마나 떨어져 있는지를 나타내는 값으로, Z-score가 특정 임계값(threshold)보다 크면 이상치로 간주한다. 일반적으로 Z-score의 임계값은 2 또는 3을 사용한다.

      from scipy import stats
      
      # Z-score 계산
      z = np.abs(stats.zscore(df['column_name']))
      
      # 임계값 설정
      threshold = 3
      
      # 이상치 제거
      df = df[z < threshold]
  3. 데이터 변환 (Data Transformation)

    • 로그 변환 (Log Transformation): 데이터의 분포가 오른쪽으로 치우쳐진 경우, 로그 변환을 통해 데이터의 왜도를 줄일 수 있다. 로그 변환은 데이터의 스케일을 줄여주고, 이상치의 영향을 완화하는 효과도 있다.

      import numpy as np
      
      # 로그 변환
      df['column_name'] = np.log1p(df['column_name'])
    • 제곱근 변환 (Square Root Transformation): 로그 변환과 유사하게, 데이터의 왜도를 줄이는 데 사용된다. 제곱근 변환은 로그 변환보다 덜 강력하며, 음수값을 포함하는 데이터에는 적용할 수 없다.

      # 제곱근 변환
      df['column_name'] = np.sqrt(df['column_name'])
    • Box-Cox 변환: 데이터를 정규분포에 가깝게 만들어주는 변환 기법이다. Box-Cox 변환은 람다(lambda) 값을 추정하여 최적의 변환을 수행한다. 람다 값에 따라 로그 변환, 제곱 변환 등 다양한 변환이 적용될 수 있다.

      from scipy import stats
      
      # Box-Cox 변환
      df['column_name'], lambda_value = stats.boxcox(df['column_name'])
  4. 스케일링 (Scaling)

    • Min-Max 스케일링: 데이터를 0과 1 사이의 값으로 변환한다. Min-Max 스케일링은 데이터의 최소값과 최대값을 이용하여 스케일을 조정한다. 모든 변수의 스케일을 동일하게 만들고 싶을 때 유용하다.

      from sklearn.preprocessing import MinMaxScaler
      
      # Min-Max 스케일러 생성
      scaler = MinMaxScaler()
      
      # 스케일링 적용
      df['column_name'] = scaler.fit_transform(df[['column_name']])
    • Standard 스케일링 (Z-score Normalization): 데이터를 평균이 0이고, 표준편차가 1인 분포로 변환한다. Standard 스케일링은 이상치의 영향을 덜 받으며, 대부분의 머신러닝 알고리즘에서 잘 작동한다.

      from sklearn.preprocessing import StandardScaler
      
      # Standard 스케일러 생성
      scaler = StandardScaler()
      
      # 스케일링 적용
      df['column_name'] = scaler.fit_transform(df[['column_name']])
    • Robust 스케일링: 중앙값(median)과 IQR(Interquartile Range)을 이용하여 데이터를 스케일링한다. Robust 스케일링은 이상치의 영향을 최소화하며, 이상치가 많은 데이터셋에 유용하다.

      from sklearn.preprocessing import RobustScaler
      
      # Robust 스케일러 생성
      scaler = RobustScaler()
      
      # 스케일링 적용
      df['column_name'] = scaler.fit_transform(df[['column_name']])

📌 핵심 용어 정리

  • 데이터 전처리 (Data Preprocessing): 머신러닝 모델의 성능을 향상시키기 위해 데이터를 정제하고 변환하는 과정.
  • 결측치 (Missing Values): 데이터셋에서 값이 없는 항목.
  • 이상치 (Outliers): 데이터의 일반적인 패턴에서 벗어난 값.
  • 로그 변환 (Log Transformation): 데이터의 왜도를 줄이기 위해 로그 함수를 적용하는 변환.
  • 스케일링 (Scaling): 변수 간의 스케일 차이를 조정하여 모델 학습에 미치는 영향을 균등하게 만드는 과정.
  • Min-Max 스케일링: 데이터를 0과 1 사이의 값으로 변환하는 스케일링 기법.
  • Standard 스케일링 (Z-score Normalization): 데이터를 평균이 0이고 표준편차가 1인 분포로 변환하는 스케일링 기법.
  • Robust 스케일링: 중앙값과 IQR을 이용하여 데이터를 스케일링하는 기법.

데이터 전처리(data preprocessing)는 머신러닝 프로젝트에서 매우 중요한 단계이다. 적절한 데이터 전처리(data preprocessing) 기법을 선택하고 적용함으로써, 모델의 성능을 크게 향상시킬 수 있다. 따라서, 데이터의 특성을 이해하고, 모델의 요구사항을 고려하여 최적의 데이터 전처리(data preprocessing) 전략을 수립하는 것이 중요하다.

반응형