본문 바로가기
C.W.K.
Stream
Lesson 01 of 10 · published

머신러닝이라는 게 진짜로 뭐야

~32 min · foundation, machine-learning, framing

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

머신러닝은 네 가지 약속에서 시작해

머신러닝은 데이터를 넣으면 정답이 튀어나오는 마법 상자가 아니야. 먼저 무엇을 예측할지 정해야 해. 그다음에는 예측하는 순간 실제로 손에 쥘 수 있는 정보가 무엇인지, 과거 사례와 정답을 어떻게 짝지을지, 결과가 쓸모 있었는지 무엇으로 판단할지를 정해야 하지. 보통 이 네 조각을 목표값, 특성, 학습 데이터, 평가 지표라고 불러. 이름보다 중요한 건 서로 맞물린다는 사실이야. 목표값을 바꾸면 필요한 데이터가 달라지고, 평가 지표를 바꾸면 좋은 모델의 뜻도 달라져.

학습은 답을 외우는 일이 아니야

학습 알고리즘은 이미 본 사례에서 틀린 정도가 줄어들도록 내부 숫자를 조정해. 여기까지만 보면 시험 문제와 답을 외우는 일처럼 보이지. 하지만 우리가 원하는 건 처음 보는 사례에서도 통하는 규칙이야. 그래서 학습 데이터가 실제 세상을 제대로 대표해야 하고, 정답의 기준이 흔들리지 않아야 해. 예측할 때는 알 수 없는 정보를 몰래 넣어서도 안 돼. 과거 시험지를 통째로 외운 학생이 새 문제 앞에서 무너지는 것처럼, 학습 데이터만 잘 맞히는 모델은 배운 게 아니라 기억한 거야.

모델은 시스템의 한 부품일 뿐이야

현장에 나가면 모델 혼자서는 아무 일도 못 해. 원자료에서 특성을 만들고, 확률을 계산하고, 어느 지점에서 행동할지 정하고, 결과를 기록하고, 시간이 지나도 성능이 유지되는지 살펴야 해. 이 흐름 전체가 머신러닝 시스템이야. 모델 파일만 있고 입력 규칙이나 되돌리는 절차가 없다면 아직 실험실 물건이지 제품이 아니야. 객체지향으로 보자면 모델은 완성품이 아니라 더 큰 시스템이 품은 한 객체야. 입력 계약과 출력 계약을 지키지 못하면 내부 알고리즘이 아무리 근사해도 교체 대상일 뿐이지.

좋은 점수도 거짓말을 할 수 있어

검증 자료에서 ROC-AUC 0.97이 나왔다고 바로 축하하면 곤란해. 고객이 해지한 뒤에 생기는 환불 정보가 특성에 들어갔을 수도 있고, 실제 서비스의 고객 구성이 학습 자료와 다를 수도 있어. 숫자가 높다는 사실은 계산이 끝났다는 뜻이지 실험이 정직했다는 뜻이 아니야. 예측 시점을 먼저 그려보고, 각 특성이 그보다 앞에 존재했는지 확인해. 그리고 지금 쓰는 단순한 규칙보다 실제로 나아졌는지 비교해. 이 두 질문을 통과하지 못하면 화려한 점수는 모델의 실력이 아니라 실험 설계의 구멍을 보여주는 신호야.

첫 모델보다 먼저 써야 할 것

코드를 열기 전에 네 가지 약속을 한 장에 적어봐. 누구의 어떤 일을 언제 예측하는지, 그 순간 알 수 있는 정보는 무엇인지, 어떤 과거 사례를 학습에 쓰는지, 어느 지표가 기존 방법보다 나아져야 성공인지 적는 거야. 이 문장을 팀이 함께 읽고 같은 장면을 떠올릴 수 있어야 해. 합의가 안 되면 모델을 고를 때가 아니라 문제를 다시 고를 때야.

Code

scikit-learn을 불러오기 전에 학습 계약부터 적기·python
contract = {
    "target": "will_churn_within_30_days",
    "prediction_time": "end of each calendar day",
    "legal_features": [
        "plan_tier",
        "tenure_days",
        "tickets_last_30d",
        "logins_last_7d",
    ],
    "metric": "PR-AUC, with recall >= 0.70 on high-risk users",
    "baseline": "current rules-based churn flag",
    "action_if_positive": "send retention offer next morning",
}
assert contract["baseline"], "every ML project needs a baseline to beat"
계약을 지키는 가장 작은 모델·python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import average_precision_score

X = customers[contract["legal_features"]]
y = customers[contract["target"]]

X_tr, X_te, y_tr, y_te = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=7
)
model = LogisticRegression(max_iter=200).fit(X_tr, y_tr)
pr_auc = average_precision_score(y_te, model.predict_proba(X_te)[:, 1])
print(f"baseline beat? PR-AUC={pr_auc:.3f}")

External links

Exercise

회사나 개인 프로젝트에서 예측 문제 하나를 골라봐. 목표값, 예측하는 시점, 그때 쓸 수 있는 정보, 학습 자료, 평가 지표를 한 장에 적어. 지금 쓰는 단순한 방법도 함께 적어야 해. 비교할 기존 방법을 못 적겠다면 머신러닝부터 시작할 때가 아니야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.