사후확률(Post Probability)~베이즈정리(Baye’s theorem)

사후확률(Posterior Probability)은 베이즈 정리(Bayes’ theorem)에 기반한 개념으로, 특정 사건이 발생한 후에 그 사건에 대한 조건부 확률을 업데이트하는 과정입니다. 이는 새로운 증거나 정보를 고려하여 기존의 확률을 수정하는 방법을 제공합니다.

\(\)

베이즈 정리

베이즈 정리는 다음과 같은 수식으로 표현됩니다:

\[
P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
\]

여기서,

  • \( P(A|B) \)는 B가 발생한 후 A가 발생할 사후확률입니다.
  • \( P(B|A) \)는 A가 발생한 조건에서 B가 발생할 확률입니다.
  • \( P(A) \)는 A가 발생할 사전확률(Prior Probability)입니다.
  • \( P(B) \)는 B가 발생할 전체 확률입니다.

사후확률의 해석

사후확률은 새로운 증거가 주어졌을 때 어떤 사건이 발생할 확률을 나타냅니다. 이는 다음과 같은 단계로 이해할 수 있습니다:

  1. 사전확률(Prior Probability): 사건 A가 발생할 초기 확률을 설정합니다. 이 확률은 기존의 정보나 경험에 기반합니다.
  2. 가능도(Likelihood): 사건 A가 발생한 경우 증거 B가 발생할 확률을 계산합니다.
  3. 주변확률(Marginal Probability): 증거 B가 발생할 전체 확률을 계산합니다. 이는 모든 가능한 사건을 고려하여 B가 발생할 확률입니다.
  4. 사후확률(Posterior Probability): 새로운 증거 B를 고려하여 사건 A의 확률을 업데이트합니다.

예시

질병 진단에서 사후확률의 사용 예를 들어보겠습니다.

  • 사전확률(Prior Probability): 어떤 질병이 전체 인구에서 발생할 확률이 1%라고 가정합니다.
  • 가능도(Likelihood): 그 질병에 대해 특정 검사가 양성일 확률이 90%라고 가정합니다.
  • 주변확률(Marginal Probability): 그 검사가 전체 인구에서 양성일 확률이 10%라고 가정합니다.

베이즈 정리를 적용하여, 검사가 양성인 경우 그 사람이 실제로 질병에 걸렸을 확률(사후확률)을 계산합니다.

\[
P(\text{질병|양성}) = \frac{P(\text{양성|질병}) \cdot P(\text{질병})}{P(\text{양성})}
\]

즉,

\[
P(\text{질병|양성}) = \frac{0.9 \cdot 0.01}{0.1} = \frac{0.009}{0.1} = 0.09
\]

검사가 양성인 경우 그 사람이 실제로 질병에 걸렸을 확률은 9%입니다.

사후확률의 활용

사후확률은 다양한 분야에서 활용됩니다. 예를 들어:

  • 의학: 질병 진단에서 검사의 결과를 토대로 질병의 확률을 갱신합니다.
  • 기계 학습: 모델의 예측을 개선하기 위해 새로운 데이터를 고려합니다.
  • 경제학: 새로운 경제 데이터를 반영하여 예측을 수정합니다.

Python을 이용한 사후확률 계산 예제

def bayes_theorem(prior_A, likelihood_B_given_A, marginal_B):
    # 베이즈 정리를 사용하여 사후확률 계산
    posterior_A_given_B = (likelihood_B_given_A * prior_A) / marginal_B
    return posterior_A_given_B

# 예제 값
prior_A = 0.01  # 사전확률: 질병 발생 확률
likelihood_B_given_A = 0.9  # 가능도: 질병이 있는 경우 양성 검사 확률
marginal_B = 0.1  # 주변확률: 전체 인구에서 양성 검사 확률

# 사후확률 계산
posterior = bayes_theorem(prior_A, likelihood_B_given_A, marginal_B)
print(f"사후확률: {posterior:.2f}")

이 코드는 사전확률, 가능도, 주변확률을 입력받아 사후확률을 계산합니다. 위 예제에서는 사후확률이 0.09, 즉 9%로 계산됩니다.

예제 1 : 벤다이어그램을 이용한 사후확률 계산 예제

위 벤 다이어그램은 질병과 양성 검사 결과에 대한 확률을 시각적으로 나타낸 것입니다.

  • 질병(Disease, P(A)): 전체 인구 중 질병이 있는 사람의 비율 (1%).
  • 양성 검사(Positive Test, P(B)): 전체 인구 중 양성 검사를 받은 사람의 비율 (10%).
  • 질병과 양성 검사(Disease and Positive Test, P(A and B)): 질병이 있고 양성 검사를 받은 사람의 비율 (질병이 있는 경우 양성 검사를 받을 확률 90% * 질병이 있을 확률 1%).

이 다이어그램을 통해 새로운 정보(양성 검사 결과)를 고려하여 사후확률을 계산하는 과정을 이해할 수 있습니다.

예제 2 : 자동차 공장에서의 사후화률

사후확률과 베이즈 정리의 벤다이어그램 설명

자동차 공장에서 불량 제품의 사후확률을 베이즈 정리를 통해 설명하고, 이를 벤다이어그램으로 시각화해보겠습니다.

예시 상황

  1. 사전확률 (P(불량)): 공장에서 생산된 제품 중 불량일 확률 = 2% (0.02).
  2. 검사의 민감도 (P(양성 | 불량)): 불량 제품이 있을 때 검사가 양성일 확률 = 95% (0.95).
  3. 검사의 위양성율 (P(양성 | 정상)): 정상 제품이지만 검사가 양성일 확률 = 10% (0.10).
  4. 양성률 (P(양성)): 전체 제품에서 검사 결과가 양성일 확률.

