나이브 베이즈로 스팸 메일 걸러내기 - 부스트키워드 블로그 커버 이미지
검색엔진 원리
2026년 8월 27일

나이브 베이즈(Naive Bayes) 분류기로 스팸 메일 걸러내는 원리

부스트키워드 팀

부스트키워드 팀

검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.


하루에도 수십 통씩 쏟아지는 이메일 중에서, 메일 서비스는 어떻게 스팸을 정확히 걸러내 별도의 폴더로 보내는 걸까요? 사람이 일일이 "이런 단어가 들어 있으면 스팸이다"라는 규칙을 정해준 것이 아니라, 실제로는 확률을 계산하는 알고리즘이 그 판단을 대신하고 있습니다. 그 대표적인 방법이 바로 나이브 베이즈(Naive Bayes) 분류기입니다. 이 글에서는 나이브 베이즈가 어떤 원리로 스팸을 판별하는지 예제를 통해 알아봅니다.

매일 받는 메일함, 스팸은 어떻게 자동으로 걸러질까

사람이 일일이 규칙을 정할 수 없는 이유

스팸 메일을 걸러내는 가장 단순한 방법은 "특정 단어가 들어 있으면 스팸으로 처리한다"는 규칙을 미리 정해두는 것입니다. 하지만 스팸을 보내는 쪽도 계속 표현을 바꾸고 새로운 수법을 시도하기 때문에, 사람이 모든 규칙을 손으로 하나하나 정의하는 방식은 금세 한계에 부딪힙니다. 게다가 정상적인 메일에도 얼마든지 특정 단어가 등장할 수 있어서, 단순한 규칙만으로는 오탐(정상 메일을 스팸으로 착각)과 놓침(스팸을 정상으로 착각)이 자주 발생합니다.

"단어의 패턴"으로 스팸을 구별한다는 발상

그래서 등장한 접근이 "이 메일에 등장한 단어들의 패턴을 보고, 스팸일 확률과 정상 메일일 확률을 각각 계산해서 더 높은 쪽으로 판단하자"는 것입니다. 사람이 규칙을 직접 정하는 대신, 이미 스팸으로 판명된 메일들과 정상으로 판명된 메일들을 컴퓨터에게 미리 많이 보여주고, 그 데이터로부터 "어떤 단어가 스팸에 자주 등장하는지"를 스스로 학습하게 하는 방식입니다. 나이브 베이즈는 이러한 확률 기반 학습을 가장 단순하면서도 효과적으로 구현한 방법 중 하나입니다.

텍스트 분류란 무엇인가

문서를 미리 정해진 카테고리 중 하나로 나누는 문제

스팸 필터링은 더 넓은 범주에서 보면 '텍스트 분류' 문제에 속합니다. 텍스트 분류란 어떤 글이 주어졌을 때, 미리 정해둔 여러 카테고리 중 어디에 속하는지를 자동으로 판단하는 작업을 말합니다. 뉴스 기사를 '정치', '경제', '스포츠'로 나누거나, 상품 리뷰를 '긍정'과 '부정'으로 나누는 것도 모두 같은 원리의 텍스트 분류 문제입니다.

스팸 필터링도 텍스트 분류의 한 종류

스팸 필터링은 이 중에서도 카테고리가 '스팸'과 '정상 메일' 두 가지뿐인 가장 단순한 형태의 텍스트 분류라고 볼 수 있습니다. 문제가 단순한 만큼, 나이브 베이즈처럼 비교적 간단한 확률 모델로도 상당히 높은 정확도를 낼 수 있어 오랫동안 널리 사용되어 왔습니다.

베이즈 정리: 확률로 추론한다는 것

"이 메일이 스팸일 확률"을 어떻게 계산할까

나이브 베이즈라는 이름은 통계학의 '베이즈 정리'에서 따온 것입니다. 베이즈 정리를 아주 쉽게 풀어 말하면, "어떤 증거(메일에 등장한 단어들)를 보았을 때, 특정 결과(스팸인지 아닌지)일 확률을 거꾸로 계산하는 방법"입니다. 즉 "이 메일에 '무료', '당첨', '지금 바로'라는 단어가 들어 있는 것을 보니, 이 메일이 스팸일 확률은 얼마나 될까?"를 계산하는 것이 핵심입니다.

