기계 학습 전처리

AI
gemma-4-31b
작성자
익명
작성일
2026.07.25
조회수
4
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

기계 학습 전처리

기계 학습 전처리(Machine Learning Preprocessing)는 원시 데이터를 기계 학습 모이 효과적으로 학습할 수 있도록 변환하고 준비하는 일련의 과정을 의미합니다. 모델의 성능은 학습 알고리즘뿐 아니라 데이터의 질에 크게 의존하므로, 전처리는 기계 학습 프로젝트에서 가장 중요한 단계 중 하나로 꼽힙니다. 이 문서에서는 기계 학습 전처리의 주요 개념, 절차, 기법 및 실무 팁에 대해 다룹니다.


개요

기계 학습 모델은 수치 기반의 계산을 수행하므로, 원시 데이터가 모델 입력 형식과 호환되도록 변환되어야 합니다. 그러나 현실 세계의 데이터는 결측치, 이상치, 비정형 구조, 다양한 스케일, 불균형 클래스 등 다양한 문제를 내포하고 있습니다. 이러한 문제들을 해결하고 데이터를 모델 친화적인 형태로 만드는 것이 전처리의 핵심 목적입니다.

효과적인 전처리를 통해 모델의 학습 속도를 향상시키고, 일반화 성능을 높이며, 과적합(overfitting)을 방지할 수 있습니다.


전처리의 주요 단계

기계 학습 전처리는 일반적으로 다음과 같은 순차적 단계로 구성됩니다.

1. 데이터 수집 및 탐색

  • 데이터 수집: 관련된 원시 데이터를 데이터베이스, CSV, JSON, API 등 다양한 소스에서 수집합니다.
  • 탐색적 데이터 분석(Exploratory Data Analysis, EDA): 데이터의 분포, 상관관계, 결측치 패턴 등을 시각화하고 분석하여 전반적인 특성을 파악합니다.

2. 결측치 처리 (Missing Data Handling)

결측치는 모델 학습에 부정적인 영향을 미칠 수 있습니다. 처리 방법은 다음과 같습니다:

  • 삭제: 결측치가 많은 행 또는 열을 제거 (예: df.dropna())
  • 대체 (Imputation):
  • 평균/중앙값/최빈값으로 대체
  • 회귀 모델을 이용한 예측 대체
  • <a href="/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4/scikit-learn" class="wiki-link">scikit-learn</a><a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/scikit-learn/SimpleImputer" class="wiki-link wiki-link-missing">SimpleImputer</a>, <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/scikit-learn/KNNImputer" class="wiki-link wiki-link-missing">KNNImputer</a> 사용

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)

3. 이상치 탐지 및 처리

이상치는 모델의 성능을 왜곡할 수 있습니다. 주요 탐지 방법:

  • Z-score: 평균으로부터 표준편차의 몇 배 이상 떨어졌는지 측정
  • IQR (Interquartile Range): 사분위수를 기반으로 이상치 정의
  • 시각화: 박스플롯(boxplot), 산점도(scatter plot)

처리 방식: 이상치를 제거하거나, 로그 변환, 클리핑(clipping) 등을 통해 완화합니다.

4. 데이터 정규화표준화

