머신러닝이란 무엇인가 — 유형과 분류

머신러닝(Machine learning)은 규칙(rule)을 손으로 쓰는 대신, 컴퓨터가 데이터에서 패턴(pattern)을 찾도록 가르치는 일입니다.

유형: Learn 언어: Python 선수 지식: Phase 1(수학 기초, Math Foundations) 예상 시간: 약 45분

학습 목표

  • 지도학습(Supervised learning), 비지도학습(Unsupervised learning), 강화학습(Reinforcement learning)의 차이를 설명하고, 주어진 문제에 어떤 유형이 적용되는지 식별합니다.
  • 최근접 중심 분류기(Nearest centroid classifier)를 밑바닥부터 직접 구현하고, 무작위 베이스라인(random baseline)과 비교해 평가합니다.
  • 분류(Classification) 과제와 회귀(Regression) 과제를 구분하고, 각각에 적절한 손실 함수(loss function)를 선택합니다.
  • 주어진 비즈니스 문제가 머신러닝에 적합한지, 결정론적 규칙(deterministic rule)으로 해결하는 편이 나은지 평가합니다.

문제

스팸 필터(Spam filter)를 만들고 싶다고 해 봅시다. 전통적인 접근 방식은 수백 개의 규칙을 직접 쓰는 것입니다. "이메일에 'FREE MONEY'가 들어 있으면 스팸으로 표시한다. 느낌표가 3개보다 많으면 스팸으로 표시한다." 이런 규칙을 몇 주 동안 작성합니다. 그런데 스팸 발송자가 표현 방식을 바꿉니다. 규칙이 깨집니다. 다시 규칙을 더 씁니다. 이 굴레는 끝나지 않습니다.

머신러닝은 이 방향을 뒤집습니다. 규칙을 쓰는 대신, 컴퓨터에게 "스팸" 또는 "스팸 아님" 같은 레이블(label)이 붙은 이메일 수천 개를 줍니다. 그리고 컴퓨터가 스스로 규칙을 찾아내게 합니다. 컴퓨터는 사람이 생각하지 못한 패턴을 찾아냅니다. 스팸 발송자가 전략을 바꾸면 코드를 다시 쓰는 대신 새로운 데이터로 다시 학습(retrain)합니다.

"규칙을 프로그래밍한다"에서 "데이터로부터 학습한다"로 바뀌는 것이 머신러닝의 핵심입니다. 추천 엔진(recommendation engine), 음성 비서(voice assistant), 자율주행차(self-driving car), 언어 모델(language model)은 모두 이 방식으로 작동합니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.지도학습(Supervised learning)에서 모델은 학습 중에 무엇을 받나요?

2.데이터를 학습 집합(training set)과 시험 집합(test set)으로 나누는 목적은 무엇인가요?

0/2 답변 완료

개념

규칙이 아니라 데이터에서 배우기

전통적인 프로그래밍(traditional programming)과 머신러닝은 문제를 반대 방향으로 풉니다.

flowchart LR
    subgraph Traditional["Traditional Programming"]
        direction LR
        R[Rules] --> P1[Program]
        D1[Data] --> P1
        P1 --> O1[Output]
    end

    subgraph ML["Machine Learning"]
        direction LR
        D2[Data] --> P2[Learning Algorithm]
        O2[Expected Output] --> P2
        P2 --> M[Model / Rules]
    end

전통적인 프로그래밍에서는 사람이 규칙을 씁니다. 프로그램은 그 규칙을 데이터에 적용해 출력을 만듭니다.

머신러닝에서는 데이터와 기대 출력(expected output)을 제공합니다. 알고리즘이 규칙을 발견합니다.

학습(training) 결과로 나오는 모델(model)이 곧 규칙입니다. 다만 그 규칙은 숫자, 즉 가중치(weight)와 매개변수(parameter)로 인코딩되어 있습니다. 모델은 본 예시에서 일반화(generalize)하여, 아직 보지 못한 데이터에 대해 예측(prediction)을 만듭니다.

머신러닝(Machine Learning)의 세 가지 유형

flowchart TD
    ML[Machine Learning] --> SL[Supervised Learning]
    ML --> UL[Unsupervised Learning]
    ML --> RL[Reinforcement Learning]

    SL --> C[Classification]
    SL --> R[Regression]

    UL --> CL[Clustering]
    UL --> DR[Dimensionality Reduction]

    RL --> PO[Policy Optimization]
    RL --> VL[Value Learning]

