[ML] 머신러닝 프로젝트 워크플로우 정리: 데이터 수집부터 모델 평가까지

하영(Emma)·2025년 3월 26일

Machine Learning

목록 보기
1/10
post-thumbnail

머신러닝 프로젝트 워크플로우

머신러닝(Machine Learning) 프로젝트는 단순한 모델 학습이 아니라, 문제를 정의하고 데이터를 처리하여 실제 적용까지 연결하는 일련의 과정이다.
아래 워크플로우는 실무에서 반복적으로 사용되는 핵심 단계들을 정리한 것이다.


1. Problem Definition (문제 정의)

  • 해결하고자 하는 문제를 명확히 정의하고 예측하고자 하는 값(Target)설명 변수(Features)를 구분한다.
  • 문제 유형에 따라 접근 방식이 달라진다.
문제 유형설명예시
회귀 (Regression)연속적인 수치 예측주택 가격, 기온, 수요량
분류 (Classification)범주형 클래스 예측암 진단(양성/음성), 리뷰 감성
군집화 (Clustering)라벨 없이 유사한 데이터 그룹화고객 세분화, 뉴스 분류

목표 정의가 명확해야 모델 선정과 평가 기준도 명확해진다.


2. Data Collection (데이터 수집)

  • 프로젝트 성패는 데이터 확보에 달려 있다.
  • 데이터의 양, 질, 다양성이 중요하다.

데이터 출처

  • 내부 시스템: DB, Excel, CSV 등
  • 웹 크롤링/스크래핑: BeautifulSoup, Selenium
  • 공개 데이터셋: Kaggle, UCI, AI Hub, Data.go.kr
  • 센서/IoT 데이터: Wearable, Smart Home 등
  • API 수집: OpenWeatherMap, Twitter API 등

3. Data Preprocessing (데이터 전처리)

모델 학습 전, 데이터의 노이즈를 제거하고 구조화하는 단계

주요 작업

  • 결측치 처리: 제거, 평균/중앙값 대체, 예측 기반 보간
  • 이상치 탐지: Boxplot, Z-score, IQR
  • 정규화/표준화:
    • MinMaxScaler: 0~1 스케일
    • StandardScaler: 평균=0, 분산=1
  • 범주형 인코딩:
    • Label Encoding: 순서가 있는 경우
    • One-Hot Encoding: 순서 없는 카테고리
  • 날짜/시간 처리: 시간대 분리, 주중/주말 구분 등
  • Feature Engineering: 기존 변수 조합, 도메인 지식 활용 생성

4. 데이터 분할 & 교차검증

from sklearn.model_selection import train_test_split  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)

5. Model Selection (모델 선택)

문제의 성격과 데이터 특성에 따라 적합한 모델을 선택하는 것이 중요하다.

회귀(Regression) 문제

기본 모델설명
LinearRegression선형 관계를 가정한 간단한 모델
Ridge, Lasso정규화 기법을 적용한 선형 회귀
RandomForestRegressor비선형 관계에 강한 앙상블 트리
XGBoost, LightGBM고성능 부스팅 기반 모델

분류(Classification) 문제

기본 모델설명
LogisticRegression이진/다중 클래스 분류에 적합
KNN, SVM거리 기반 또는 결정 경계 기반 모델
RandomForestClassifier앙상블 기반의 견고한 성능
XGBoostClassifier캐글 우승자들이 선호하는 모델

딥러닝(Deep Learning)

분야모델특징
이미지CNN, ResNet시각적 패턴 인식에 최적
시계열RNN, LSTM순차 데이터에 적합
자연어BERT, GPT문맥 기반 텍스트 처리

6. Model Training (모델 학습)

선택한 모델을 데이터를 통해 학습시킨다.

python
# 랜덤포레스트 분류 모델 생성 및 학습
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train) # 학습 시작
  • 학습 데이터(X_train, y_train)를 기반으로 모델을 학습
  • 학습 중 과적합(overfitting) 여부를 모니터링

7. Model Evaluation (모델 평가)

학습된 모델의 성능을 다양한 지표를 통해 평가하여, 문제 해결 능력을 정량적으로 분석한다.


회귀(Regression) 문제 평가 지표

지표설명
MSE (Mean Squared Error)예측값과 실제값의 차이를 제곱하여 평균
MAE (Mean Absolute Error)예측값과 실제값의 차이를 절대값으로 평균
RMSE (Root Mean Squared Error)MSE의 제곱근으로, 단위를 원래대로 복원
R² Score (결정계수)모델이 데이터를 얼마나 잘 설명하는지 (1에 가까울수록 좋음)

