yuns

4. 머신러닝 모델 개발 과정 - 데이터 수집 및 전처리 본문

머신러닝

4. 머신러닝 모델 개발 과정 - 데이터 수집 및 전처리

yuuuun 2025. 3. 15. 10:12
반응형

머신러닝 모델의 성능은 주어진 데이터의 품질에 크게 좌우됩니다. 따라서 데이터 수집과 전처리는 모델 개발 과정에서 가장 중요한 단계 중 하나입니다. 이번 글에서는 머신러닝을 위한 데이터 수집 및 전처리 과정에 대해 자세히 알아보겠습니다.

1. 데이터 수집(Data Collection)

데이터 수집은 머신러닝 모델을 훈련하기 위해 필요한 데이터를 확보하는 과정입니다. 데이터는 다양한 출처에서 얻을 수 있으며, 다음과 같은 방법들이 일반적으로 사용됩니다.

📌 데이터 수집 방법

  1. 공개 데이터셋 활용
  2. 크롤링 및 API 활용
    • 웹 스크래핑 (BeautifulSoup, Scrapy 등 사용)
    • 오픈 API (Twitter API, Google Maps API 등 활용)
  3. 데이터베이스 및 로그 활용
    • 기업 내부 데이터베이스(SQL, NoSQL 등)
    • 사용자 활동 로그(클릭 스트림, IoT 센서 데이터 등)
  4. 설문조사 및 수작업 데이터 수집
    • 사용자 피드백
    • 연구 및 실험 데이터를 활용

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)을 방지할 수 있습니다.

반응형
Comments