지도학습(Supervised Learning): 입력-출력 쌍(input-output pair)이 있습니다. 모델은 입력을 출력으로 대응(mapping)시키는 법을 배웁니다.

  • "고양이 또는 강아지 레이블이 붙은 사진 10,000장이 있습니다. 둘을 구분하는 법을 배우세요."
  • "주택 특성(feature)과 가격이 있습니다. 가격을 예측하는 법을 배우세요."

비지도학습(Unsupervised Learning): 입력만 있고 레이블은 없습니다. 모델이 데이터의 구조(structure)를 스스로 찾습니다.

  • "고객 구매 이력 10,000건이 있습니다. 자연스러운 묶음(grouping)을 찾으세요."
  • "1,000차원 데이터 포인트가 있습니다. 구조를 유지하면서 2차원으로 줄이세요."

강화학습(Reinforcement Learning): 에이전트(agent)가 환경(environment)에서 행동(action)을 취하고 보상(reward) 또는 벌점(penalty)을 받습니다. 총 보상을 최대화(maximize)하는 전략, 즉 정책(policy)을 배웁니다.

  • "이 게임을 하세요. 이기면 +1, 지면 -1입니다. 전략을 찾으세요."
  • "로봇 팔을 제어하세요. 물체를 집으면 +1, 낭비한 1초마다 -0.01입니다."

실무에서 만드는 대부분의 시스템은 지도학습을 사용합니다. 비지도학습은 전처리(preprocessing)와 탐색(exploration)에 자주 쓰입니다. 강화학습은 게임 AI, 로보틱스, 언어 모델의 RLHF(Reinforcement Learning from Human Feedback)에 사용됩니다.

세 가지 큰 분류를 넘어서는 전략들

위 세 범주(category)는 깔끔해 보이지만, 실제 머신러닝에서는 종종 경계가 흐려집니다.

준지도학습(Semi-supervised learning) 은 소량의 레이블 데이터(labeled data)와 대량의 비레이블 데이터(unlabeled data)를 함께 사용합니다. 예를 들어 레이블이 붙은 의료 영상 100장과 레이블이 없는 영상 100,000장이 있을 수 있습니다. 대표적인 기법은 다음과 같습니다.

  • 레이블 전파(Label propagation): 유사한 데이터 포인트를 연결한 그래프(graph)를 만듭니다. 레이블은 레이블이 있는 노드(node)에서 그래프를 따라 이웃한 비레이블 노드로 퍼져 나갑니다.
  • 의사 레이블링(Pseudo-labeling): 레이블 데이터로 모델을 학습시키고, 그 모델로 비레이블 데이터의 레이블을 예측한 뒤, 전체 데이터로 다시 학습시킵니다. 모델이 스스로 자신의 학습 집합(training set)을 만들어 부트스트랩(bootstrap)하는 셈입니다.
  • 일관성 정규화(Consistency regularization): 입력과, 그 입력을 살짝 변형(perturb)한 버전에 대해 같은 예측을 내야 한다는 조건을 부여합니다. 레이블이 없어도 작동합니다.

자기지도학습(Self-supervised learning) 은 데이터 자체에서 지도 신호(supervision)를 만들어 냅니다. 사람의 레이블이 전혀 필요 없습니다. 모델은 데이터의 구조에서 자기 자신의 예측 과제(prediction task)를 만들어 냅니다.

  • 마스킹 언어 모델링(Masked language modeling, BERT): 문장에서 단어의 15%를 가리고, 모델이 가려진 단어를 예측하도록 합니다. "레이블"은 원본 텍스트에서 옵니다.
  • 대조 학습(Contrastive learning, SimCLR): 이미지 하나에서 증강(augmented) 버전 두 개를 만듭니다. 같은 이미지에서 나온 두 버전은 가깝게, 다른 이미지의 증강 버전과는 구분되도록 학습시킵니다.
  • 다음 토큰 예측(Next-token prediction, GPT): 앞에 나온 단어가 주어졌을 때 다음 단어를 예측합니다. 모든 텍스트 문서가 학습 예시가 됩니다.

