Lý thuyết
1 giờ
Bài 7/15

Xác suất có điều kiện và Bayes

Conditional Probability và Bayes' Theorem

🔮 Xác suất có điều kiện và Bayes' Theorem

Mục tiêu bài học

Sau bài học này, bạn sẽ:

  • Hiểu và tính xác suất có điều kiện
  • Nắm vững Bayes' Theorem
  • Phân biệt Independent vs Dependent events
  • Áp dụng vào bài toán thực tế

1. Xác suất có điều kiện (Conditional Probability)

1.1 Định nghĩa

P(A|B) = Xác suất xảy ra A, biết rằng B đã xảy ra.

P(AB)=P(AB)P(B)P(A|B) = \frac{P(A \cap B)}{P(B)}

Đọc: "P of A given B"

1.2 Ví dụ trực quan

Tung xúc xắc:

  • B = "Số chẵn" = 6
  • A = "Số > 3" = 6

P(A|B) = P(số > 3 | đã biết số chẵn)?

P(AB)=P(AB)P(B)={4,6}/63/6=2/63/6=23P(A|B) = \frac{P(A \cap B)}{P(B)} = \frac{|\{4, 6\}|/6}{3/6} = \frac{2/6}{3/6} = \frac{2}{3}

1.3 Biểu diễn Venn

Biểu diễn Venn - Xác suất có điều kiện

🎯Sample Space S
🔵B (Given)
A only
🔴A ∩ B

Khi biết B xảy ra, sample space thu hẹp thành B.

1.4 Code Python

Python
1# Ví dụ: Tung xúc xắc
2S = {1, 2, 3, 4, 5, 6}
3A = {4, 5, 6} # số > 3
4B = {2, 4, 6} # số chẵn
5
6A_and_B = A & B # {4, 6}
7
8P_A_given_B = len(A_and_B) / len(B)
9print(f"P(A|B) = {P_A_given_B:.4f}") # 0.6667

2. Quy tắc nhân tổng quát

2.1 Công thức

P(AB)=P(AB)×P(B)=P(BA)×P(A)P(A \cap B) = P(A|B) \times P(B) = P(B|A) \times P(A)

2.2 Chain Rule

P(ABC)=P(A)×P(BA)×P(CAB)P(A \cap B \cap C) = P(A) \times P(B|A) \times P(C|A \cap B)

2.3 Ví dụ: Rút bài không hoàn lại

Rút 3 lá từ bộ 52 lá, P(3 lá đều là Át)?

P(3 Aces)=P(A1)×P(A2A1)×P(A3A1A2)P(3 \text{ Aces}) = P(A_1) \times P(A_2|A_1) \times P(A_3|A_1 \cap A_2)

=452×351×250=241326000.00018= \frac{4}{52} \times \frac{3}{51} \times \frac{2}{50} = \frac{24}{132600} \approx 0.00018

Python
1P_3_aces = (4/52) * (3/51) * (2/50)
2print(f"P(3 Aces) = {P_3_aces:.6f}")

3. Biến cố độc lập

3.1 Định nghĩa

A và B độc lập khi và chỉ khi:

P(AB)=P(A)P(A|B) = P(A)

Tương đương: P(AB)=P(A)×P(B)P(A \cap B) = P(A) \times P(B)

3.2 Kiểm tra tính độc lập

Python
1def check_independence(P_A, P_B, P_A_and_B):
2 """Kiểm tra A và B có độc lập không"""
3 expected = P_A * P_B
4 is_independent = abs(P_A_and_B - expected) < 0.0001
5 print(f"P(A) × P(B) = {expected:.4f}")
6 print(f"P(A ∩ B) = {P_A_and_B:.4f}")
7 print(f"Independent: {is_independent}")
8 return is_independent
9
10# Ví dụ
11check_independence(0.5, 0.3, 0.15) # Độc lập
12check_independence(0.5, 0.3, 0.20) # Không độc lập

4. Law of Total Probability

4.1 Công thức

Nếu B1,B2,...,BnB_1, B_2, ..., B_nphân hoạch của S (partition):

P(A)=i=1nP(ABi)×P(Bi)P(A) = \sum_{i=1}^{n} P(A|B_i) \times P(B_i)

4.2 Trường hợp đặc biệt (2 partitions)

P(A)=P(AB)×P(B)+P(AB)×P(B)P(A) = P(A|B) \times P(B) + P(A|B') \times P(B')

4.3 Ví dụ: Nhà máy sản xuất

  • Máy 1: sản xuất 60% sản phẩm, tỷ lệ lỗi 3%
  • Máy 2: sản xuất 40% sản phẩm, tỷ lệ lỗi 5%

P(sản phẩm lỗi)?

