"이 메일은 스팸일까?"
우리가 매일 받는 이메일 중 어떤 건 쓸모 있고, 어떤 건 스팸입니다.
이걸 자동으로 판단해주는 계산기가 바로 나이브 베이즈(Naive Bayes)입니다.
나이브 베이즈란?
한마디로 말해,
확률을 이용해 어떤 대상이 어느 범주에 속하는지 판단하는 분류 모델입니다.
예를 들어 메일 내용에 포함된 단어들을 보고
스팸일 확률과 정상 메일일 확률을 계산한 뒤
더 높은 쪽을 선택하는 방식입니다.
예시로 이해해보자
어떤 이메일에 이런 문구가 들어있다고 해볼게요.
- "무료"
- "당첨"
- "지금 클릭"
이때 나이브 베이즈는 이렇게 생각합니다.
“이 단어들이 들어있는 메일이 스팸일 가능성은 얼마나 될까?”
그리고 단어 하나하나가 스팸 메일에서 얼마나 자주 등장했는지를 기준으로
확률을 곱해서 결과를 계산합니다.
왜 '나이브(순진한)'일까?
나이브 베이즈는 단어들끼리 서로 독립적이라고 가정합니다.
현실에선 '무료'와 '당첨'이 같이 있으면 더 수상할 수도 있지만,
이 알고리즘은 각 단어를 따로따로 보고 계산합니다.
P(무료 AND 당첨) = P(무료) * P(당첨)
서로 연관이 있어 보이는 단어들도 독립적으로 처리하는 이 단순한 접근이
'순진하다(Naive)'는 이름의 이유입니다.
그래도 잘 쓰이는 이유
나이브 베이즈는 단순하지만 실제로 매우 많이 활용됩니다. 그 이유는 다음과 같습니다.
- 계산 속도가 빠릅니다.
- 구현이 쉽습니다.
- 적은 양의 데이터로도 잘 작동합니다.
- 스팸 필터처럼 간단한 분류 작업에서 정확도가 높습니다.
베이즈 정리 간단히 보기
나이브 베이즈는 기본적으로 베이즈 정리를 따릅니다.
$$
P(스팸 | 단어들) = \frac{P(단어들 | 스팸) \cdot P(스팸)}{P(단어들)}
$$
쉽게 말하면,
"이 단어들이 나왔을 때 스팸일 확률"은
"스팸일 때 이 단어들이 나올 확률" × "스팸이 나올 확률" ÷ "이 단어들이 나올 전체 확률"
하지만 대부분의 경우, 분모는 비교할 필요가 없으니
분자 값만 비교해서 높은 쪽을 선택하면 됩니다.
파이썬 코드 예시
words = ["무료", "당첨", "지금클릭"]
spam_likelihood = P("무료"|스팸) * P("당첨"|스팸) * P("지금클릭"|스팸) * P(스팸)
ham_likelihood = P("무료"|햄) * P("당첨"|햄) * P("지금클릭"|햄) * P(햄)
if spam_likelihood > ham_likelihood:
print("스팸입니다!")
else:
print("정상 메일입니다.")
※ 실제 구현에서는 Laplace smoothing과 같은 기법으로
단어가 한 번도 안 나왔을 때 발생하는 문제도 보완합니다.
어디에 쓰일까?
나이브 베이즈는 텍스트 분류 작업에 자주 쓰입니다.
- 이메일 스팸 필터
- 감성 분석 (긍정/부정)
- 뉴스 기사 분류
- 상품 리뷰 자동 분류 등
마무리
나이브 베이즈는 간단하면서도 꽤 강력한 분류 도구입니다.
특히 텍스트 기반의 문제에서 빠르게 적용할 수 있어 실무에서도 자주 활용됩니다.
단순함은 오히려 강점이 될 수 있다는 걸 보여주는 대표적인 예입니다.
'개발 창고 > AI' 카테고리의 다른 글
[AI] RNN(Recurrent Neural Network)과 MLP(Multi-Layer Perceptron)의 차이 (1) | 2025.05.30 |
---|---|
[DL] 임베딩(Embedding)이란 무엇인가? (2) | 2025.05.29 |