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": "오렌지"}, # ... 수천 개의 예시 ]