기계 학습 전처리
기계 학습 전처리
기계 학습 전처리(Machine Learning Preprocessing)는 원시 데이터를 기계 학습 모이 효과적으로 학습할 수 있도록 변환하고 준비하는 일련의 과정을 의미합니다. 모델의 성능은 학습 알고리즘뿐 아니라 데이터의 질에 크게 의존하므로, 전처리는 기계 학습 프로젝트에서 가장 중요한 단계 중 하나로 꼽힙니다. 이 문서에서는 기계 학습 전처리의 주요 개념, 절차, 기법 및 실무 팁에 대해 다룹니다.
개요
기계 학습 모델은 수치 기반의 계산을 수행하므로, 원시 데이터가 모델 입력 형식과 호환되도록 변환되어야 합니다. 그러나 현실 세계의 데이터는 결측치, 이상치, 비정형 구조, 다양한 스케일, 불균형 클래스 등 다양한 문제를 내포하고 있습니다. 이러한 문제들을 해결하고 데이터를 모델 친화적인 형태로 만드는 것이 전처리의 핵심 목적입니다.
효과적인 전처리를 통해 모델의 학습 속도를 향상시키고, 일반화 성능을 높이며, 과적합(overfitting)을 방지할 수 있습니다.
전처리의 주요 단계
기계 학습 전처리는 일반적으로 다음과 같은 순차적 단계로 구성됩니다.
1. 데이터 수집 및 탐색
- 데이터 수집: 관련된 원시 데이터를 데이터베이스, CSV, JSON, API 등 다양한 소스에서 수집합니다.
- 탐색적 데이터 분석(Exploratory Data Analysis, EDA): 데이터의 분포, 상관관계, 결측치 패턴 등을 시각화하고 분석하여 전반적인 특성을 파악합니다.
2. 결측치 처리 (Missing Data Handling)
결측치는 모델 학습에 부정적인 영향을 미칠 수 있습니다. 처리 방법은 다음과 같습니다:
- 삭제: 결측치가 많은 행 또는 열을 제거 (예:
df.dropna()
) - 대체 (Imputation):
- 평균/중앙값/최빈값으로 대체
- 회귀 모델을 이용한 예측 대체
[scikit-learn](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/scikit-learn)
의[SimpleImputer](/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%EC%A0%95%EC%A0%9C/SimpleImputer)
,[KNNImputer](/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%EC%A0%95%EC%A0%9C/KNNImputer)
사용
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}} ]
→[MinMaxScaler](/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%EC%A0%95%EC%A0%9C/MinMaxScaler)
사용 -
표준화 (Standardization): 평균 0, 분산 1로 조정
[ X' = \frac{X - \mu}{\sigma} ]
→[StandardScaler](/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%EC%A0%95%EC%A0%9C/StandardScaler)
사용
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
5. 범주형 데이터 인코딩
범주형 변수(예: 성별, 도시명)는 수치형으로 변환되어야 합니다.
-
레이블 인코딩 (Label Encoding): 각 범주에 정수를 할당
→ 순서가 의미 없는 경우 사용 시 주의 필요 -
원-핫 인코딩 (One-Hot Encoding): 각 범주를 독립된 이진 열로 확장
→[pandas](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/pandas).get_dummies()
또는[OneHotEncoder](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EC%9D%B8%EC%BD%94%EB%94%A9/OneHotEncoder)
사용
import pandas as pd
df_encoded = pd.get_dummies(df, columns=['city'])
6. 특성 추출 및 차원 축소
불필요한 특성을 제거하거나, 더 의미 있는 특성을 생성합니다.
- 특성 선택 (Feature Selection): 정보 이득, 상관관계 분석, L1 정규화 등을 통해 중요 특성 선정
- 차원 축소 (Dimensionality Reduction):
- PCA (주성분 분석): 선형 변환을 통한 주성분 추출
- t-SNE, UMAP: 시각화용 비선형 차원 축소
전처리의 중요성
- 모델 성능 향상: 정제된 데이터는 더 높은 정확도와 안정성을 제공합니다.
- 학습 속도 개선: 불필요한 노이즈 제거로 학습 시간 단축.
- 과적합 방지: 데이터 품질 향상은 모델이 노이즈가 아닌 패턴을 학습하도록 유도합니다.
- 알고리즘 요구사항 충족: 많은 알고리즘은 정규화된 입력이나 수치형 데이터를 요구합니다.
주요 도구 및 라이브러리
도구 | 용도 |
---|---|
pandas |
데이터 로딩, 결측치 처리, 인코딩 |
[NumPy](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/NumPy) |
수치 연산 |
scikit-learn |
전처리 함수 제공 (Imputer, Scaler, Encoder 등) |
[missingno](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%8B%9C%EA%B0%81%ED%99%94/%EC%8B%9C%EA%B0%81%ED%99%94%EB%8F%84%EA%B5%AC/missingno) |
결측치 시각화 |
[seaborn](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%8B%9C%EA%B0%81%ED%99%94/%EC%8B%9C%EA%B0%81%ED%99%94%EB%8F%84%EA%B5%AC/seaborn) / [matplotlib](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%8B%9C%EA%B0%81%ED%99%94/%EC%8B%9C%EA%B0%81%ED%99%94%EB%8F%84%EA%B5%AC/matplotlib) |
EDA 및 분포 시각화 |
실무 팁
- 전처리 파이프라인 구축:
sklearn.pipeline.[Pipeline](/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%EC%A4%80%EB%B9%84/Pipeline)
을 사용해 전처리 단계를 통합하고 재사용 가능하게 만드세요. - 훈련/테스트 데이터 분리 후 전처리: 데이터 누수(data leakage) 방지를 위해 훈련 데이터 기준으로 전처리기를 학습하고, 테스트 데이터에는
transform()
만 적용합니다. - 전처리 로그 유지: 어떤 변환이 수행되었는지 기록하여 재현성을 확보하세요.
참고 자료
- Scikit-learn Preprocessing Documentation
- 김도형, 『파이썬 기반 머신러닝 실전』, 한빛미디어
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning
기계 학습 전처리는 단순한 기술적 절차를 넘어서, 데이터 과학자와 엔지니어의 판단력과 경험을 요구하는 핵심 작업입니다. 철저한 전는 성공적인 모델 개발의 기초가 됩니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.