← AI 놀이터 홈으로

📬 나이브 베이즈 (Naive Bayes)

'무료', '당첨' 같은 단어가 보이면 스팸 확률이 쑥! — 단어를 세는 것만으로 스팸을 걸러내요.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. 문제 소개 — 스팸 필터는 단어를 세요

"무료", "당첨" 같은 단어가 보이면 스팸 같죠? 나이브 베이즈는 정확히 그 직감을 수학으로 만든 모델이에요. 왼쪽 단어 표는 학습 문장(스팸 8개, 정상 8개)에서 각 단어가 몇 번 나왔는지 센 것 — 빨간 줄은 스팸에서, 파란 줄은 정상에서 더 자주 나온 단어예요. 학습이라고 해봤자 그냥 세기가 전부입니다.

📋 단어 표 — 스팸의 지문

단어스팸에서정상에서P(단어|스팸)P(단어|정상)
지금7회0회8.1%1.1%
무료6회0회7.1%1.1%
쿠폰5회0회6.1%1.1%
클릭5회0회6.1%1.1%
당첨4회0회5.1%1.1%
이벤트4회0회5.1%1.1%
내일0회4회1.0%5.5%
같이0회3회1.0%4.4%
부탁해0회3회1.0%4.4%
숙제0회3회1.0%4.4%
저녁0회3회1.0%4.4%
회의0회3회1.0%4.4%
임박2회0회3.0%1.1%
축하합니다2회0회3.0%1.1%

📖 읽는 법: 등장 횟수 상위 14개 단어예요. 빨간 줄은 스팸에서, 파란 줄은 정상에서 더 자주 나온 단어. 확률은 라플라스 스무딩(모든 횟수에 +1)을 적용한 값이라, 0회 단어도 확률이 0이 아니에요. 문장을 코퍼스에 추가하면 이 표가 즉시 바뀝니다.

🔍 판정 과정 — 단어별 증거 모으기

오른쪽 ✉️ 판정 체험에서 문장을 골라 🔍 판정하기를 누르면, 계산 과정이 여기에 단계별로 나타나요.

✉️ 판정 체험

테스트 문장을 고르거나, 직접 입력해서 판정해 보세요.

추가하면 코퍼스에 학습되어 단어 표와 판정 결과가 바로 바뀌어요.

📊 지금 상태

학습 문장 수 (스팸/정상)
8 / 8개
어휘 크기 V
49개
사전확률 P(스팸)
50.0%
마지막 판정
—

학습은 단어를 세는 것이 전부라서, 문장을 추가하면 표와 확률이 그 자리에서 다시 계산돼요. 딥러닝처럼 반복 학습이 필요 없어요.

🧮 수식과 파이썬

P(스팸|문장) ∝ P(스팸) × Π P(단어ᵢ|스팸)
'단어들이 서로 독립'이라고 순진하게(naive) 가정하면 곱셈만으로 판정할 수 있어요.
P(단어|스팸) = (횟수 + 1) / (전체 + V)
라플라스 스무딩: 모든 횟수에 +1 — 처음 보는 단어도 확률 0이 되지 않아요.
🐍 파이썬 코드로 보면? (펼치기)
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

sentences = ["무료 쿠폰 당첨 지금 클릭", "내일 회의 자료 준비 부탁해"]  # 학습 문장들
labels    = [1, 0]                      # 1 = 스팸, 0 = 정상

vec = CountVectorizer()                 # 문장 → "단어 세기" 표로 변환
X = vec.fit_transform(sentences)

model = MultinomialNB(alpha=1.0)        # alpha=1.0 → 라플라스 스무딩(+1)
model.fit(X, labels)                    # 학습 = 단어별로 세기 끝!

test = vec.transform(["이벤트 당첨 축하합니다 지금 확인"])
print(model.predict_proba(test))        # [정상일 확률, 스팸일 확률]