이들은 세 가지 큰 분류와 별개의 범주라기보다, 지도 아이디어와 비지도 아이디어를 섞은 전략에 가깝습니다. 자기지도학습은 엄밀히 말하면 지도학습입니다. 모델이 무언가를 예측하기 때문입니다. 다만 레이블이 사람이 아니라 자동으로 생성된다는 점이 다릅니다.

분류와 회귀(Classification vs Regression)

지도학습의 두 가지 주요 과제입니다.

항목분류(Classification)회귀(Regression)
출력이산 범주(discrete category)연속적인 숫자(continuous number)
예시"이 이메일은 스팸인가?""주택 가격은 얼마인가?"
출력 공간{cat, dog, bird}임의의 실수
손실 함수교차 엔트로피(cross-entropy), 정확도(accuracy)평균 제곱 오차(mean squared error), 평균 절대 오차(MAE)
결정클래스 사이의 경계(boundary)데이터에 들어맞는 곡선(curve)

분류는 "어느 범주인가?"라는 질문에 답합니다. 회귀는 "얼마인가?"라는 질문에 답합니다.

어떤 문제는 두 방식 중 어느 쪽으로도 형식화(frame)할 수 있습니다. 주식이 오를지 내릴지 예측하면 분류이고, 정확한 가격을 예측하면 회귀입니다.

머신러닝 작업 흐름(ML workflow)

모든 머신러닝 프로젝트는 알고리즘과 무관하게 같은 파이프라인(pipeline)을 따릅니다.

flowchart LR
    A[Collect Data] --> B[Clean & Explore]
    B --> C[Feature Engineering]
    C --> D[Split Data]
    D --> E[Train Model]
    E --> F[Evaluate]
    F -->|Not good enough| C
    F -->|Good enough| G[Deploy]
    G --> H[Monitor]
    H -->|Performance drops| A

데이터 수집(Collect Data): 원시 데이터(raw data)를 모읍니다. 데이터는 많을수록 좋지만, 양보다 품질이 더 중요합니다.

정제 및 탐색(Clean & Explore): 결측값(missing value)을 처리하고, 중복(duplicate)을 제거하고, 분포(distribution)를 시각화하고, 이상값(anomaly)을 찾습니다. 이 단계가 전체 프로젝트 시간의 60-80%를 차지하는 경우가 많습니다.

특성 공학(Feature Engineering): 원시 데이터를 모델이 사용할 수 있는 특성(feature)으로 변환합니다. 날짜를 요일로 바꾸고, 수치형 열(column)을 정규화(normalize)하고, 범주형 변수(categorical variable)를 인코딩(encode)합니다. 좋은 특성이 화려한 알고리즘보다 더 중요합니다.

데이터 분할(Split Data): 학습 집합(training set), 검증 집합(validation set), 시험 집합(test set)으로 나눕니다. 모델은 학습 데이터로 학습시키고, 검증 데이터로 하이퍼파라미터(hyperparameter)를 조정(tune)하며, 시험 데이터로 최종 성능을 보고합니다.

모델 학습(Train Model): 학습 데이터를 알고리즘에 넣습니다. 알고리즘은 손실 함수를 최소화(minimize)하도록 내부 매개변수를 조정합니다.

평가(Evaluate): 검증/시험 데이터로 성능을 측정합니다. 성능이 충분하지 않으면 특성, 알고리즘, 하이퍼파라미터를 바꿔 다시 시도합니다.

배포(Deploy): 모델을 운영 환경(production)에 올려 새로운 데이터에 예측을 만들게 합니다.

모니터링(Monitor): 시간이 지남에 따라 성능을 추적합니다. 데이터 분포는 바뀌고(데이터 드리프트, data drift), 모델은 점차 낡습니다(degrade). 성능이 떨어지면 다시 학습시킵니다.

학습, 검증, 시험 분할(Training, validation, test split)

초보자가 가장 자주 틀리는 중요한 개념입니다. 모델은 학습 중에 본 적이 없는 데이터로 평가해야 합니다. 그렇지 않으면 학습(learning)이 아니라 암기(memorization)를 측정하게 됩니다.

flowchart LR
    subgraph Dataset["Full Dataset (100%)"]
        direction LR
        TR["Training Set (70%)"]
        VA["Validation Set (15%)"]
        TE["Test Set (15%)"]
    end

    TR -->|Train model| M[Model]
    M -->|Tune hyperparameters| VA
    VA -->|Final evaluation| TE
