'무료', '당첨' 같은 단어가 보이면 스팸 확률이 쑥! — 단어를 세는 것만으로 스팸을 걸러내요.
| 단어 | 스팸에서 | 정상에서 | 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이 아니에요. 문장을 코퍼스에 추가하면 이 표가 즉시 바뀝니다.
오른쪽 ✉️ 판정 체험에서 문장을 골라 🔍 판정하기를 누르면, 계산 과정이 여기에 단계별로 나타나요.
테스트 문장을 고르거나, 직접 입력해서 판정해 보세요.
추가하면 코퍼스에 학습되어 단어 표와 판정 결과가 바로 바뀌어요.
학습은 단어를 세는 것이 전부라서, 문장을 추가하면 표와 확률이 그 자리에서 다시 계산돼요. 딥러닝처럼 반복 학습이 필요 없어요.
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)) # [정상일 확률, 스팸일 확률]