베이즈 정리 (Bayes Theorem)
정의
베이즈 정리 (Bayes Theorem) 는 조건부 확률의 대칭성을 이용해 P(A|B) 를 P(B|A) 로 표현하는 공식:
P(A|B) = P(B|A) * P(A) / P(B)
- P(A): 사전 확률 (prior) - 증거를 보기 전 A 의 확률
- P(B|A): 가능도 (likelihood) - A 가 참일 때 B 가 관측될 확률
- P(A|B): 사후 확률 (posterior) - B 관측 후 A 의 확률
- P(B): 증거 (evidence) - B 가 관측될 총 확률 (정규화 상수)
문제 상황과 동기
진단 문제: 어떤 병의 유병률이 1% (prior). 검사의 정확도가 99% (likelihood). 양성 판정을 받았을 때 실제 병에 걸렸을 확률은?
- intuition: “99% 정확도니까 99%!” -> 틀림.
- Bayes 계산: (0.99 * 0.01) / (0.99 * 0.01 + 0.01 * 0.99) = 50%. 가짜 양성 (false positive) 이 prior 가 낮을 때 큰 영향을 줌.
- 핵심 통찰: 증거의 가치는 prior 에 의해 크게 좌우됨.
Bayesian updating: 새 증거가 들어올 때마다 사후 확률이 다음 단계의 사전 확률이 됨. 반복적 학습의 수학적 기반.
시각화
핵심 아이디어
Bayes 정리는 역확률 (inverse probability) 을 구하는 도구. 원인 -> 결과 는 알지만, 결과 -> 원인 은 모를 때 사용.
분모 P(B) 는 전확률 공식 (law of total probability) 으로 전개:
P(B) = P(B|A) * P(A) + P(B|not A) * P(not A)
따라서:
P(A|B) = P(B|A) * P(A) / (P(B|A)*P(A) + P(B|not A)*P(not A))
- A: 가설 (hypothesis)
- B: 데이터 / 증거 (evidence)
- 사후 확률 = (가능도 * 사전 확률) / 증거
Bayesian updating: P(A|B) 가 다음 단계의 P(A) 가 됨. 데이터가 쌓일수록 사후 확률은 true 값으로 수렴.
알고리즘
Bayes(prior, likelihood, falsePos):
evidence = likelihood * prior + falsePos * (1 - prior)
posterior = (likelihood * prior) / evidence
return posterior
Bayesian_update(prior_list, likelihood_func, observation_sequence):
posterior = prior_list
for each obs in observation_sequence:
posterior = Bayes(posterior, likelihood_func(obs), ...)
return posterior
구현
// Bayesian posterior probability calculator
#include <bits/stdc++.h>
using namespace std;
int main() {
// prior: P(A), likelihood: P(B|A), falsePos: P(B|not A)
double prior, likelihood, falsePos;
cin >> prior >> likelihood >> falsePos;
double evidence = likelihood * prior + falsePos * (1.0 - prior);
double posterior = (likelihood * prior) / evidence;
cout << fixed << setprecision(6);
cout << "Posterior P(A|B) = " << posterior << "\n";
cout << "Evidence P(B) = " << evidence << "\n";
return 0;
}0.01 0.99 0.01Posterior P(A|B) = 0.500000
Evidence P(B) = 0.019800복잡도
| 항목 | 값 |
|---|---|
| 시간 (단일 추론) | O(1) |
| 공간 | O(1) |
| 수렴 (Bayesian updating) | O(N) 증거에 대해 선형 수렴 |
| 안정성 | - |
변형 / 활용
- Bayesian updating: 새 증거가 들어올 때마다 사후 -> 사전으로 업데이트. sequential decision making.
- Naive Bayes classifier: P(class | features) ~ P(class) * prod P(feature_i | class). 텍스트 분류, 스팸 필터링의 강력한 baseline.
- Bayesian network: 변수 간 조건부 의존성을 DAG 로 모델링. 진단, 예측, 인과 추론.
- Gaussian Naive Bayes: 연속형 feature 에 정규 분포 가정.
- A/B testing: Bayesian approach 로 전환율의 사후 분포 추정. frequentist 접근 대비 직관적 해석.
함정
1. Base rate fallacy (기저율 오류)
prior (base rate) 를 무시하고 likelihood 만 보는 오류. “검사 정확도 99%” 에 속아 prior 1% 를 잊으면 50% 인 실제 확률을 99% 로 오인.
2. P(B) = 0 인 경우
증거 B 의 확률이 0이면 정리가 성립하지 않음 (0으로 나누기). 이는 B 가 절대 발생하지 않는 사건임을 의미.
3. 독립 가정 위반
Naive Bayes 의 “naive” = feature 간 조건부 독립 가정. 실제로 위반되는 경우가 많지만 classification 성능은 여전히 좋음. 그러나 calibrated probability 추정은 부정확.
4. Prior 선택의 영향
prior 가 부적절하면 (극단적이거나 잘못된 domain knowledge) 사후 확률이 데이터가 많아도 수렴이 느리거나 잘못된 값으로 bias.
BOJ 연습 문제
| 번호 | 제목 | 정답률 | 링크 |
|---|---|---|---|
| BOJ 13251 | 조약돌 꺼내기 | (수집 안 됨) | kokoa-lab |
| BOJ 11051 | 이항 계수 3 | (수집 안 됨) | kokoa-lab |
| BOJ 1010 | 다리 놓기 | (수집 안 됨) | kokoa-lab |
💬 댓글