분할목적사용 시점일반적인 비율
학습(Training)모델이 이 데이터에서 학습합니다.학습 중60-80%
검증(Validation)하이퍼파라미터를 조정하고 모델을 비교합니다.매 학습 후10-20%
시험(Test)최종적으로 편향 없는 성능을 추정합니다.작업이 끝나는 시점에 단 한 번10-20%

시험 집합은 신성한 영역입니다. 정확히 한 번만 봅니다. 시험 성능을 보고 모델을 계속 조정하면, 사실상 시험 집합으로 학습하는 셈이 되어 보고된 수치는 의미를 잃습니다.

데이터가 적을 때는 k-겹 교차 검증(k-fold cross-validation)을 사용합니다. 데이터를 k 부분으로 나누고, k-1 부분으로 학습한 뒤 남은 한 부분으로 검증하는 과정을 돌려 가며 결과를 평균 냅니다.

과적합과 과소적합(Overfitting vs Underfitting)

flowchart LR
    subgraph UF["Underfitting"]
        U1["Model too simple"]
        U2["High bias"]
        U3["Misses patterns"]
    end

    subgraph GF["Good Fit"]
        G1["Right complexity"]
        G2["Balanced"]
        G3["Generalizes well"]
    end

    subgraph OF["Overfitting"]
        O1["Model too complex"]
        O2["High variance"]
        O3["Memorizes noise"]
    end

    UF -->|Increase complexity| GF
    GF -->|Too much complexity| OF

과소적합(Underfitting): 모델이 데이터의 패턴을 포착하기에는 너무 단순한 상태입니다. 곡선 관계에 직선을 맞추려는 경우가 여기에 해당합니다. 학습 오차도 높고 시험 오차도 높습니다.

과적합(Overfitting): 모델이 너무 복잡해서 학습 데이터와 그 잡음(noise)까지 외워 버린 상태입니다. 모든 학습 포인트를 지나는 들쭉날쭉한 곡선이 새로운 데이터에서는 실패하는 경우입니다. 학습 오차는 낮지만 시험 오차는 높습니다.

적절한 적합(Good fit): 모델이 잡음을 외우지 않으면서 진짜 패턴을 포착하는 상태입니다. 학습 오차와 시험 오차가 모두 적당히 낮습니다.

과적합의 징후:

  • 학습 정확도가 검증 정확도보다 훨씬 높습니다.
  • 모델이 학습 데이터에서는 잘 작동하지만 새로운 데이터에서는 형편없이 작동합니다.
  • 학습 데이터를 더 추가하면 성능이 좋아집니다. 모델이 학습한 게 아니라 외우고 있었다는 뜻입니다.

과적합을 고치는 방법:

  • 학습 데이터를 더 모읍니다.
  • 모델 복잡도를 줄입니다. 매개변수 수를 줄이거나 구조(architecture)를 단순화합니다.
  • 정규화(regularization)를 사용합니다. 큰 가중치에 벌점을 추가합니다.
  • 드롭아웃(dropout)을 사용합니다. 학습 중 뉴런(neuron)을 무작위로 0으로 만듭니다.
  • 조기 종료(early stopping)를 사용합니다. 검증 오차가 증가하기 시작하면 학습을 멈춥니다.

과소적합을 고치는 방법:

  • 더 복잡한 모델을 사용합니다.
  • 특성을 더 추가합니다.
  • 정규화를 줄입니다.
  • 더 오래 학습시킵니다.

편향-분산 균형(Bias-Variance Tradeoff)

과적합과 과소적합 뒤에 있는 수학적 틀(framework)입니다.

편향(Bias): 모델의 잘못된 가정에서 오는 오차입니다. 실제 관계가 비선형(nonlinear)인데 선형 모델을 쓰면 편향이 큽니다. 큰 편향은 과소적합으로 이어집니다.

분산(Variance): 학습 데이터의 작은 변동에 민감해서 생기는 오차입니다. 분산이 큰 모델은 학습 데이터를 조금만 다르게 잡아도 예측이 크게 달라집니다. 큰 분산은 과적합으로 이어집니다.

모델 복잡도편향분산결과
너무 낮음(곡선 데이터에 선형 모델)작음과소적합
적절함중간중간좋은 일반화
너무 높음(데이터 포인트 10개에 20차 다항식)작음과적합

