나이브 베이즈(Naive Bayes)란? AI에서 특징별 확률로 클래스를 예측하는 방법
TL;DR
나이브 베이즈(Naive Bayes)는 클래스가 주어졌을 때 특징들이 서로 독립이라는 가정으로 확률을 계산하는 지도학습 분류 방법입니다. 클래스의 사전확률과 특징별 조건부확률을 결합해 새 입력의 클래스를 고릅니다. 단어 횟수·등장 여부·연속값에 따라 알맞은 변형이 다르며, 분류를 잘한다고 출력 확률까지 정확한 것은 아닙니다.
핵심 3줄 요약
- 핵심 1
조건부 독립을 가정합니다. 같은 클래스 안에서 특징별 통계를 따로 추정하고 결합해 판정합니다. - 핵심 2
입력 표현에 맞는 모델을 고릅니다. MultinomialNB는 횟수, BernoulliNB는 이진값, GaussianNB는 연속값을 다룹니다. - 핵심 3
평활화와 확률 해석을 점검합니다. 관측되지 않은 특징 때문에 점수가 무너지지 않게 하고 확신이 과한지도 확인합니다.
이 글에서 다룰 내용
- 나이브 베이즈의 한 문장 정의
- 고객 문의로 이해하는 사전확률과 조건부확률
- 학습·평활화·로그 점수의 작동 순서
- MultinomialNB·BernoulliNB·GaussianNB의 차이
- 베이즈 정리·SVM·클러스터링과의 구분
- 실전 사용처와 데이터·평가 체크리스트
- 독립 가정·확률 출력·미지 단어의 주의점
나이브 베이즈를 한 문장으로 정의하면 무엇인가요?
나이브 베이즈는 클래스가 주어졌다는 조건 아래 특징들이 서로 독립이라고 가정하고, 베이즈 정리로 각 클래스의 사후확률을 비교하는 분류 알고리즘 계열입니다.
나이브는 단순한 가정을 뜻합니다. 현실의 모든 특징이 아무 관계도 없다는 선언이 아닙니다. 예를 들어 배송 문의라는 범주 안에서도 배송과 도착이라는 단어는 함께 나타나기 쉽지만, 기본 모델은 그 연결을 직접 학습하지 않고 각각의 단서를 따로 계산합니다.
학습에는 입력과 정답 라벨이 필요합니다. 배송·환불처럼 정해 둔 클래스를 예측하므로 지도학습에 속합니다. 영어로 NB라고 줄여 쓰기도 하며, 하나의 고정된 분포만 쓰는 알고리즘이 아니라 특징의 분포 가정에 따라 여러 변형으로 나뉩니다.
한 줄 정리: 클래스별로 특징이 나타나는 양상을 배우고, 새 입력이 어느 클래스의 양상과 더 잘 맞는지 비교합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 고객 문의에 배송 또는 환불이라는 라벨을 붙여 두었다고 가정해 보겠습니다. 새 문의를 어느 담당자에게 보낼지 고르는 가상 사례이며, 실제 서비스의 정확도나 실험 결과를 뜻하지는 않습니다.
학습 자료에서 배송 문의가 얼마나 흔한지부터 셉니다. 이것이 배송 클래스의 사전확률을 추정하는 단서입니다. 이어 배송 문의에 도착·택배 같은 단어가 얼마나 나왔는지, 환불 문의에 취소·반품 같은 단어가 얼마나 나왔는지 따로 집계합니다.
새 문장에 택배와 도착이 들어 있다면 각 클래스에서 그 단어들을 얼마나 기대할 수 있는지 계산합니다. 단어 하나를 보고 무조건 배송이라고 정하는 규칙과 다릅니다. 클래스의 기본 비중과 여러 단어의 증거를 함께 반영합니다.
배송이 늦어 환불을 원한다는 문장은 두 범주의 단서를 함께 담습니다. 모델은 학습한 통계에 따라 한 클래스를 고르지만, 업무에서는 복합 문의로 따로 처리하거나 사람이 검토하는 편이 맞을 수 있습니다. 모델의 클래스 목록이 실제 업무를 충분히 표현하는지 먼저 확인하는 이유입니다.
쉬운 예시: 담당자별로 자주 받던 문의의 단어 기록을 만들어 두고, 새 문의의 단어가 어느 기록에 더 잘 들어맞는지 점수를 매기는 방식입니다.
왜 AI에서 나이브 베이즈가 중요한가요?
가벼운 분류 기준을 빠르게 만듭니다
scikit-learn 가이드는 문서 분류와 스팸 필터링을 대표적인 활용처로 설명합니다. 복잡한 특징 조합을 모두 추정하지 않고 클래스별 통계를 나눠 학습하므로 간단한 비교 모델을 만들기 좋습니다. 다만 빠르다는 설명을 모든 데이터에서 최고의 성능을 낸다는 뜻으로 읽지는 않습니다.
입력 표현이 모델에 미치는 영향을 배웁니다
같은 문서도 단어 횟수를 셀지, 등장 여부만 남길지에 따라 다른 모델이 됩니다. 숫자가 들어 있다는 이유만으로 아무 변형이나 골라서는 안 됩니다. 특징의 의미와 분포 가정을 맞추는 과정은 다른 머신러닝 모델을 이해할 때도 도움이 됩니다.
분류 성능과 확률의 신뢰도를 구분합니다
가장 높은 점수의 클래스를 맞히는 일과 확률값을 정확히 추정하는 일은 다릅니다. 공식 가이드도 나이브 베이즈의 확률 출력을 그대로 믿지 말라고 주의합니다. 자동 승인이나 검토 제외에 확률을 쓰려면 별도의 평가가 필요합니다.
나이브 베이즈는 어떤 순서로 작동하나요?
1. 클래스 비중과 특징별 통계를 배웁니다
문서 분류에서는 먼저 훈련 문서로 단어 사전과 숫자 벡터를 만듭니다. MultinomialNB는 클래스별 문서 수와 단어 횟수를 집계합니다. 사전확률은 각 클래스의 기본 비중이고, 조건부확률은 특정 클래스에서 어떤 단어를 기대하는지를 나타냅니다.
클래스가 배송이라는 조건에서 택배라는 단어가 나올 확률과, 택배라는 단어를 본 뒤 배송이라고 판단할 확률은 서로 다릅니다. 앞의 통계를 학습한 뒤 베이즈 정리로 뒤의 판단을 구합니다. 이 방향을 뒤집어 읽으면 모델 설명을 잘못 이해하기 쉽습니다.
2. 관측되지 않은 조합을 평활화합니다
훈련 자료에 어떤 단어가 있어도 특정 클래스에서는 한 번도 나오지 않을 수 있습니다. 그 조건부확률을 그대로 0으로 두면 확률을 곱하는 과정에서 해당 클래스의 점수가 사라집니다. 평활화는 횟수에 작은 값을 더해 이런 문제를 완화합니다.
MultinomialNB의
alpha
가 가산 평활화의 크기입니다.
alpha=1
은 라플라스 평활화에 해당합니다. 단어별 횟수뿐 아니라 분모에도 전체 어휘 수에 맞는 보정을 하므로, 확률에 임의의 숫자를 더하는 방식과는 다릅니다.
3. 새 입력의 클래스별 로그 점수를 비교합니다
개념적으로는 사전확률과 특징별 조건부확률을 곱합니다. 구현에서는 작은 확률을 계속 곱할 때 생기는 수치 문제를 줄이려고 로그를 취해 더하는 방식이 흔합니다. Stanford 정보검색 교재도 이 계산을 설명하며, 가장 높은 로그 점수의 클래스가 예측 결과가 됩니다.
단어 횟수 모델에서는 같은 단어가 여러 번 나오면 그만큼 점수에 반영됩니다. 예측 클래스와 확률 배열을 함께 저장할 때는
classes_
를 확인해 각 열이 어느 라벨인지 연결합니다. 배열의 첫 열이 항상 원하는 양성 클래스라는 보장은 없습니다.
핵심 인사이트: 평활화는 보지 못한 단어·클래스 조합의 0 문제를 다루며, 로그 계산은 작은 숫자의 곱셈 문제를 다룹니다. 서로 다른 문제를 해결합니다.
입력에 따라 어떤 변형을 고르나요?
MultinomialNB는 단어 횟수에 맞춥니다
다항 나이브 베이즈는 단어 출현 횟수 같은 이산 특징을 다룹니다. 공식 API는 원래 다항분포가 정수 횟수를 가정하지만 TF-IDF 같은 소수 값도 실무에서 작동할 수 있다고 설명합니다. 다만 음수 특징을 넣는 모델은 아니므로 중심화한 벡터나 부호가 섞인 임베딩을 그대로 연결하지 않습니다.
BernoulliNB는 등장 여부를 봅니다
베르누이 나이브 베이즈는 각 특징을 0 또는 1로 나타냅니다. 한 단어가 여러 번 나와도 등장했다는 표시 하나로 다룹니다. 등장한 단어뿐 아니라 특정 단어가 등장하지 않았다는 정보도 판정에 반영한다는 점이 다항 방식과 다릅니다.
API의
binarize
는 입력을 이진값으로 바꿀 임계값입니다.
binarize=None
이면 입력이 이미 이진 벡터라고 가정합니다. 횟수를 유지하려던 데이터를 자동 이진화해 정보가 사라지지 않도록 입력과 설정을 함께 확인합니다.
GaussianNB는 연속값의 분포를 가정합니다
가우시안 나이브 베이즈는 클래스별로 각 연속 특징이 정규분포를 따른다고 가정하고 평균과 분산을 추정합니다. 데이터 전체를 하나의 정규분포로 보는 것이 아닙니다. 각 클래스 안에서 각 열의 분포를 따로 설명합니다.
var_smoothing
은 계산을 안정시키려고 분산에 더할 값의 비율을 정합니다. MultinomialNB의 단어 횟수 평활화와 같은 설정이 아닙니다. 클래스 내부 분포가 크게 비대칭이거나 여러 봉우리로 나뉜다면 가정이 적절한지 검증 자료로 확인합니다.
나이브 베이즈와 헷갈리는 용어는 무엇이 다른가요?
베이즈 정리와의 차이
베이즈 정리는 조건부확률의 관계를 나타내는 일반적인 규칙입니다. 나이브 베이즈는 그 규칙에 클래스가 주어졌을 때의 특징 독립 가정을 더해 분류에 적용합니다. 베이즈 정리를 쓰는 모든 모델을 나이브 베이즈라고 부르지는 않습니다.
서포트 벡터 머신과의 차이
SVM은 마진과 손실을 고려해 분류 경계를 학습합니다. 나이브 베이즈는 클래스별 특징 분포와 사전확률을 학습해 클래스를 비교합니다. 둘 다 문서 분류에 쓸 수 있지만 학습 목표와 출력 점수의 뜻은 다릅니다.
경계 학습의 개념은 서포트 벡터 머신 용어 설명에서 이어 읽을 수 있습니다. 같은 훈련·평가 분할로 두 모델을 비교해야 어느 쪽이 현재 데이터에 맞는지 판단할 수 있습니다.
클러스터링과의 차이
클러스터링은 보통 정답 라벨 없이 비슷한 사례를 묶습니다. 나이브 베이즈는 이미 정한 클래스의 라벨을 보고 학습합니다. 여러 가우시안 성분을 찾는 GMM과 GaussianNB도 이름은 비슷하지만, 숨은 성분을 찾는 일과 알려진 클래스를 예측하는 일은 다릅니다.
비교 정리: 베이즈 정리는 확률 규칙, 나이브 베이즈는 그 규칙과 독립 가정을 쓰는 분류 방법, SVM은 마진 기반 모델, 클러스터링은 묶음을 찾는 작업입니다.
실전에서는 어디에 쓰이나요?
문서 분류와 스팸 필터링
문의 유형, 문서 주제, 메일 분류처럼 텍스트를 정해진 범주로 나눌 때 기본 후보로 검토합니다. 짧은 문서에서는 등장 여부 모델도 비교할 만하지만, 짧다는 이유만으로 BernoulliNB가 항상 더 좋다고 정하지는 않습니다. 한국어 단어 분리와 표현 방식도 결과에 영향을 줍니다.
많은 데이터를 나눠 학습하는 작업
MultinomialNB·BernoulliNB·GaussianNB는
partial_fit
으로 데이터 묶음을 차례로 학습하는 기능을 지원합니다. 첫 호출에는 나올 수 있는 전체 클래스 목록이 필요합니다. 메모리에 모두 올리기 어려운 데이터에도 쓸 수 있지만, 묶음마다 특징 열의 뜻과 순서가 같아야 합니다.
복잡한 모델과 비교할 베이스라인
더 큰 신경망이나 언어 모델을 도입하기 전에 단순한 분류기가 어느 정도까지 해결하는지 확인하는 기준으로 씁니다. 정확도만 비교하지 말고 중요한 클래스의 누락, 처리 시간, 운영 비용을 함께 봅니다. 간단한 모델이라도 개인정보가 포함된 학습 자료의 접근 관리는 필요합니다.
나이브 베이즈를 적용할 때 어떤 순서로 확인하나요?
1. 라벨과 평가 데이터를 먼저 정합니다
배송과 환불의 경계가 애매한 사례를 어떻게 라벨링할지 정하고 학습·검증·시험 데이터를 분리합니다. 같은 문의의 복사본이나 같은 고객의 연결된 대화가 양쪽에 섞이면 평가가 낙관적으로 나올 수 있습니다. 단어 사전과 TF-IDF 통계도 훈련 자료에서만 학습합니다.
2. 특징 표현과 모델 설정을 맞춥니다
횟수·이진값·연속값 중 무엇을 넣는지 적고 그에 맞는 변형을 고릅니다. 검증 자료로 평활화와 전처리 후보를 비교하되 시험 데이터로 반복 조정하지 않습니다. 모델만 저장하지 말고 단어 사전, 변환기, 클래스 순서와 라이브러리 버전도 함께 보관합니다.
3. 분류 결과와 확률 사용 목적을 나눠 평가합니다
전체 정확도가 높아도 드문 환불 문의를 놓칠 수 있으므로 클래스별 정밀도·재현율과 혼동 행렬을 확인합니다. 확률을 자동 처리 기준에 쓰려면 실제 정답 비율과 맞는지 별도로 검토합니다. 운영 중 새 표현이나 클래스 비중이 달라질 때 재평가할 기준도 정합니다.
실전 팁: 짧은 문장, 빈 입력, 사전에 없는 단어, 서로 다른 범주의 단서가 섞인 문장을 작은 점검 묶음으로 만들어 두세요. 평균 점수만 볼 때 놓치는 오류를 찾기 좋습니다.
사용할 때 무엇을 주의해야 하나요?
서로 강하게 연결된 특징을 독립된 증거로 과대평가할 수 있습니다. 같은 뜻의 단어와 중복 특징을 여러 개 넣으면 사실상 같은 단서를 반복 반영할 수 있습니다. 독립 가정이 완벽히 맞지 않아도 분류는 가능하지만, 확신이 지나치게 커지는 문제는 따로 확인합니다.
사전확률은 업무의 영구적인 비율이 아닙니다. 학습 자료의 클래스 비중이 운영 환경과 다르면 판단이 한쪽으로 치우칠 수 있습니다.
fit_prior=False
는 균등 사전확률을 쓰는 선택이며 불균형 문제를 자동 해결하는 스위치는 아닙니다.
평활화가 미지 단어의 뜻을 만들어 주지는 않습니다. 사전에 있는 단어가 특정 클래스에 없던 경우와, 단어 사전 자체에 없는 경우를 구분합니다. 후자는 벡터화 방식의 미지 단어 처리에 달려 있습니다. 모든 특징이 0인 입력은 클래스별 점수 규칙에 따라 판정되므로, 빈 문서의 처리를 따로 정합니다.
평활화를 없앨 때는 수치 문제도 확인합니다. API는
alpha
가 0에 너무 가까우면 수치 오류가 생길 수 있다고 경고합니다. 작은 값일수록 좋은 모델이라는 규칙은 없습니다. 기본값 변경 여부도 설치한 버전의 문서로 확인합니다.
주의: 높은 예측 확률은 문서 내용이 사실이라는 보증도, 자동 처리해도 안전하다는 보증도 아닙니다. 분류 라벨의 정합성과 업무 위험은 별도로 검토합니다.
자주 묻는 질문
Q1. 나이브 베이즈는 정답 라벨 없이 학습하나요?
기본 분류기는 정답 클래스가 붙은 훈련 데이터를 사용합니다. 클래스별 통계를 배우는 지도학습 방법이며, 라벨 없이 주제를 묶는 군집화와 구분합니다.
Q2. 특징들이 실제로 독립이어야만 쓸 수 있나요?
완벽한 독립이 아니어도 분류 성능이 유용할 수 있습니다. 다만 가정 위반의 영향은 데이터마다 다릅니다. 특히 중복된 단서와 과도한 확신을 점검하고 독립 평가 결과로 채택 여부를 정합니다.
Q3. 단어 횟수와 등장 여부 중 무엇이 더 좋나요?
반복 횟수를 살리려면 다항 방식을, 등장 여부와 부재를 보려면 베르누이 방식을 비교합니다. 어느 쪽이 낫다는 일반 규칙은 없으므로 같은 데이터 분할과 지표로 확인합니다.
Q4. predict_proba 결과를 그대로 신뢰해도 되나요?
확률처럼 합이 맞는 출력이라도 실제 정답 비율과 일치한다고 보장되지는 않습니다. 분류 정확도와 확률의 보정 상태를 따로 평가하고, 자동 결정에 쓸 때는 잘못된 판단의 비용도 반영합니다.
Q5. 새 데이터가 생길 때 조금씩 학습할 수 있나요?
소개한 scikit-learn 변형은 partial_fit을 지원합니다. 첫 호출에 전체 클래스 목록을 전달하고 이후에도 같은 특징 공간을 유지합니다. 점진 학습을 한다고 오래된 패턴을 자동으로 잊는 것은 아니므로 데이터 변화는 계속 확인합니다.
출처
마무리
나이브 베이즈는 클래스별 특징 통계에 조건부 독립 가정을 더해 새 입력을 분류하는 방법입니다. 사전확률, 조건부확률, 평활화를 구분하면 단순한 계산으로도 문서 분류 모델을 만드는 원리를 이해할 수 있습니다.
처음에는 입력이 횟수인지 이진값인지 연속값인지부터 확인하세요. 그다음 같은 평가 자료로 변형과 설정을 비교하고, 분류 성능과 확률의 신뢰도를 따로 점검하면 됩니다. 간단한 모델을 정확히 이해하는 일이 더 복잡한 AI 모델을 고르는 좋은 출발점이 됩니다.