분류(Classification) 문제 평가 지표

지표설명
Accuracy (정확도)전체 샘플 중 정답 비율
Precision (정밀도)양성으로 예측한 것 중 실제 양성의 비율
Recall (재현율)실제 양성 중에서 모델이 맞힌 비율
F1-score정밀도와 재현율의 조화 평균
Confusion Matrix (오차 행렬)TP, FP, FN, TN으로 예측 결과 분석
ROC-AUC임계값 변화에 따른 성능 시각화 및 정량화

python
from sklearn.metrics import classification_report, confusion_matrix

y_pred = model.predict(X_test)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

손실 함수 (Loss Function)

손실 함수는 모델이 예측한 값과 실제 값 사이의 차이를 계산하여, 모델의 성능을 수치화하는 데 사용된다.
학습 과정 중 경사하강법(Gradient Descent)을 통해 가중치를 업데이트할 때 오차 정보를 제공하는 핵심 요소이다.


회귀 문제에서의 대표 손실 함수

함수명수식설명
MSE (Mean Squared Error)MSE예측값과 실제값의 차이를 제곱하여 평균한 값. 오차가 클수록 큰 패널티를 부여
MAE (Mean Absolute Error)![MAE](https://latex.codecogs.com/svg.image?MAE=\frac{1}{n}\sum_{i=1}^{n}y_i-\hat{y}_i
Huber Loss조합된 형태로, 작은 오차에선 MSE처럼, 큰 오차에선 MAE처럼 동작

분류 문제에서의 대표 손실 함수

함수명수식설명
Binary Cross EntropyBCE이진 분류 문제에서 예측확률과 실제값의 오차 측정
Categorical Cross Entropy다중 클래스 분류에 사용. 예측확률이 정답 클래스에 가까울수록 낮은 손실
Sparse Categorical Cross Entropy라벨이 원-핫 인코딩이 아닐 경우 사용

✔️ 회귀는 연속형 출력 → MSE/MAE
✔️ 분류는 클래스 확률 → Cross Entropy 기반 손실 사용


시각 자료로 보는 손실 함수

Loss Function

문제 유형별로 자주 사용되는 평가 지표와 손실 함수(Loss Function)를 한눈에 정리한 표

문제 유형주요 평가 지표대표 손실 함수
회귀 (Regression)MSE, RMSE, MAE, R² ScoreMSE, MAE, Huber Loss
이진 분류 (Binary)Accuracy, Precision, Recall, F1-score, AUCBinary Cross Entropy
다중 분류 (Multi)Accuracy, Macro F1, Confusion MatrixCategorical / Sparse Categorical CrossEntropy
불균형 분류Precision, Recall, F1-score, AUCClass-weighted Cross Entropy, Focal Loss

8. Hyperparameter Tuning (하이퍼파라미터 튜닝)

주요 기법

방법설명
Grid Search가능한 모든 조합을 탐색하는 전수 조사 방식
Random Search랜덤 샘플링을 통해 일부 조합만 시도
Bayesian Optimization과거 탐색 결과를 기반으로 다음 후보를 똑똑하게 추천
Optuna / Hyperopt자동화된 고성능 하이퍼파라미터 튜닝 라이브러리
Cross-Validation 기반과적합을 방지하며 일반화 성능 확보 가능

예시 코드: GridSearchCV

python
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

params = {
    'n_estimators': [50, 100, 200],
    'max_depth': [3, 5, 7]
}

grid = GridSearchCV(RandomForestClassifier(), param_grid=params, cv=5)
grid.fit(X_train, y_train)

print(grid.best_params_)  # 최적 파라미터 출력

9. Model Deployment (모델 배포)

배포 방식 요약

방식설명
Flask / FastAPIPython 기반 API 서버 구축으로 손쉬운 배포 가능
Streamlit / Gradio빠르게 웹 기반 데모 제작 가능
Docker컨테이너로 환경 일관성 확보 및 배포 자동화
AWS / GCP / Azure클라우드 인프라 기반 확장성 높은 배포 가능
ONNX / TFLite경량화된 모델로 IoT 및 모바일 디바이스 적용 가능

💾 예시 코드: FastAPI + pickle

#모델 저장
python
import pickle
#학습된 모델 저장
with open('model.pkl', 'wb') as f:
    pickle.dump(model, f)
profile
Data Scientist, interested in CV, NLP

0개의 댓글