Naive Bayesian Classifier(NBC)
- 순진함 + 베이즈 정리 => 분류
Naive (simple or idiot)
"입력 변수 []은 주어진 클라스 에 대해 서로 조건부 독립이다"
라는 매우 강한 가정을 둔다.
Bayesian
베이즈 정리를 기반으로 사후 확률을 최대화하는 학습 방식을 사용한다.
NBC 작동 방식
- 분류하고자 하는 클래스()가 개, 설명변수()가 개인 경우를 가정하자
✅ 베이즈 정리에 따른 분류 확률
입력 가 주어졌을 때, 클래스 가 참일 사후확률은 다음과 같다 :
✅ Chain Rule 적용
결합확률 는 Chain Rule에 따라 :
✅ 조건부 독립 가정 (Naive Assumption)
NBC는 설명변수 간에 조건부 독립을 가정하므로 :
✅ 정규화 상수 생략
전체 확률 는 모든 클래스에 대해 동일하므로 분모를 생략하면 :
✅ 분류 결정
각 클래스 에 대해 상대적인 확률을 계산하고,
가장 높은 값을 가지는 클래스를 예측값으로 선택한다
NBC의 특징
좋게 말하면: 베이즈 정리를 기반으로 한 효율적인 분류기나쁘게 말하면: 베이지안의 철학을 흉내 낸 빈도주의 기반의 단순 분류기
조건부 독립 가정
현실의 대부분 데이터는 feature 간 조건부 독립성을 만족하지 않는다
이로 인해 정보 손실, 확률 왜곡, 성능 저하가 발생할 수 있다.
또한 실제로는 상관 구조가 존재함에도 베이즈 정리를 기계적으로 적용한다는 점에서
전통적인 베이지안 추론이라고 보긴 어렵다.
그런데 이 단순함이 때때로 강점이 된다
🔁 "Column 기준 양질 전환의 법칙"
변수 수준에 따라 서로 다른 분포 가정
Naive Bayes는 모든 설명 변수가 동일한 분포를 따른다고 가정한다.
하지만 현실의 고차원 데이터는 일반적으로 다양한 수준의 변수를 포함하고 있음:
이를 하나의 NB 모델로 처리하면 "분포 가정 오류 → 확률 왜곡 → 성능 저하"로 이어질 수 있다
✅ 해결 방법
혼합형 구조 (Hybrid Naive Bayes) :
전처리를 통해 분포 구조 통일 :
모든 변수를 one-hot encoding → Bernoulli NB 또는 Multinomial NB로 처리
연속형 변수를 구간화(discretization)하여 카테고리화 → Multinomial NB로 처리 가능
📊 변수 유형별 적절한 Naive Bayes 분포
| 변수 유형 | 예시 | 적절한 NB 변종 |
|---|---|---|
| 연속형 | 키, 나이, 온도 | Gaussian NB |
| 범주형 | 성별, 직업, 지역 | Categorical NB |
| 이진형 | 단어 등장 여부 | Bernoulli NB |
| 카운트형 | 단어 등장 횟수, 구매 횟수 | Multinomial NB |
해석 가능성 / 결정 경계
❗ NBC는 사후 확률을 완전히 계산하지 않는다
🤔 그렇다면, 정규화 상수를 계산해서 사후 분포를 완성하면 해석력이 올라갈까?
✅ 그렇다면 NBC는 해석이 불가능한 모델인가?
전혀 아니다. 오히려 NBC는 구조가 단순하기 때문에 log-odds 관점에서 해석 가능성이 높다
따라서, 변수의 값이 바뀔 때 예측 확률이 얼마나 이동하는지를 추적할 수 있다
(log-odds 관점에서 feature importance 분석)
❗ 단, 구조적 한계는 존재한다
NBC의 결정 함수는 본질적으로 선형(log-linear) 구조이기 때문에
비선형 결정 경계를 표현할 수 없다.
그러나 이것이 곧 단점만은 아니다 :
단순한 결정 경계는 오히려 노이즈에 강하고 과적합 위험이 낮다.
물론 NBC를 적용했을 때 다른 모델보다 매우 우월한 성능을 보인다면 사후 분포를 계산해 분석하는 것도 의미가 있겠지만, 일반적인 NBC의 장점은 단순하고 직관적인 구조 + 꽤나 준수한 설명력이므로 baseline 모델이나 stacking ensemble의 base learner로 자주 활용된다.
Zero-Frequency 문제
NB에서는 모든 조건부 확률 을 곱해서 사후 확률을 계산하는 구조이다 :
특정 클래스 에서 어떤 feature 값 가 한번도 등장하지 않았다면 :
NBC는 우도를 훈련 데이터의 빈도로 추정하기 때문에,
등장하지 않으면 → 빈도 = 0 → 확률 = 0
곱셈 구조이기 때문에 하나의 확률이 0이면 전체 사후 확률이 강제로 0이 되어버림
클래스 y = "스팸"에 대해
x_i = "무료"라는 단어가 한 번도 등장하지 않았다면:
P("무료" | "스팸") = 0
→ P(스팸 | 문서) = 0
→ 스팸일 가능성 무조건 0 ← 말이 안 됨
✅ 해결책: Laplace Smoothing
모든 feature 값에 최소 1회 등장했다고 가정하여 0이 되는 상황을 방지한다
: 클래스 에서 인 샘플 수
: 클래스 에 속한 총 샘플 수
: feature 의 가능한 고유값 개수
전혀 등장하지 않은 값도 1로 보정하여 확률 0 → 최소값으로 유지할 수 있도록 만듦!
믿음 : 베이지안 추론의 가장 철학적인 딜레마이자, 동시에 가장 강력한 무기
- NBC는 기본적으로 데이터에서 믿음 (사전 분포)를 설정한다. 이는 합리적인 근거를 가지고 있는 믿음이지만, 동시에 고전적인 베이지안에서 강조하는 "믿음과 데이터의 독립성"을 위배한다.
믿음은 어디서 오는가?
경험(데이터)에 기반할 수 있다
직관/주관에 기반할 수도 있다
믿음에 근거가 꼭 필요한가?
물론 합리적인 근거가 있다면 좋다.
그러나 베이지안 관점에서는 '믿음이 어떻게 바뀌는가'가 더 중요하다.
→ 사전 분포는 완벽하지 않아도 괜찮다.
→ 데이터가 충분히 들어오면, 믿음은 바뀐다.
"독립이어야 한다"는 건 딱 수학적 정의일 뿐
현실에서 완전히 독립된 사전 분포는 거의 존재하지 않는다
따라서, 좋은 베이지안은 이런 질문에 집중한다: