yuns
4. 머신러닝 모델 개발 과정 - 데이터 수집 및 전처리 본문
반응형
머신러닝 모델의 성능은 주어진 데이터의 품질에 크게 좌우됩니다. 따라서 데이터 수집과 전처리는 모델 개발 과정에서 가장 중요한 단계 중 하나입니다. 이번 글에서는 머신러닝을 위한 데이터 수집 및 전처리 과정에 대해 자세히 알아보겠습니다.
1. 데이터 수집(Data Collection)
데이터 수집은 머신러닝 모델을 훈련하기 위해 필요한 데이터를 확보하는 과정입니다. 데이터는 다양한 출처에서 얻을 수 있으며, 다음과 같은 방법들이 일반적으로 사용됩니다.
📌 데이터 수집 방법
- 공개 데이터셋 활용
- Kaggle (https://www.kaggle.com)
- UCI Machine Learning Repository (https://archive.ics.uci.edu/ml)
- Google Dataset Search (https://datasetsearch.research.google.com)
- 크롤링 및 API 활용
- 웹 스크래핑 (BeautifulSoup, Scrapy 등 사용)
- 오픈 API (Twitter API, Google Maps API 등 활용)
- 데이터베이스 및 로그 활용
- 기업 내부 데이터베이스(SQL, NoSQL 등)
- 사용자 활동 로그(클릭 스트림, IoT 센서 데이터 등)
- 설문조사 및 수작업 데이터 수집
- 사용자 피드백
- 연구 및 실험 데이터를 활용
2. 데이터 전처리(Data Preprocessing)
수집된 데이터는 원시(raw) 상태일 가능성이 높으며, 머신러닝 모델이 효과적으로 학습할 수 있도록 데이터를 정제하고 변환하는 과정이 필요합니다.
📌 주요 데이터 전처리 과정
(1) 결측값 처리 (Handling Missing Values)
실제 데이터에는 누락된 값이 포함될 수 있습니다. 이를 처리하는 방법은 다음과 같습니다.
- 제거(Removal): 결측값이 포함된 행(row) 또는 열(column)을 제거
- 대체(Imputation): 평균, 중앙값, 최빈값 또는 머신러닝 모델을 사용하여 결측값을 예측하여 채우기
import pandas as pd
from sklearn.impute import SimpleImputer
# 샘플 데이터 생성
data = {'Age': [25, 30, None, 35, 40], 'Salary': [50000, 60000, 55000, None, 70000]}
df = pd.DataFrame(data)
# 평균값으로 결측값 대체
imputer = SimpleImputer(strategy='mean')
df.iloc[:, :] = imputer.fit_transform(df)
print(df)
(2) 이상값 탐지 및 제거 (Handling Outliers)
이상값(outlier)은 데이터 분포에서 비정상적으로 큰 차이를 보이는 값으로, 모델 성능을 저하시킬 수 있습니다.
- IQR(Interquartile Range) 방법: 사분위수를 이용하여 이상값 감지 및 제거
- Z-score 방법: 평균과 표준편차를 이용한 이상값 탐지
import numpy as np
from scipy import stats
# 이상값 제거 (Z-score 사용)
df = df[(np.abs(stats.zscore(df)) < 3).all(axis=1)]
(3) 데이터 정규화 및 표준화 (Normalization & Standardization)
데이터의 스케일이 다를 경우 머신러닝 모델의 학습에 영향을 미칠 수 있습니다.
- 정규화(Normalization): 데이터를 [0,1] 범위로 변환
- 표준화(Standardization): 평균이 0, 표준편차가 1이 되도록 변환
from sklearn.preprocessing import MinMaxScaler, StandardScaler
scaler = MinMaxScaler()
df[['Age', 'Salary']] = scaler.fit_transform(df[['Age', 'Salary']])
(4) 범주형 데이터 인코딩 (Encoding Categorical Data)
문자열로 표현된 범주형 데이터는 머신러닝 모델이 직접 처리할 수 없기 때문에 숫자로 변환해야 합니다.
- 레이블 인코딩(Label Encoding): 각 카테고리를 정수로 변환
- 원-핫 인코딩(One-Hot Encoding): 이진 벡터로 변환하여 정보 손실 방지
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# 레이블 인코딩
label_encoder = LabelEncoder()
df['Category'] = label_encoder.fit_transform(['A', 'B', 'A', 'C', 'B'])
(5) 데이터 분할 (Train-Test Split)
모델 학습을 위해 데이터를 훈련(Train)과 테스트(Test) 데이터로 분할합니다.
from sklearn.model_selection import train_test_split
X = df[['Age', 'Salary']]
y = df['Category']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
요약
데이터 수집과 전처리는 머신러닝 모델의 성능을 좌우하는 핵심 과정입니다. 깨끗하고 일관된 데이터를 제공하면 모델의 정확도가 높아지고, 노이즈나 이상값을 제거하면 과적합(overfitting)을 방지할 수 있습니다.
반응형
'머신러닝' 카테고리의 다른 글
4. 머신러닝 모델 개발 과정 - 모델 선택 및 학습 (0) | 2025.03.16 |
---|---|
4. 머신러닝 모델 개발 과정 - Feature Selection (0) | 2025.03.16 |
3. 머신러닝의 주요 알고리즘 - k-최근접 이웃(KNN) (0) | 2025.03.15 |
3. 머신러닝의 주요 알고리즘(4) - Support Vector Machine (0) | 2025.03.14 |
3. 머신러닝의 주요 알고리즘(3) - 랜덤 포레스트 (Random Forest) (0) | 2025.03.14 |