P(D)=P(DM1)×P(M1)+P(DM2)×P(M2)P(D) = P(D|M_1) \times P(M_1) + P(D|M_2) \times P(M_2) =0.03×0.60+0.05×0.40=0.018+0.020=0.038= 0.03 \times 0.60 + 0.05 \times 0.40 = 0.018 + 0.020 = 0.038

Python
1P_M1, P_M2 = 0.60, 0.40
2P_D_given_M1 = 0.03
3P_D_given_M2 = 0.05
4
5P_D = P_D_given_M1 * P_M1 + P_D_given_M2 * P_M2
6print(f"P(Defective) = {P_D:.4f}") # 0.038

5. Bayes' Theorem

5.1 Công thức

P(BA)=P(AB)×P(B)P(A)P(B|A) = \frac{P(A|B) \times P(B)}{P(A)}

Dạng đầy đủ:

P(BiA)=P(ABi)×P(Bi)jP(ABj)×P(Bj)P(B_i|A) = \frac{P(A|B_i) \times P(B_i)}{\sum_{j} P(A|B_j) \times P(B_j)}

5.2 Thuật ngữ

TênKý hiệuÝ nghĩa
PriorP(B)Xác suất ban đầu
LikelihoodP(A|B)Xác suất quan sát A khi B đúng
EvidenceP(A)Xác suất quan sát A
PosteriorP(B|A)Xác suất B sau khi quan sát A

Bayes' Theorem - Cập nhật xác suất

📊Prior P(B)
🔍+ Evidence A
🎯Posterior P(B|A)

5.3 Ví dụ: Chẩn đoán bệnh

  • P(Bệnh) = 0.01 (1% dân số mắc bệnh)
  • P(Dương tính | Bệnh) = 0.99 (độ nhạy 99%)
  • P(Dương tính | Không bệnh) = 0.05 (false positive 5%)

Nếu xét nghiệm dương tính, P(thực sự mắc bệnh)?

Bước 1: Tính P(Dương tính) P(+)=P(+B)×P(B)+P(+B)×P(B)P(+) = P(+|B) \times P(B) + P(+|B') \times P(B') =0.99×0.01+0.05×0.99=0.0099+0.0495=0.0594= 0.99 \times 0.01 + 0.05 \times 0.99 = 0.0099 + 0.0495 = 0.0594

Bước 2: Áp dụng Bayes P(B+)=P(+B)×P(B)P(+)=0.99×0.010.0594=0.00990.05940.167P(B|+) = \frac{P(+|B) \times P(B)}{P(+)} = \frac{0.99 \times 0.01}{0.0594} = \frac{0.0099}{0.0594} \approx 0.167

Kết quả bất ngờ!

Dù test có độ chính xác 99%, xác suất thực sự mắc bệnh khi dương tính chỉ ~17%! Đây là do base rate (tỷ lệ mắc bệnh) thấp.

5.4 Code Python

Python
1def bayes_theorem(P_B, P_A_given_B, P_A_given_not_B):
2 """
3 Tính P(B|A) s dng Bayes' Theorem
4 """
5 P_not_B = 1 - P_B
6
7 # P(A) = P(A|B)P(B) + P(A|B')P(B')
8 P_A = P_A_given_B * P_B + P_A_given_not_B * P_not_B
9
10 # Bayes
11 P_B_given_A = (P_A_given_B * P_B) / P_A
12
13 return P_B_given_A, P_A
14
15# Ví dụ chẩn đoán bệnh
16P_disease = 0.01
17P_positive_given_disease = 0.99
18P_positive_given_healthy = 0.05
19
20P_disease_given_positive, P_positive = bayes_theorem(
21 P_disease,
22 P_positive_given_disease,
23 P_positive_given_healthy
24)
25
26print(f"P(Dương tính) = {P_positive:.4f}")
27print(f"P(Bệnh | Dương tính) = {P_disease_given_positive:.4f}")

6. Ví dụ ứng dụng thực tế

6.1 Spam Filter (Naive Bayes)

Python
1# Simplified Spam Filter
2def spam_filter(word, P_spam=0.3, P_word_given_spam=0.8, P_word_given_ham=0.1):
3 """
4 P(Spam | word xut hin)
5 """
6 P_ham = 1 - P_spam
7
8 P_word = P_word_given_spam * P_spam + P_word_given_ham * P_ham
9
10 P_spam_given_word = (P_word_given_spam * P_spam) / P_word
11
12 return P_spam_given_word
13
14# Email chứa từ "FREE"
15P_spam = spam_filter("FREE", P_spam=0.3, P_word_given_spam=0.8, P_word_given_ham=0.1)
16print(f"P(Spam | 'FREE') = {P_spam:.4f}") # ~0.77

6.2 A/B Testing với Bayesian