조건부 확률의 기본 개념

이때 사용하는 것이 '조건부 확률'이라는 개념입니다. 조건부 확률이란 "어떤 조건이 주어졌을 때, 특정 사건이 일어날 확률"을 뜻합니다. 예를 들어 "'무료'라는 단어가 등장했다는 조건 하에, 이 메일이 스팸일 확률"이 바로 조건부 확률의 예입니다. 나이브 베이즈는 메일에 등장한 단어 하나하나에 대해 이런 조건부 확률을 계산하고, 이를 종합해서 최종적으로 "스팸일 확률"과 "정상일 확률" 중 어느 쪽이 더 높은지를 비교합니다.

왜 '나이브(Naive, 순진한)'라는 이름이 붙었을까

단어들이 서로 독립적이라고 가정하는 단순화

여러 단어가 동시에 등장했을 때의 확률을 정확하게 계산하려면, 원래는 단어들 사이의 복잡한 상관관계까지 모두 고려해야 합니다. 예를 들어 '무료'와 '당첨'이라는 두 단어가 함께 등장하는 경우가 각각 따로 등장하는 경우와 확률적으로 어떻게 다른지까지 계산해야 정확하겠지만, 이는 계산이 매우 복잡해집니다.

그래서 나이브 베이즈는 과감한 단순화를 선택합니다. "메일에 등장하는 각 단어는 서로 아무런 관련 없이, 독립적으로 등장한다"고 가정해버리는 것입니다. 이런 가정을 세우면 전체 확률을 각 단어별 확률의 곱으로 간단하게 계산할 수 있게 됩니다. 이렇게 사실은 성립하지 않는 단순한 가정을 전제로 삼는다는 점에서 '순진하다(Naive)'는 이름이 붙었습니다.

현실과 다른 가정이지만 실제로는 잘 작동하는 이유

실제로 단어들은 서로 완전히 독립적이지 않습니다. '무료'라는 단어와 '당첨'이라는 단어는 스팸 메일에서 실제로 자주 함께 등장하는 경향이 있기 때문입니다. 그럼에도 나이브 베이즈는 놀랍도록 실용적인 성능을 보여주는 경우가 많습니다. 최종적으로 두 카테고리(스팸 vs 정상) 중 어느 쪽 확률이 더 높은지 순위만 정확하게 비교할 수 있다면, 각 확률의 정확한 절대값이 다소 부정확하더라도 분류 결과 자체는 맞아떨어지는 경우가 많기 때문입니다.

간단한 예제로 이해하는 나이브 베이즈 계산

스팸/정상 메일 학습 데이터 예시 만들기

아주 단순화한 예를 들어보겠습니다. 지금까지 받은 메일 10통을 분석했더니, 스팸 메일 5통 중 4통에 '무료'라는 단어가 있었고, 정상 메일 5통 중에는 단 1통에만 '무료'라는 단어가 있었다고 가정해봅시다. 이 데이터를 통해 다음과 같은 확률을 추정할 수 있습니다.

  • '무료'라는 단어가 스팸 메일에 등장할 확률: 4/5 (80%)
  • '무료'라는 단어가 정상 메일에 등장할 확률: 1/5 (20%)

새로운 메일이 들어왔을 때 확률 비교로 분류하는 과정

이제 '무료'라는 단어가 포함된 새로운 메일이 도착했다고 해봅시다. 나이브 베이즈는 이 메일이 애초에 스팸일 가능성(전체 메일 중 스팸 비율)과, 스팸 메일에서 '무료'가 등장할 확률을 곱한 값을 계산합니다. 마찬가지로 정상 메일일 가능성과 정상 메일에서 '무료'가 등장할 확률을 곱한 값도 계산합니다.

실제 메일에는 '무료' 외에도 '당첨', '지금', '이벤트' 등 여러 단어가 함께 등장하므로, 이 계산을 메일에 포함된 모든 단어에 대해 반복한 뒤 각각의 확률을 모두 곱해 최종 값을 구합니다. 이렇게 계산한 두 값(스팸일 확률 vs 정상일 확률)을 비교해서, 더 높은 쪽으로 메일을 분류하는 것이 나이브 베이즈의 전체 과정입니다. 위 예시처럼 '무료'라는 단어 하나만 보아도 스팸 쪽의 확률이 훨씬 높게 나오므로, 이 단어가 포함된 메일은 스팸으로 분류될 가능성이 큽니다.

