콘텐츠로 이동

Chapter 18: 머신러닝, 이게 뭐길래?

한 줄 요약: 규칙을 직접 짜는 대신, 데이터에서 패턴을 찾아 스스로 배우게 하는 것이 머신러닝이야.


🎯 이 장에서 배우는 것

  • [ ] 머신러닝이 일상에서 어떻게 사용되는지 3가지 이상 설명할 수 있다
  • [ ] 규칙 기반 프로그래밍과 머신러닝의 차이를 명확히 구분할 수 있다
  • [ ] 머신러닝의 3가지 유형(분류, 회귀, 군집)을 실제 예시와 함께 설명할 수 있다
  • [ ] 어떤 문제에 어떤 유형의 머신러닝이 적합한지 판단할 수 있다

💡 왜 이걸 배우나요?

이미 머신러닝 속에서 살고 있어

아침에 눈을 뜨면 스마트폰이 "오늘 비 올 확률 80%"라고 알려줘. 유튜브를 열면 네가 좋아할 만한 영상이 딱 나와 있고, 인스타그램은 친구 얼굴에 자동으로 태그를 달아줘. 스팸 메일은 알아서 걸러지고, 영어 문장을 넣으면 한국어로 번역해줘.

이 모든 게 머신러닝이야.

🌅 아침 6시
┌─────────────────────────────────────────────────────┐
│  📱 "오늘 비 올 확률 80%"        ← 날씨 예측 ML    │
│  🎵 "좋아할 만한 노래 추천"      ← 추천 시스템 ML  │
│  📧 "스팸 메일 3개 차단됨"       ← 스팸 필터 ML    │
│  📸 "사진에서 친구 5명 인식"     ← 얼굴 인식 ML    │
│  🌐 "영어 → 한국어 번역 완료"    ← 번역 ML        │
└─────────────────────────────────────────────────────┘
                    하루에 이렇게나 많이!

왜 굳이 배워야 해?

"그냥 쓰면 되지, 왜 원리를 알아야 해?"

좋은 질문이야. 세 가지 이유가 있어:

1. 블랙박스를 열어보는 눈 - AI가 추천한 걸 무조건 믿어야 할까? - "왜 이걸 추천했지?" 이해할 수 있어야 해

2. 문제를 새로운 시각으로 보는 힘 - "이 문제, 컴퓨터가 학습할 수 있겠는데?" - 해결책의 범위가 넓어져

3. AI 시대의 기본 소양 - 코딩을 몰라도 컴퓨터를 쓰듯 - ML을 몰라도 AI를 쓸 수 있지만 - 알면 100배 잘 쓸 수 있어


📚 핵심 개념

개념 1: 머신러닝이란?

🎭 비유로 시작

머신러닝은 마치 "시행착오로 배우는 것"과 같아요.

요리를 배운다고 생각해봐.

방법 1: 레시피북 (규칙 기반)
┌─────────────────────────────────────────┐
│  1. 양파를 깍둑썰기 한다              │
│  2. 팬에 기름을 두른다                │
│  3. 중불에서 5분간 볶는다             │
│  4. 소금 1스푼을 넣는다               │
│  ...정확히 따라하면 됨                │
└─────────────────────────────────────────┘

방법 2: 할머니에게 배우기 (머신러닝)
┌─────────────────────────────────────────┐
│  할머니: "이 정도로 볶아봐"           │
│  나: (볶아본다)                        │
│  할머니: "조금 더"                     │
│  나: (더 볶는다)                       │
│  할머니: "그래, 이 색깔이야!"         │
│  나: (아, 이 색깔이구나! 기억!)       │
│  ...경험에서 패턴을 익힘              │
└─────────────────────────────────────────┘

레시피북은 모든 상황에 맞는 규칙을 미리 정해둔 것이야. 할머니에게 배우는 건 여러 번 해보면서 감을 익히는 것이고.

머신러닝은 컴퓨터가 할머니에게 배우듯 데이터에서 패턴을 스스로 찾아내는 거야.

📐 정확한 정의

머신러닝(Machine Learning)이란:

명시적으로 프로그래밍하지 않아도, 데이터로부터 패턴을 학습하여 예측이나 결정을 할 수 있게 하는 인공지능의 한 분야

쉽게 풀면: - 명시적으로 프로그래밍하지 않아도 = 규칙을 일일이 코드로 안 짜도 - 데이터로부터 패턴을 학습 = 예시를 많이 보여주면 알아서 규칙을 찾아냄 - 예측이나 결정 = 새로운 데이터가 왔을 때 판단할 수 있음

🌰 예시로 확인

스팸 메일 필터의 경우:

전통적 방법 (규칙 기반):
┌────────────────────────────────────────────────────┐
│  IF "당첨" in 제목 THEN 스팸                       │
│  IF "무료" in 본문 THEN 스팸                       │
│  IF 발신자 == "unknown" THEN 스팸                 │
│  IF "클릭하세요" in 본문 THEN 스팸                │
│  ...규칙을 계속 추가해야 함                       │
│  ...스패머가 "당.첨"이라고 쓰면? 뚫림!           │
└────────────────────────────────────────────────────┘