Python
1import numpy as np
2from scipy import stats
3
4def bayesian_ab_test(successes_A, trials_A, successes_B, trials_B, n_samples=100000):
5 """
6 Bayesian A/B Testing
7 """
8 # Beta posterior distributions
9 # Prior: Beta(1,1) = Uniform
10 alpha_A = 1 + successes_A
11 beta_A = 1 + trials_A - successes_A
12
13 alpha_B = 1 + successes_B
14 beta_B = 1 + trials_B - successes_B
15
16 # Sample from posteriors
17 samples_A = np.random.beta(alpha_A, beta_A, n_samples)
18 samples_B = np.random.beta(alpha_B, beta_B, n_samples)
19
20 # P(B > A)
21 prob_B_better = np.mean(samples_B > samples_A)
22
23 return prob_B_better
24
25# Ví dụ: A/B test cho conversion rate
26# A: 120 conversions / 1000 visitors
27# B: 150 conversions / 1000 visitors
28prob = bayesian_ab_test(120, 1000, 150, 1000)
29print(f"P(B better than A) = {prob:.4f}")

7. Confusion Matrix và Bayes

7.1 Các độ đo

Độ đoCông thứcÝ nghĩa
Sensitivity (TPR)P(+|Disease)True Positive Rate
Specificity (TNR)P(-|No Disease)True Negative Rate
PPVP(Disease|+)Positive Predictive Value
NPVP(No Disease|-)Negative Predictive Value

7.2 Code minh họa

Python
1def diagnostic_metrics(prevalence, sensitivity, specificity, n=10000):
2 """
3 Tính các metrics chn đoán
4 """
5 # Số người
6 n_disease = int(prevalence * n)
7 n_healthy = n - n_disease
8
9 # True/False Positives/Negatives
10 TP = int(sensitivity * n_disease)
11 FN = n_disease - TP
12 TN = int(specificity * n_healthy)
13 FP = n_healthy - TN
14
15 # Metrics
16 PPV = TP / (TP + FP) if (TP + FP) > 0 else 0
17 NPV = TN / (TN + FN) if (TN + FN) > 0 else 0
18
19 print("=== Confusion Matrix ===")
20 print(f" Disease+ Disease-")
21 print(f"Test+ {TP:6d} {FP:6d}")
22 print(f"Test- {FN:6d} {TN:6d}")
23 print(f"\nPrevalence: {prevalence:.2%}")
24 print(f"Sensitivity: {sensitivity:.2%}")
25 print(f"Specificity: {specificity:.2%}")
26 print(f"PPV (P(Disease|+)): {PPV:.2%}")
27 print(f"NPV (P(Healthy|-)): {NPV:.2%}")
28
29 return PPV, NPV
30
31# Ví dụ
32diagnostic_metrics(prevalence=0.01, sensitivity=0.99, specificity=0.95)

8. Bài tập thực hành

Bài tập 1: Conditional Probability

Trong lớp 100 sinh viên:

  • 60 nam, 40 nữ
  • 15 nam và 10 nữ đạt loại giỏi
  1. P(Giỏi | Nam)?
  2. P(Nam | Giỏi)?
  3. Nam và Giỏi có độc lập không?

Bài tập 2: Bayes' Theorem

Công ty có 3 nhà máy:

  • Nhà máy A: 50% sản lượng, 2% lỗi
  • Nhà máy B: 30% sản lượng, 3% lỗi
  • Nhà máy C: 20% sản lượng, 4% lỗi

Chọn ngẫu nhiên 1 sản phẩm bị lỗi:

  1. Tính P(Lỗi)
  2. P(từ nhà máy A | Lỗi)?

Bài tập 3: Medical Test

  • Tỷ lệ mắc bệnh: 5%
  • Độ nhạy (sensitivity): 90%
  • Độ đặc hiệu (specificity): 80%
  1. P(Bệnh | Test +)?
  2. P(Khỏe | Test -)?
  3. Nếu test 2 lần đều dương tính, P(Bệnh)?

Tóm tắt

Công thứcÝ nghĩa
P(AB)=P(AB)P(B)P(A\|B) = \frac{P(A \cap B)}{P(B)}Xác suất có điều kiện
P(A)=P(ABi)P(Bi)P(A) = \sum P(A\|B_i)P(B_i)Total Probability
P(BA)=P(AB)P(B)P(A)P(B\|A) = \frac{P(A\|B)P(B)}{P(A)}Bayes' Theorem
Key Takeaways
  1. Conditional probability thu hẹp sample space
  2. Bayes' Theorem cập nhật belief dựa trên evidence
  3. Base rate (prior) rất quan trọng
  4. Independence: P(A|B) = P(A)
  5. Bayes được dùng trong ML (Naive Bayes, Bayesian inference)