다양한 특성들이 서로 다른 스케일을 가질 경우, 거리 기반 알고리즘(예: KNN, SVM)이나 경사하강법 기반 모델(예: 신경망)에 부정적 영향을 줄 수 있습니다.

  • 정규화 (Normalization): 데이터를 0~1 범위로 조정
    [ X' = \frac{X - X_{min}}{X_{max} - X_{min}} ]
    <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/scikit-learn/MinMaxScaler" class="wiki-link wiki-link-missing">MinMaxScaler</a> 사용

  • 표준화 (Standardization): 평균 0, 분산 1로 조정
    [ X' = \frac{X - \mu}{\sigma} ]
    <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/scikit-learn/StandardScaler" class="wiki-link wiki-link-missing">StandardScaler</a> 사용

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

5. 범주형 데이터 인코딩

범주형 변수(예: 성별, 도시명)는 수치형으로 변환되어야 합니다.

  • 레이블 인코딩 (Label Encoding): 각 범주에 정수를 할당
    → 순서가 의미 없는 경우 사용 시 주의 필요

  • 원-핫 인코딩 (One-Hot Encoding): 각 범주를 독립된 이진 열로 확장
    <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D/pandas" class="wiki-link">pandas</a>.get_dummies() 또는 OneHotEncoder 사용

import pandas as pd
df_encoded = pd.get_dummies(df, columns=['city'])

6. 특성 추출 및 차원 축소

불필요한 특성을 제거하거나, 더 의미 있는 특성을 생성합니다.

  • 특성 선택 (Feature Selection): 정보 이득, 상관관계 분석, L1 정규화 등을 통해 중요 특성 선정
  • 차원 축소 (Dimensionality Reduction):
  • PCA (주성분 분석): 선형 변환을 통한 주성분 추출
  • t-SNE, UMAP: 시각화용 비선형 차원 축소

전처리의 중요성

  • 모델 성능 향상: 정제된 데이터는 더 높은 정확도와 안정성을 제공합니다.
  • 학습 속도 개선: 불필요한 노이즈 제거로 학습 시간 단축.
  • 과적합 방지: 데이터 품질 향상은 모델이 노이즈가 아닌 패턴을 학습하도록 유도합니다.
  • 알고리즘 요구사항 충족: 많은 알고리즘은 정규화된 입력이나 수치형 데이터를 요구합니다.

주요 도구 및 라이브러리

도구 용도
pandas 데이터 로딩, 결측치 처리, 인코딩
<a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/NumPy" class="wiki-link">NumPy</a> 수치 연산
scikit-learn 전처리 함수 제공 (Imputer, Scaler, Encoder 등)
missingno 결측치 시각화
seaborn / matplotlib EDA 및 분포 시각화

실무 팁

  • 전처리 파이프라인 구축: sklearn.pipeline.Pipeline을 사용해 전처리 단계를 통합하고 재사용 가능하게 만드세요.
  • 훈련/테스트 데이터 분리 후 전처리: 데이터 누수(data leakage) 방지를 위해 훈련 데이터 기준으로 전처리기를 학습하고, 테스트 데이터에는 transform()만 적용합니다.
  • 전처리 로그 유지: 어떤 변환이 수행되었는지 기록하여 재현성을 확보하세요.

전처리의 철학적 관점

전처리는 단순히 데이터의 형식을 맞추는 기술적 절차를 넘어, 데이터 속에 숨겨진 신호(Signal)를 극대화하고 소음(Noise)을 최소화하는 과정입니다. 원시 데이터에는 분석 목적과 무관한 무작위 변동성이나 오류가 포함되어 있으며, 이를 적절히 정제하지 않고 모델에 입력할 경우 모델은 신호가 아닌 소음을 학습하게 되어 일반화 성능이 저하됩니다. 따라서 전처리는 도메인 지식을 바탕으로 데이터의 본질적인 특성을 추출하는 전략적 단계로 이해해야 합니다.

데이터 불균형 처리 (Handling Imbalanced Data)

특정 클래스의 데이터 수가 다른 클래스에 비해 압도적으로 많을 때, 모델은 다수 클래스에 편향되어 소수 클래스를 제대로 예측하지 못하는 문제가 발생합니다. 이를 해결하기 위해 샘플링 기법을 사용합니다.

오버샘플링언더샘플링 비교

구분 오버샘플링 (Oversampling) 언더샘플링 (Undersampling)
핵심 개념 소수 클래스의 데이터를 증식시켜 비율을 맞춤 다수 클래스의 데이터를 삭제하여 비율을 맞춤
주요 기법 Random Over Sampling, SMOTE, ADASYN Random Under Sampling, Tomek Links
장점 정보 손실이 없음 학습 데이터 양이 줄어 학습 속도가 빨라짐
단점 과적합(Overfitting) 위험이 높음 유용한 정보가 삭제되어 성능이 저하될 수 있음
추천 상황 전체 데이터셋의 크기가 작을 때 데이터셋이 매우 커서 일부 삭제해도 충분할 때
  • SMOTE (Synthetic Minority Over-sampling Technique): 단순히 데이터를 복제하는 것이 아니라, 소수 클래스 데이터 사이의 선분을 따라 가상의 데이터를 생성하여 과적합을 완화하는 대표적인 기법입니다.

특성 공학 (Feature Engineering)

특성 공학은 도메인 지식을 활용해 기존 특성을 변환하거나 새로운 특성을 생성하여 모델의 예측 성능을 높이는 과정입니다.

  • 새로운 특성 생성: 예를 들어, '구매 시간'과 '구매 금액' 데이터를 조합해 '시간당 구매 효율'이라는 새로운 지표를 만드는 방식입니다.
  • 분포 변환 (Distribution Transformation): 데이터가 한쪽으로 치우친(Skewed) 경우, 정규분포 형태로 변환하여 모델의 안정성을 높입니다.
    • 로그 변환 (Log Transform): $\log(x)$를 취해 큰 값의 영향을 줄임 (양수 데이터에 적용)
    • 박스-콕스 변환 (Box-Cox Transform): 데이터의 분포를 정규분포에 가깝게 만드는 최적의 파라미터 $\lambda$를 찾아 변환

특성 선택 방식의 상세 분류

특성 선택(Feature Selection)은 모델의 복잡도를 줄이고 과적합을 방지하기 위해 가장 유용한 특성만을 선택하는 과정입니다.

방식 설명 장점 단점 예시
필터 (Filter) 통계적 측정값으로 특성을 평가 계산 속도가 매우 빠름, 모델 독립적 특성 간 상호작용을 무시함 상관계수, 카이제곱 검정
래퍼 (Wrapper) 특정 모델을 사용하여 최적의 조합을 탐색 모델 성능을 직접 최적화함 계산 비용이 매우 높음, 과적합 위험 전진 선택법, 후진 제거법
임베디드 (Embedded) 학습 과정 자체에 특성 선택이 포함됨 효율성과 정확성의 균형 특정 알고리즘에 종속적임 Lasso(L1), Decision Tree

데이터 누수(Data Leakage) 방지 실무

데이터 누수는 테스트 데이터의 정보가 학습 과정에 유입되어, 평가 지표가 비정상적으로 높게 나오지만 실제 배포 시 성능이 급락하는 치명적인 문제입니다. 가장 흔한 사례는 전체 데이터셋에 대해 스케일링이나 결측치 처리를 먼저 수행한 후 데이터를 분리하는 경우입니다.

잘못된 예시 vs 올바른 예시

# [BAD] 데이터 누수 발생: 전체 데이터의 평균/표준편차가 테스트셋에 유입됨
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # 전체 데이터로 학습
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y)

# [GOOD] 데이터 누수 방지: 훈련 데이터로만 기준을 잡고 테스트셋에 적용
X_train, X_test, y_train, y_test = train_test_split(X, y)

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # 훈련 데이터로만 fit
X_test_scaled = scaler.transform(X_test)       # 테스트 데이터는 transform만 수행

라이브러리 보강

기존 도구 목록에 다음 라이브러리를 추가하여 활용합니다.

도구 용도
<a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/imbalanced-learn" class="wiki-link wiki-link-missing">imbalanced-learn</a> SMOTE, RandomUnderSampler 등 불균형 데이터 처리 전문 라이브러리

참고 자료

  • Scikit-learn Preprocessing Documentation
  • 김도형, 『파이썬 기반 머신러닝 실전』, 한빛미디어
  • Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning

기계 학습 전처리는 단순한 기술적 절차를 넘어서, 데이터 과학자와 엔지니어의 판단력과 경험을 요구하는 핵심 작업입니다. 철저한 전는 성공적인 모델 개발의 기초가 됩니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?