전체 오차 = 편향^2 + 분산 + 줄일 수 없는 잡음(irreducible noise)

줄일 수 없는 잡음은 말 그대로 줄일 수 없습니다. 데이터 자체에 들어 있는 무작위성(randomness)입니다. 목표는 편향^2 + 분산이 최소가 되는 최적점(sweet spot)을 찾는 것입니다.

공짜 점심은 없다 정리(No Free Lunch Theorem)

모든 문제에서 가장 잘 작동하는 단일 알고리즘은 없습니다. 어떤 종류의 문제에서 잘 작동하는 알고리즘은 다른 종류의 문제에서는 형편없이 작동할 수 있습니다. 그래서 데이터 과학자는 여러 알고리즘을 시도하고 결과를 비교합니다.

실무에서 선택은 다음 요소에 따라 달라집니다.

  • 데이터가 얼마나 많은가
  • 특성이 얼마나 많은가
  • 관계가 선형인가 비선형인가
  • 해석 가능성(interpretability)이 필요한가
  • 사용할 수 있는 연산 자원(compute)이 얼마나 되는가

머신러닝을 쓰지 말아야 할 때

머신러닝은 강력하지만 항상 올바른 도구는 아닙니다. 모델부터 꺼내기 전에 정말로 필요한지 확인해야 합니다.

다음 경우에는 머신러닝을 쓰지 않습니다.

  • 규칙이 단순하고 잘 정의되어 있는 경우. 세금 계산, 정렬 알고리즘, 단위 변환처럼 if-문 몇 개로 로직을 쓸 수 있다면, 모델은 이점 없이 복잡도만 더합니다.
  • 데이터가 없거나 너무 적은 경우. 머신러닝은 예시에서 학습합니다. 데이터 포인트가 10개뿐이라면 의미 있는 모델을 학습시킬 수 없습니다. 먼저 데이터를 모읍니다.
  • 틀렸을 때 비용이 치명적이고 정확성이 보장되어야 하는 경우. 의료 투약량 계산, 원자로 제어, 암호 검증 같은 경우입니다. 머신러닝 모델은 확률적(probabilistic)이며 때로는 틀립니다. "가끔 틀려도 되는" 것이 허용되지 않으면 결정론적 방법을 사용합니다.
  • 조회 표(lookup table)나 휴리스틱(heuristic)으로 해결되는 경우. 단순한 임계값이나 표가 99%의 경우를 처리해 준다면, 머신러닝은 유지 비용만 늘릴 수 있습니다.
  • 결정을 설명할 수 없는데 설명 가능성(explainability)이 필수인 경우. 대출, 보험, 형사 사법 같은 규제가 있는 산업에서는 모든 결정에 대한 충분한 설명이 필요할 수 있습니다. 선형 회귀나 작은 결정 트리(decision tree)처럼 해석 가능한 모델도 있지만, 대부분의 모델은 그렇지 않습니다.
  • 문제가 재학습보다 빨리 변하는 경우. 규칙이 매일 바뀌는데 다시 학습시키는 데 일주일이 걸리면 모델은 항상 뒤처져 있습니다.

다음 결정 흐름도를 참고합니다.

flowchart TD
    A["Do you have data?"] -->|No| B["Collect data first or use rules"]
    A -->|Yes| C["Can you write the rules explicitly?"]
    C -->|"Yes, and they are simple"| D["Use rules. Skip ML."]
    C -->|"No, or they are too complex"| E["Is the cost of errors acceptable?"]
    E -->|"No, need guaranteed correctness"| F["Use deterministic methods"]
    E -->|Yes| G["Do you need explainability?"]
    G -->|"Yes, strictly"| H["Use interpretable models only"]
    G -->|"No, or partially"| I["Use ML"]
    I --> J["Do you have enough labeled data?"]
    J -->|Yes| K["Supervised learning"]
    J -->|"Some labels"| L["Semi-supervised learning"]
    J -->|"No labels"| M["Unsupervised or self-supervised"]

만들어 보기

code/ml_intro.py는 가장 단순한 머신러닝 알고리즘인 최근접 중심 분류기를 밑바닥부터 구현합니다. 핵심 아이디어는 데이터에서 학습한 뒤 새로운 데이터에 대해 예측하는 것입니다.

