티스토리 뷰

반응형

머신러닝 기초학습 10 (완결): 머신러닝 프로젝트 A~Z — 기획부터 데이터, 모델링, 배포, 운영까지 ‘완전체 튜토리얼’


“머신러닝을 처음부터 끝까지, 실제 프로젝트처럼 해보고 싶다.”

그래서 이번 마지막 글은 단순 개념 정리가 아니라
실제 현업에서 하나의 ML 프로젝트가 어떻게 완성되는지
A → Z 전체 흐름을 그대로 담았습니다.

이 글을 다 보면,
모델 한 개를 “실제로 완성시키는 능력”을 갖게 됩니다.


1. 문제 정의 (Problem Framing)

머신러닝은 문제 정의 50%, 데이터 30%, **모델 20%**라는 말이 있습니다.
문제가 틀리면, 모델이 아무리 좋아도 의미가 없습니다.

예제 문제

“고객이 다음 달에 이탈(churn)할지 여부를 예측하는 모델을 만들자.”

핵심 질문

  • 예측을 통해 어떤 비즈니스 가치를 만들 수 있는가?
  • 예측 단위는 고객(개인 ID)인지?
  • 타깃(라벨)의 기준은 무엇인가?
  • 실제 서비스에서 어떻게 활용할 것인가?

문제 정의는 곧 ‘성공 기준’이다.


2. 데이터 설계 (Data Design)

필요한 데이터

  • 고객 정보 (가입일, 지역 등)
  • 이용 패턴 (방문 빈도, 사용 시간 등)
  • 결제 정보 (구매 횟수, 구매 금액)
  • 고객센터 문의 이력
  • 라벨: “다음 달 이탈 여부(1/0)”

데이터 스키마 예시

user_id | month | visits | active_days | purchase_total | cs_calls | churn

데이터 품질 체크 리스트

  • 결측치?
  • 이상치?
  • 타임스탬프 정렬됐는가?
  • 중복행 존재?
  • 라벨 누수(leakage) 없나?
    (미래 데이터가 학습에 들어가는 치명적 오류)

3. 데이터 전처리 (Preprocessing)

반응형
  • 결측치 → 평균/중앙값 대체
  • 이상치 → IQR 제거
  • 스케일링 → StandardScaler
  • 범주형 → One-Hot Encoding
  • 날짜 → 요일, 주차, 월 단위 파생 피처
  • 파생 피처 → 변동률, 평균값, 주간 패턴 등
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

파이프라인으로 전처리를 자동화하는 것이 베스트.


4. 학습용 데이터셋 분리

  • Train: 70%
  • Validation: 15%
  • Test: 15%
  • 시계열이면 Time-based split 필수
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)

5. 모델링 (Modeling)

후보 모델 1: 로지스틱 회귀 (baseline)

  • 빠르고 해석력 좋음

후보 모델 2: Random Forest

  • 비선형 패턴을 잘 잡음

후보 모델 3: XGBoost / LightGBM

  • 실무에서 가장 높은 성능

기본 학습 예제

from xgboost import XGBClassifier

model = XGBClassifier(
    n_estimators=300,
    learning_rate=0.05,
    max_depth=5,
    subsample=0.8,
    colsample_bytree=0.8
)

model.fit(X_train, y_train)

6. 평가 (Evaluation)

이탈 예측은 불균형 데이터가 자주 등장하므로
Accuracy보다 Precision, Recall, F1-score, AUC가 중요합니다.

from sklearn.metrics import classification_report, roc_auc_score

pred = model.predict(X_test)
probs = model.predict_proba(X_test)[:,1]

print(classification_report(y_test, pred))
print("AUC:", roc_auc_score(y_test, probs))

confusion matrix로 오류 패턴 분석

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, pred))

7. 모델 해석 (Explainability)

SHAP 분석

import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)
  • 어떤 피처가 이탈 판단에 가장 기여했는지
  • 고객별로 왜 이탈 가능성이 높게 나왔는지

비즈니스 의사결정에 필수적인 단계.


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

AutoML 또는 Optuna로 자동 튜닝

import optuna

def objective(trial):
    depth = trial.suggest_int("max_depth", 3, 12)
    lr = trial.suggest_float("learning_rate", 0.01, 0.2)
    n_est = trial.suggest_int("n_estimators", 100, 500)

    model = XGBClassifier(
        learning_rate=lr,
        max_depth=depth,
        n_estimators=n_est
    )
    score = cross_val_score(model, X, y, cv=5).mean()
    return score

9. 모델 저장 (Model Registry)

MLflow로 저장 및 버전 관리:

import mlflow
mlflow.sklearn.log_model(model, "model")
  • 실험마다 파라미터, 지표, 모델 스냅샷 자동 저장
  • “어떤 모델이 가장 좋았는가?” 즉시 확인

10. 모델 배포 (Deployment)

FastAPI로 실시간 예측 서버 만들기

from fastapi import FastAPI
import joblib
import numpy as np

app = FastAPI()
model = joblib.load("model.pkl")

@app.post("/predict")
def predict(churn_data: list):
    X = np.array(churn_data).reshape(1, -1)
    pred = model.predict(X)[0]
    return {"prediction": int(pred)}

실행:

uvicorn main:app --reload --host 0.0.0.0 --port 8000

11. Docker로 컨테이너화

FROM python:3.10
COPY . .
RUN pip install fastapi uvicorn joblib xgboost numpy
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

12. 운영 (MLOps)

Airflow로 자동화 파이프라인 구축

[Fetch Data] → [Preprocess] → [Train Model] → [Evaluate] → [Deploy] → [Monitor]

모니터링

  • Drift 감지 (EvidentlyAI)
  • 예측 분포 감지
  • 성능 감소 시 자동 재학습

13. 전체 흐름 요약 (A~Z)

단계 설명

1. 문제 정의 목표·라벨·비즈니스 가치 확정
2. 데이터 설계 입력 변수를 구조화
3. 전처리 결측/이상치/스케일링/인코딩
4. Train/Test 분리 일반화 확보
5. 모델링 여러 알고리즘 실험
6. 평가 F1, AUC, confusion matrix
7. 해석 SHAP, LIME
8. 튜닝 Optuna, Grid/Random Search
9. 저장 모델 레지스트리
10. 배포 API / Batch / Edge
11. 운영 모니터링 + 자동 재학습

14. 결론 — “모델 개발자에서 ML 엔지니어로”

이제 당신은 모델을 “만들 줄 아는 사람”이 아닙니다.
전체 프로젝트를 끝까지 “완성시키는 사람”이 되었습니다.

이 10편의 시리즈는
초보자를 “실전형 머신러닝 엔지니어”로 바꾸기 위한 로드맵이었습니다.


 



머신러닝,ML프로젝트,데이터파이프라인,모델링,전처리,MLOps,AutoML,FastAPI,MLflow,Optuna

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형