베이즈 정리를 통해 검사 결과가 양성일 때 실제로 불량일 확률(P(불량 | 양성))을 계산합니다.

베이즈 정리 적용

\[
P(\text{불량|양성}) = \frac{P(\text{양성|불량}) \cdot P(\text{불량})}{P(\text{양성})}
\]

여기서 P(양성)는 전체 제품에서 검사 결과가 양성일 확률로, 다음과 같이 계산됩니다:

\[
P(\text{양성}) = P(\text{양성|불량}) \cdot P(\text{불량}) + P(\text{양성|정상}) \cdot P(\text{정상})
\]

P(정상)는 1 – P(불량)입니다.

\[
P(\text{양성}) = (0.95 \cdot 0.02) + (0.10 \cdot 0.98) = 0.019 + 0.098 = 0.117
\]

따라서, 사후확률 P(불량|양성)은 다음과 같이 계산됩니다:

\[
P(\text{불량|양성}) = \frac{0.95 \cdot 0.02}{0.117} \approx 0.162
\]

즉, 검사 결과가 양성일 때 실제로 불량일 확률은 약 16.2%입니다.

벤다이어그램을 통한 시각화

  1. 전체 제품 집합: 전체 제품 중 불량 제품과 정상 제품.
  2. 양성 검사 집합: 검사 결과가 양성인 제품.

이 두 집합이 겹치는 부분을 통해 사후확률을 시각화할 수 있습니다.

벤다이어그램을 그려보겠습니다.

import matplotlib.pyplot as plt
from matplotlib_venn import venn2

# Define the subsets
total_products = 1.0
defective_products = 0.02
non_defective_products = total_products - defective_products
positive_test_defective = 0.95 * defective_products
positive_test_non_defective = 0.10 * non_defective_products
positive_test_total = positive_test_defective + positive_test_non_defective

# Sizes for Venn diagram
sizes = {
    '10': positive_test_non_defective,  # Positive but not defective
    '01': positive_test_defective,      # Defective but not positive
    '11': positive_test_defective       # Both positive and defective
}

# Create Venn diagram
plt.figure(figsize=(10, 7))
venn = venn2(subsets=sizes, set_labels=('Positive Test', 'Defective Product'))
venn.get_label_by_id('10').set_text('False Positive')
venn.get_label_by_id('01').set_text('False Negative')
venn.get_label_by_id('11').set_text('True Positive')

plt.title("Venn Diagram of Positive Test and Defective Products")
plt.show()

이 그림은 전체 제품 중에서 양성 검사 결과를 받은 제품과 실제로 불량인 제품의 관계를 시각적으로 나타냅니다. 이를 통해 검사 결과가 양성일 때 실제로 불량일 확률을 시각적으로 이해할 수 있습니다.

예제 3 : 벤다이어그램을 통한 시각화

베이즈 정리를 사용하여 사후 확률을 계산하는 예제를 보여드리겠습니다. 예제는 의료 진단 시나리오를 바탕으로 합니다.

시나리오

어떤 질병에 대해 검사하는 경우를 생각해 봅시다.

  • 특정 질병에 걸릴 사전 확률 \(( P(A) )\)은 1% (0.01)입니다.
  • 질병이 있는 경우 검사가 양성일 확률 \(( P(B|A) )\)은 99% (0.99)입니다.
  • 질병이 없는 경우 검사가 양성일 확률 \(( P(B|~A) )\)은 5% (0.05)입니다.

이제, 검사가 양성일 때 실제로 질병이 있을 확률 (( P(A|B) ))을 계산해보겠습니다.

베이즈 정리 공식

베이즈 정리는 다음과 같이 정의됩니다:

\[
P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
\]

여기서 ( P(B) )는 전체 양성 검사 확률로, 다음과 같이 계산됩니다:

\[
P(B) = P(B|A) \cdot P(A) + P(B|~A) \cdot P(~A)
\]

계산 과정

  1. 사전 확률 \(( P(A) )\): 0.01
  2. 질병이 있을 때 양성일 확률 \(( P(B|A) )\): 0.99
  3. 질병이 없을 때 양성일 확률 \(( P(B|~A) )\): 0.05
  4. 질병이 없을 확률 \(( P(~A) )): 1 – ( P(A) \) = 0.99

\[
P(B) = (0.99 \times 0.01) + (0.05 \times 0.99)
\]

\[
P(B) = 0.0099 + 0.0495 = 0.0594
\]

이제 베이즈 정리를 적용하여 ( P(A|B) )를 계산합니다:

\[
P(A|B) = \frac{0.99 \times 0.01}{0.0594} = \frac{0.0099}{0.0594} \approx 0.1667
\]

따라서, 검사가 양성일 때 실제로 질병이 있을 확률은 약 16.67%입니다.

Python 코드 예제

위 계산을 Python 코드로 작성해 보겠습니다.

# Given probabilities
P_A = 0.01  # Prior probability of having the disease
P_B_given_A = 0.99  # Probability of testing positive given the disease
P_B_given_not_A = 0.05  # Probability of testing positive given no disease

# Complementary probability
P_not_A = 1 - P_A

# Total probability of testing positive
P_B = P_B_given_A * P_A + P_B_given_not_A * P_not_A

# Posterior probability
P_A_given_B = (P_B_given_A * P_A) / P_B

print(f"Total probability of testing positive, P(B): {P_B:.4f}")
print(f"Posterior probability of having the disease given a positive test, P(A|B): {P_A_given_B:.4f}")

이 코드를 실행하면 다음과 같은 결과가 나옵니다:

Total probability of testing positive, P(B): 0.0594
Posterior probability of having the disease given a positive test, P(A|B): 0.1667

이를 통해, 검사가 양성일 때 실제로 질병이 있을 확률을 구할 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