머신러닝 방법:
┌────────────────────────────────────────────────────┐
│  학습 데이터: 스팸 10만 개 + 정상 메일 10만 개    │
│        ↓                                           │
│  컴퓨터: "음, 스팸은 이런 패턴이 있구나..."       │
│        - 특정 단어 조합                            │
│        - 발신 시간대                               │
│        - 링크 개수                                 │
│        - 문장 구조                                 │
│        ...수천 가지 특징을 스스로 파악            │
│        ↓                                           │
│  새 메일: "당.첨.되.셨.습.니.다"                  │
│  컴퓨터: "스팸 확률 98%" ← 우회해도 잡아냄!       │
└────────────────────────────────────────────────────┘

쉽게 말하면: 규칙을 우리가 정해주는 대신, 데이터를 보여주고 컴퓨터가 스스로 규칙을 찾게 하는 거야.


개념 2: 규칙 기반 vs 머신러닝

🎭 비유로 시작

규칙 기반은 "매뉴얼대로", 머신러닝은 "경험으로"야.

카페 알바를 생각해봐:

첫날 (규칙 기반):
┌─────────────────────────────────────────┐
│  매니저: "아메리카노 주문 → 에스프레소  │
│          2샷 + 물 180ml"                │
│  나: (매뉴얼대로 만든다)                │
│                                         │
│  손님: "연하게 해주세요"                │
│  나: "...매뉴얼에 없는데요?"            │
└─────────────────────────────────────────┘

3개월 후 (학습됨):
┌─────────────────────────────────────────┐
│  손님: "연하게 해주세요"                │
│  나: "1샷으로 드릴까요?"               │
│                                         │
│  손님: "저번에 먹은 그거요"             │
│  나: "바닐라라떼 아이스, 샷 추가요?"   │
│                                         │
│  ...경험에서 배운 '감'                 │
└─────────────────────────────────────────┘

📐 정확한 차이

구분 규칙 기반 머신러닝
누가 규칙을 만드나 사람이 직접 컴퓨터가 데이터에서 추출
새로운 상황 규칙 추가 필요 자동 대응 가능
규칙이 복잡할 때 코드가 엄청 길어짐 데이터만 더 주면 됨
왜 그렇게 판단했는지 명확함 블랙박스일 수 있음
필요한 것 도메인 지식 양질의 데이터
       규칙 기반                        머신러닝

    [입력] ──→ [규칙들] ──→ [출력]     [입력] ──→ [학습된 모델] ──→ [출력]
                  ↑                                    ↑
               사람이 작성                         데이터에서 학습

    "이러면 저렇게 해"                 "이런 패턴이 있구나"

🌰 코드로 비교

문제: 과일 이미지를 보고 사과인지 바나나인지 구분하기

# === 규칙 기반 방식 ===
# 사람이 직접 "빨간색이면 사과" 같은 규칙을 작성

def classify_fruit_rule_based(color, shape, size):
    """규칙 기반 과일 분류"""

    # 규칙 1: 색상으로 판단
    if color == "빨강" or color == "초록":
        if shape == "둥근":
            return "사과"

    # 규칙 2: 바나나 판단
    if color == "노랑":
        if shape == "길쭉한":
            return "바나나"

    # 규칙 3: 애매한 경우
    if color == "노랑" and shape == "둥근":
        # 노란 사과? 아니면...?
        if size == "작은":
            return "레몬"  # 또 다른 규칙 필요!
        else:
            return "사과"  # 확실하지 않음

    # 규칙 4, 5, 6... 계속 추가해야 함
    return "모르겠음"

# 테스트
print(classify_fruit_rule_based("빨강", "둥근", "중간"))  # 사과
print(classify_fruit_rule_based("노랑", "길쭉한", "중간"))  # 바나나
print(classify_fruit_rule_based("노랑", "둥근", "작은"))  # 레몬
print(classify_fruit_rule_based("주황", "둥근", "큰"))    # 모르겠음 ← 오렌지인데!
실행 결과:
사과
바나나
레몬
모르겠음

문제점이 보여? - 오렌지가 나오면? → 규칙 추가 - 망고가 나오면? → 또 규칙 추가 - 덜 익은 바나나(초록색)는? → 또또 규칙 추가 - 규칙이 수백 개가 되면? → 관리 불가능!

```python

=== 머신러닝 방식 (개념적 코드) ===

데이터를 주고 컴퓨터가 스스로 패턴을 찾게 함

1. 데이터 준비 (예시를 많이 보여줌)

training_data = [ {"image": "사과1.jpg", "label": "사과"}, {"image": "사과2.jpg", "label": "사과"}, {"image": "바나나1.jpg", "label": "바나나"}, {"image": "바나나2.jpg", "label": "바나나"}, {"image": "오렌지1.jpg", "label": "오렌지"}, # ... 수천 개의 예시 ]

2. 학습 (컴퓨터가 스스로 패턴 찾기)

model = train(training_data)

내부적으로: "아, 사과는 이런 특징이 있구나..."