Step 1: 최근접 중심 분류기(Nearest Centroid Classifier) 직접 구현하기

최근접 중심 분류기는 학습 데이터에서 각 클래스의 중심, 즉 평균을 계산합니다. 예측할 때는 새로운 포인트를 가장 가까운 중심의 클래스로 배정(assign)합니다.

class NearestCentroid:
    def fit(self, X, y):
        self.classes = np.unique(y)
        self.centroids = np.array([
            X[y == c].mean(axis=0) for c in self.classes
        ])

    def predict(self, X):
        distances = np.array([
            np.sqrt(((X - c) ** 2).sum(axis=1))
            for c in self.centroids
        ])
        return self.classes[distances.argmin(axis=0)]

이것이 알고리즘의 전부입니다. fit은 평균 두 개를 계산합니다. predict는 거리를 계산합니다. 경사 하강법(gradient descent)도, 반복(iteration)도, 하이퍼파라미터도 없습니다.

Step 2: 합성 데이터(Synthetic Data)로 학습시키기

조금 겹치는 두 클래스를 가진 2차원 분류 데이터셋을 생성합니다. 중심 분류기는 두 클래스 중심 사이에 선형 결정 경계(linear decision boundary)를 그립니다.

rng = np.random.RandomState(42)
X_class0 = rng.randn(100, 2) + np.array([1.0, 1.0])
X_class1 = rng.randn(100, 2) + np.array([-1.0, -1.0])
X = np.vstack([X_class0, X_class1])
y = np.array([0] * 100 + [1] * 100)

Step 3: 베이스라인과 비교하기

모든 머신러닝 모델은 사소한 베이스라인(trivial baseline)과 비교해야 합니다. 여기서 베이스라인은 무작위 클래스를 예측합니다. 머신러닝 모델이 무작위 추측을 이기지 못한다면 어딘가 잘못된 것입니다.

baseline_preds = rng.choice([0, 1], size=len(y_test))
baseline_acc = np.mean(baseline_preds == y_test)

중심 분류기는 이 깔끔한 데이터셋에서 약 90% 이상의 정확도를 얻어야 합니다. 무작위 베이스라인은 약 50% 정도입니다.

왜 중요한가

최근접 중심 분류기는 매우 단순합니다. 하이퍼파라미터도, 반복도, 경사 하강법도 없습니다. 그런데도 모든 머신러닝의 기본 패턴을 그대로 보여줍니다.

  1. 학습 데이터에서 표현(representation)을 학습합니다. 여기서는 중심점(centroid)입니다.
  2. 그 표현으로 새로운 데이터를 예측합니다. 여기서는 가장 가까운 거리입니다.
  3. 베이스라인과 비교해 평가합니다. 여기서는 무작위 추측입니다.

로지스틱 회귀(logistic regression)부터 트랜스포머(Transformer)까지 모든 머신러닝 알고리즘은 같은 3단계 패턴을 따릅니다. 표현은 더 복잡해지지만 작업 흐름은 같습니다.

Step 4: 중심 분류기가 못하는 것

최근접 중심 분류기는 각 클래스가 하나의 덩어리(blob)를 이룬다고 가정합니다. 선형 결정 경계를 그립니다. 다음 경우에는 실패합니다.

  • 한 클래스가 여러 군집(cluster)을 가질 때. 예를 들어 숫자 "1"은 여러 방식으로 쓰일 수 있습니다.
  • 결정 경계가 비선형일 때. 예를 들어 한 클래스가 다른 클래스를 감싸는 경우입니다.
  • 특성의 척도(scale)가 크게 다를 때. 거리는 가장 큰 척도의 특성에 좌우됩니다.

이런 한계는 앞으로 배울 다른 알고리즘의 동기가 됩니다. K-최근접 이웃(K-nearest neighbors)은 여러 군집을 다룹니다. 결정 트리는 비선형 경계를 다룹니다. 특성 스케일링(feature scaling)은 척도 문제를 해결합니다. 각 강의는 이전 강의의 한계 위에 쌓입니다.

사용해 보기

scikit-learnNearestCentroid와 합성 데이터 생성기를 제공합니다.

