끄적이는 개발노트

260609_강의 정리 (나이브 베이즈) 본문

머신러닝

260609_강의 정리 (나이브 베이즈)

크런키스틱 2026. 6. 9. 14:13
728x90

 

machine learning · 확률 기반 분류
나이브 베이즈 알고리즘 — 베이즈 정리로 스팸을 걸러내는 원리
  • 사전확률 · 우도 · 사후확률의 의미와 역할
  • 베이즈 정리로 "할인 → 스팸 확률" 계산하는 과정
  • scikit-learn의 5가지 Naive Bayes 모델 비교
🤖
1. 머신러닝이란 — 나이브 베이즈가 왜 ML인가?

"사람이 정답을 알려주면, 모델이 패턴을 찾아 새 데이터를 예측함"

  • 사람이 메일마다 스팸 / 정상을 미리 표시해 둠 (= 라벨링)
  • 모델은 라벨된 데이터에서 단어 패턴을 학습함
  • 새 메일이 들어오면 학습한 패턴으로 스팸 여부를 예측함
사람이 정답 라벨링
모델이 패턴 학습
새 데이터 예측
핵심
· Naive Bayes는 대표적인 지도학습(Supervised Learning) 알고리즘임
· "지도"의 의미 = 정답(라벨)이 있는 데이터로 가르치는 것
📊
2. 조건부 확률 — "A가 일어났을 때 B의 확률"

어떤 사건이 이미 발생한 상황을 전제로, 다른 사건이 일어날 확률을 계산하는 것

  • P(B|A) 라고 씀 — "A가 주어졌을 때 B의 확률" 을 의미함
  • 세로 막대 기호 | 는 "given" = "~가 주어졌을 때" 로 읽음
  • 전체 경우 중 A가 발생한 상황만 좁혀서 보는 것임
P(B|A) = P(A∩B) / P(A)
P(B|A)
A가 일어났을 때 B가 일어날 확률 (= 우리가 알고 싶은 값)
→ "할인이 있을 때 스팸일 확률"
P(A∩B)
A와 B가 동시에 일어날 확률 (= 결합확률)
→ "할인도 있고 스팸이기도 한 메일의 비율"
P(A)
A가 일어날 확률 (= 분모, 전체 기준)
→ "전체 메일 중 할인이 포함된 메일 비율"
💡 새 개념
결합확률 Joint Probability
  • 두 사건이 동시에 일어날 확률
  • 표기: P(A∩B) 또는 P(A, B)
메일 100개 중 "할인도 있고 스팸이기도 한" 메일이 4개 → P(DISCOUNT∩SPAM) = 4/100
주변확률 Marginal Probability
  • 다른 조건을 무시하고 한 사건만 볼 확률
  • 표에서 "합계" 열에 해당함
메일 100개 중 스팸이 20개 → P(SPAM) = 20/100 = 0.2
🔢
3. 베이즈 정리 — 4가지 요소 이해하기

"새 증거(단어)가 생겼을 때, 기존 믿음(확률)을 어떻게 업데이트하는가"

P(SPAM|DISCOUNT) = P(DISCOUNT|SPAM) × P(SPAM) / P(DISCOUNT)
P(SPAM|DISCOUNT)
사후확률 (Posterior) — 우리가 최종으로 알고 싶은 값
→ "할인이 있는 메일이 스팸일 확률"
P(DISCOUNT|SPAM)
우도 (Likelihood) — 스팸이라는 걸 이미 알 때, 할인이 등장할 확률
→ "스팸 메일 20개 중 할인이 있는 건 4개 → 4/20 = 0.2"
P(SPAM)
사전확률 (Prior) — 아무 단어 정보 없이, 그냥 스팸일 확률
→ "전체 100개 중 스팸 20개 → P(SPAM) = 0.2"
P(DISCOUNT)
증거 / 정규화 상수 (Evidence) — 전체 메일에서 할인이 등장할 확률
→ "100개 중 5개에 할인 포함 → P(DISCOUNT) = 5/100 = 0.05"
💡 새 개념
사전확률 Prior Probability
  • 새 증거(단어)를 보기 에 갖는 초기 믿음
  • 데이터 전체 분포에서 계산함
메일함을 열기 전 "이 메일이 스팸일 확률" — 전체 중 스팸 비율(20%)로 추정
우도 Likelihood
  • 클래스(스팸/정상)를 이미 알고 있을 때 특정 단어가 나타날 확률
  • "스팸이면 할인이 얼마나 자주 쓰이냐"를 측정함
스팸 20개 중 할인이 포함된 건 4개 → P(DISCOUNT|SPAM) = 4/20 = 0.2
사후확률 Posterior Probability
  • 증거를 본 후 업데이트된 확률 — 최종 예측값
  • 사전확률 × 우도를 증거로 나눠서 계산함
할인을 발견한 후 "이 메일이 스팸일 확률" = (0.2 × 0.2) / 0.05 = 0.8 = 80%
정규화 상수 Normalising Constant / Evidence
  • 확률의 합이 1이 되도록 눈금을 맞추는 역할
  • 스팸 / 정상을 비교할 때 분모가 같으므로 생략 가능함
P(DISCOUNT) = 5/100 — 스팸이든 아니든 할인 등장 빈도
할인 계산 예시
· P(SPAM) = 20/100 = 0.2
· P(DISCOUNT|SPAM) = 4/20 = 0.2
· P(DISCOUNT) = 5/100 = 0.05
· P(SPAM|DISCOUNT) = (0.2 × 0.2) / 0.05 = 0.8 = 80%
🔄
4. 나이브 베이즈 예측 흐름 — 6단계