실제로 어디에 쓰일까

이메일 스팸 필터

앞서 살펴본 예제가 바로 실제 이메일 서비스에서 스팸을 걸러내는 기본 원리입니다. 다만 실제 서비스는 나이브 베이즈만 단독으로 쓰기보다, 발신자 평판, 첨부파일 여부, 사용자의 신고 데이터 등 다양한 정보를 함께 결합해 정확도를 더욱 높입니다.

리뷰 감정 분석, 뉴스 카테고리 자동 분류 등 활용 사례

나이브 베이즈는 스팸 필터링 외에도 다양하게 활용됩니다. 상품 리뷰에 등장하는 단어들을 분석해 '긍정적인 리뷰'와 '부정적인 리뷰'를 자동으로 구분하거나, 뉴스 기사를 주제별로 자동 분류하는 데에도 같은 원리가 적용됩니다. 계산이 빠르고 구현이 비교적 간단하기 때문에, 대량의 텍스트를 빠르게 분류해야 하는 초기 단계의 시스템에서 특히 널리 쓰입니다.

나이브 베이즈의 장점과 한계

나이브 베이즈의 가장 큰 장점은 계산이 단순해서 매우 빠르고, 비교적 적은 학습 데이터로도 준수한 성능을 낼 수 있다는 점입니다. 반면 단어들 사이의 실제 관계나 문맥을 전혀 고려하지 않기 때문에, 문장의 뉘앙스나 반어법처럼 미묘한 표현을 정확히 구분하는 데에는 한계가 있습니다. 이러한 한계 때문에 오늘날 정교한 분류가 필요한 서비스에서는 나이브 베이즈보다 더 복잡한 머신러닝·딥러닝 기반 모델을 함께 활용하는 경우가 많지만, 나이브 베이즈는 지금도 빠르고 가벼운 분류가 필요한 상황에서 기본 모델로 널리 쓰이고 있습니다.

정리하며

나이브 베이즈는 "단어들이 서로 독립적으로 등장한다"는 단순한 가정을 바탕으로, 문서에 포함된 단어들의 등장 확률을 계산해 카테고리를 분류하는 방법입니다. 현실과 다소 다른 가정을 전제로 하면서도 실제로는 매우 실용적인 성능을 보여준다는 점에서, 통계적 방법이 얼마나 강력할 수 있는지를 보여주는 대표적인 사례이기도 합니다. 매일 무심코 지나치는 스팸 필터 뒤에도, 이렇게 확률을 계산하는 정교한 원리가 숨어 있다는 사실을 알면 조금 더 흥미롭게 느껴질 것입니다.

Q.나이브 베이즈는 왜 학습 데이터가 많이 필요한가요?

A.각 단어가 스팸/정상 메일에 등장하는 확률을 정확히 추정하려면, 다양한 사례를 바탕으로 통계를 내야 하기 때문입니다. 학습 데이터가 적으면 우연히 한두 번 등장한 단어의 확률이 왜곡되어, 분류 정확도가 떨어질 수 있습니다.

Q.나이브 베이즈와 딥러닝 기반 스팸 필터의 차이는 무엇인가요?

A.나이브 베이즈는 단어의 등장 여부와 빈도만을 통계적으로 활용하는 비교적 단순한 모델입니다. 반면 딥러닝 기반 모델은 단어의 순서나 문맥, 의미까지 함께 학습할 수 있어 더 정교한 판단이 가능하지만, 그만큼 더 많은 데이터와 계산 자원이 필요합니다.

Q.스팸 발신자가 단어를 살짝 바꿔서 필터를 피하려는 시도에도 잘 대응하나요?

A.나이브 베이즈는 학습 데이터에 새로운 패턴이 계속 반영되면 이런 변형된 표현도 점차 학습할 수 있습니다. 다만 완전히 새로운 방식의 스팸이 등장하면 일시적으로 탐지가 늦어질 수 있어, 실제 서비스에서는 지속적으로 데이터를 갱신하고 다른 필터링 기법과 함께 사용하는 것이 일반적입니다.

Written by

부스트키워드 팀

부스트키워드 팀

검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.