from sklearn.neighbors import NearestCentroid
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(
    n_samples=500, n_features=2, n_redundant=0,
    n_clusters_per_class=1, random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

clf = NearestCentroid()
clf.fit(X_train, y_train)
print(f"Accuracy: {clf.score(X_test, y_test):.3f}")

산출물 만들기

이 강의의 최종 산출물은 outputs/prompt-ml-problem-framer.md입니다. 이 프롬프트(prompt)는 모호한 비즈니스 문제를 구체적인 머신러닝 과제로 바꿔 줍니다. "이탈(churn)을 줄이고 싶다" 또는 "다음 분기 수요를 예측하고 싶다"와 같은 문제 설명을 입력하면, 학습 유형, 예측 대상(prediction target), 후보 특성, 성공 지표(success metric), 베이스라인, 데이터 누수(data leakage)나 클래스 불균형(class imbalance) 같은 함정을 정리해 줍니다. 잘못된 문제를 만드는 일을 피하기 위해 머신러닝 프로젝트 시작 시점에 사용합니다.

핵심 용어

용어흔한 설명실제 의미
모델(Model)"그 AI"학습 가능한 매개변수를 가지고 입력을 출력으로 대응시키는 수학적 함수입니다.
학습(Training)"AI를 가르치는 것"예측이 알려진 출력과 맞도록 모델 매개변수를 조정하는 최적화 과정입니다.
특성(Feature)"입력 열"모델이 예측에 사용하는, 데이터에서 측정 가능한 속성입니다.
레이블(Label)"정답"학습 예시의 알려진 출력으로, 오차 신호(error signal)를 계산하는 데 사용됩니다.
하이퍼파라미터(Hyperparameter)"조정하는 설정"학습 전에 정해 두고 학습 과정을 제어하는 매개변수입니다. 학습률, 층 수 등이 있습니다.
손실 함수(Loss function)"모델이 얼마나 틀렸는지"예측과 실제 출력 사이의 격차를 재는 함수이며, 학습은 이 값을 최소화하려 합니다.
과적합(Overfitting)"시험 문제를 외웠다"모델이 일반적인 패턴 대신 학습 데이터의 잡음을 학습해, 새로운 데이터에서 실패하는 현상입니다.
과소적합(Underfitting)"아무것도 못 배웠다"모델이 너무 단순해서 데이터의 진짜 패턴을 포착하지 못하는 현상입니다.
일반화(Generalization)"새로운 데이터에서도 잘 작동한다"학습에 사용하지 않은 데이터에 대해 모델이 정확한 예측을 만들어 내는 능력입니다.
교차 검증(Cross-validation)"여러 조각으로 시험하기"데이터를 학습/시험 분할로 반복해서 나누고 결과를 평균 내어 더 안정적인 성능 추정을 얻는 방법입니다.
정규화(Regularization)"가중치를 작게 유지하기"손실 함수에 벌점 항을 더해 지나치게 복잡한 모델을 억제하는 방법입니다.
데이터 드리프트(Data drift)"세상이 바뀌었다"들어오는 데이터의 통계적 분포가 시간이 지남에 따라 변해 모델 성능이 떨어지는 현상입니다.

연습문제

  1. 쉬움 — Iris나 Titanic 같은 임의의 데이터셋을 고릅니다. 학습/검증/시험을 70/15/15로 나눕니다. 시험 집합에서 하이퍼파라미터를 조정하면 안 되는 이유를 설명합니다.
  2. 중간 — 실제 세상의 문제 세 가지를 나열합니다. 각 문제가 분류, 회귀, 군집화(clustering) 중 무엇인지, 지도학습인지 비지도학습인지 식별합니다.
  3. 어려움 — 어떤 모델이 학습 데이터에서는 99% 정확도, 시험 데이터에서는 60% 정확도를 얻었습니다. 문제를 진단하고 이를 고치기 위해 시도할 세 가지 방법을 나열합니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

ml intro
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

prompt-ml-problem-framer

Frame a real-world business problem as a machine learning task

Prompt

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.어떤 모델이 학습 데이터에서는 98% 정확도, 시험 데이터에서는 55% 정확도를 얻었습니다. 이는 무엇의 예시인가요?

2.전자상거래 사이트가 미리 정해진 레이블 없이 구매 행동을 기준으로 고객을 묶음(segment)으로 나누고자 합니다. 이는 어떤 머신러닝 유형인가요?

3.다음 중 머신러닝(machine learning)을 사용하기에 적절하지 않은 상황은 무엇인가요?

0/3 답변 완료