machine learning

데이터 전처리 과정

문과 열등생 2024. 2. 25. 15:41

   데이터 분석을 위해 모델을 사용하거나, 특정 목적에 사용하기 위한 모델을 학습시키려고 하는 경우, 데이터에 대한 전처리 과정은 굉장히 중요하다. 특히 모델이 잘 학습할 수 있도록 data를 scaling하고 불필요하거나 잘못 입력된 결측 값들을 사전에 제거하는 것은, 정제된 데이터를 사용함으로써 효율적으로 모델이 학습되고 사용할 수 있는 도구로서 잘 기능할 수 있도록 하는 첫 걸음이다.

   사실상 다양한 라이브러리를 통해 모델을 쉽게 import 하여 사용할 수 있다는 점에서, 어떤 problem을 해결하고자 모델을 사용할 것인지에 관한 목적을 명확히 설정하는 것과 더불어, 이를 위해 데이터를 어떻게 구축하여 사용할 것인가 하는 것 역시 굉장히 중요한 문제이다.

   효과적인 데이터 전처리를 위해서는 정말 다양한 요소들을 고려해야한다는 점에서 상당히 수고로운 작업일 뿐만 아니라, 헷갈리는 요소들이 많은 작업이다. 이에, 헷갈리지 않고 절차대로 데이터 전처리 과정을 거칠 수 있는 guidline을 만들어보려고 한다.

   각 과정에서 필요한 각종 지식들은 추가 링크를 통해 알아볼 수 있도록 첨부한다.

 

1. 데이터 정제(Cleaning)

  • 결측치 처리: 결측치를 제거하거나, 특정 값으로 대체(평균, 중앙값, 최빈값 등)
  • 결측치 확인 방법1) 'isnull()' 또는 'isna()' method 활용 : NaN 또는 None 데이터 확인 가능2) loading 시 결측치로 인식 : pd.read_csv(file_path, na_values=["결측치로 간주할 값"]3) dataset 내에서 결측치로 변환 : .replace()를 활용하여 특정 값을 결측치로 변경
  • 이상치 탐지 및 처리: 데이터에서 비정상적으로 높거나 낮은 값을 탐지하고 처리. 이상치를 제거하거나, 다른 값으로 대체 가능
  • 중복 데이터 제거: 데이터셋에서 중복된 행을 찾아 제거. 중복 데이터는 분석 결과를 왜곡시킬 수 있다는 점에서 확인 필요

 

2. 데이터 변환(Transformation)

  • 정규화 및 표준화: 특성(Feature)들의 스케일을 조정하여 모델의 성능을 향상. 정규화는 데이터를 0과 1 사이의 범위로 조정하고, 표준화는 데이터를 평균 0, 표준편차 1이 되도록 변환.
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler, Normalizer
  • 인코딩: 범주형 데이터를 숫자형 데이터로 변환
  • 원-핫 인코딩(One-Hot Encoding)이나 레이블 인코딩(Label Encoding) 등.
from sklearn.preprocessing import LabelBinarizer, LabelEncoder, OneHotEncoder
  • 특성 변환: 로그 변환, 제곱근 변환 등을 통해 데이터의 분포를 조정.

 

3. 데이터 통합(Integration)

  • 다양한 소스의 데이터 합치기: 여러 데이터 소스로부터 얻은 데이터를 하나의 데이터셋으로 통합.
  • 키(Key)를 사용한 데이터 병합: 공통의 식별자를 사용하여 관련 데이터를 통합.
df_combined = pd.merge(df_1, df_2, on="KeyColumn")

df_concate = pd.concat([df_1, df_2], axis=1)

 

4. 데이터 축소(Reduction)

  • 차원 축소: PCA(주성분 분석), t-SNE, LDA(선형 판별 분석) 등을 통해 데이터의 차원을 축소. 이는 모델의 복잡성을 줄이고, 과적합을 방지 가능.
  • 피처 선택: 가장 유용한 피처를 선택하여 모델의 성능을 최적화. 피처의 중요도에 따라 불필요한 피처를 제거 가능.
from sklearn.decomposition import PCA

# PCA를 사용한 차원 축소
pca = PCA(n_components=2)
df_pca = pca.fit_transform(df)

 

5. 데이터 균형(Balancing)

  • 데이터 불균형 처리: 분류 문제에서 특정 클래스의 데이터가 다른 클래스보다 훨씬 많을 경우, 데이터를 오버샘플링(Over-sampling)하거나 언더샘플링(Under-sampling)하여 균형.
from imblearn.over_sampling import SMOTE

# SMOTE를 사용한 오버샘플링
smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X, y)

 

6. 오류 검증 및 수정

  • 데이터 전처리 과정에서 발생할 수 있는 오류를 검증하고 수정. 데이터 변환 로직의 정확성을 확인하고, 전처리된 데이터가 분석이나 모델링 목적에 부합하는지 검토.

 

7. 데이터셋 분할

  • 훈련/검증/테스트 세트 분할: 검증 데이터를 마련하여 훈련 데이터의 overfitting 여부를 확인한 이후 test 시행.
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size, random_state)