새 메일을 받았을 때, 모델이 스팸 여부를 판단하는 순서

1
라벨링 — 사람이 정답을 알려줌
메일마다 스팸 / 정상(Ham)을 사람이 직접 표시함. 이것이 모델 학습의 출발점
2
사전확률 계산 — 아무 정보 없을 때 스팸 확률
전체 100개 중 스팸 20개 → P(SPAM) = 0.2 / 정상 80개 → P(HAM) = 0.8
3
우도 계산 — 스팸 메일에서 단어 빈도 측정
스팸 20개 중 "할인" 등장 횟수 → P(DISCOUNT|SPAM) = 4/20 = 0.2
4
증거(주변확률) 계산 — 전체에서 단어 빈도
스팸/정상 구분 없이 전체 100개 중 "할인" 포함 5개 → P(DISCOUNT) = 5/100 = 0.05
5
목표 확인 — 방향 점검
"스팸일 때 할인 확률" ❌ 이 아니라, "할인이 있을 때 스팸 확률" ✅ 을 구하는 것
6
베이즈 정리 적용 — 최종 사후확률 계산
P(SPAM|DISCOUNT) = (0.2 × 0.2) / 0.05 = 0.8 → 스팸 확률 80%
비유로 이해하기
· 형사가 범인을 찾는 것과 같음
· 사전확률 = "이 동네 전과자 비율"
· 우도 = "전과자가 이 무기를 쓸 확률"
· 사후확률 = "이 무기가 발견됐을 때 전과자 소행일 확률"
5. "Naive(순진한)" 가정 — 여러 단어가 있을 때

단어가 여러 개일 때, 계산을 단순화하는 핵심 가정

  • 실제 메일에는 "할인" 하나가 아니라 수십 개의 단어가 있음
  • 각 단어가 모두 서로 독립이라고 가정함 → 이것이 "Naive(순진한)" 이유
  • 독립 가정 덕분에 각 단어의 확률을 그냥 곱하면
P(yes | sunny∩hot∩high∩windy)
=
P(sunny|yes) × P(hot|yes) × P(high|yes) × P(windy|yes) × P(yes)
P(sunny) × P(hot) × P(high) × P(windy)
분자 (위)
각 특성이 "yes 클래스"에서 등장할 확률을 모두 곱함
→ 독립 가정 덕분에 곱셈으로 처리 가능
분모 (아래)
정규화 상수 — yes / no 비교 시 동일하므로 생략하기도 함
주의 — Naive 가정의 한계
· 현실에서 단어들은 완전히 독립이 아님 ("무료" + "클릭" 은 함께 등장하는 경향)
· 그럼에도 실제 스팸 필터링에서 매우 잘 작동함 — 단순하지만 강력한 모델
🧪
6. scikit-learn의 Naive Bayes 모델 5가지

데이터 분포(숫자형 / 이진 / 범주형)에 따라 적합한 모델을 선택해야 함

모델 클래스 수학적 가정 데이터 타입 대표 사용처
GaussianNB 가우시안 정규분포 연속형 수치 키, 몸무게, 온도 등 실수 데이터
MultinomialNB 다항 분포 이산형 정수 텍스트 단어 빈도수, TF-IDF 정수값
BernoulliNB 베르누이 분포 이진 (0 / 1) 단어 포함 여부 (있다 / 없다)
ComplementNB 보완적 다항 분포 이산형 (불균형) 클래스 불균형 텍스트 데이터
CategoricalNB 범주형 다항 분포 명목형 / 범주형 색상, 지역, 등급 등 범주 변수
💡 새 개념 — 확률 분포
가우시안 분포 Gaussian / Normal Distribution
  • 평균을 중심으로 좌우 대칭인 종 모양 분포
  • 연속적인 실수값이 이 분포를 따른다고 가정함
사람 키 분포 → 대부분 170cm 근처, 멀어질수록 드묾
다항 분포 Multinomial Distribution
  • 여러 결과 중 각 결과가 나올 횟수를 다루는 분포
  • 단어 "할인"이 스팸 메일에서 몇 번 등장하는지 모델링
주사위 100번 던질 때 1~6 각각 몇 번 나왔는지 → 다항 분포
베르누이 분포 Bernoulli Distribution
  • 결과가 딱 두 가지(성공/실패, 0/1)인 분포
  • 단어가 "있다/없다" 로만 구분할 때 사용함
메일에 "할인" 단어가 있으면 1, 없으면 0
모델 선택 기준
· 연속형 수치 데이터 → GaussianNB
· 단어 빈도수(정수) → MultinomialNB
· 단어 존재 여부(0/1) → BernoulliNB
· 클래스 불균형 텍스트 → ComplementNB
· 범주형 변수 → CategoricalNB
핵심 요약
  • 나이브 베이즈 = 베이즈 정리 + 특성 독립 가정을 결합한 분류 알고리즘
  • 사전확률 → 증거 관찰 → 사후확률 순으로 믿음을 업데이트함
  • "Naive(순진한)" = 모든 단어가 서로 독립이라는 단순화 가정
  • 단순하지만 스팸 필터링 · 텍스트 분류에서 실용적 성능을 냄
사전확률
P(SPAM) = 0.2
×
우도
P(DISCOUNT|SPAM) = 0.2
÷
증거
P(DISCOUNT) = 0.05
=
사후확률
P(SPAM|DISCOUNT) = 80%
지도학습 조건부 확률 베이즈 정리 텍스트 분류 스팸 필터링
728x90