🔮 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.
Đọ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)?
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ắc2S = {1, 2, 3, 4, 5, 6}3A = {4, 5, 6} # số > 34B = {2, 4, 6} # số chẵn56A_and_B = A & B # {4, 6}78P_A_given_B = len(A_and_B) / len(B)9print(f"P(A|B) = {P_A_given_B:.4f}") # 0.66672. Quy tắc nhân tổng quát
2.1 Công thức
2.2 Chain Rule
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)?
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:
Tương đương:
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_B4 is_independent = abs(P_A_and_B - expected) < 0.00015 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_independent910# Ví dụ11check_independence(0.5, 0.3, 0.15) # Độc lập12check_independence(0.5, 0.3, 0.20) # Không độc lập4. Law of Total Probability
4.1 Công thức
Nếu là phân hoạch của S (partition):
4.2 Trường hợp đặc biệt (2 partitions)
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)?
Python
1P_M1, P_M2 = 0.60, 0.402P_D_given_M1 = 0.033P_D_given_M2 = 0.0545P_D = P_D_given_M1 * P_M1 + P_D_given_M2 * P_M26print(f"P(Defective) = {P_D:.4f}") # 0.0385. Bayes' Theorem
5.1 Công thức
Dạng đầy đủ:
5.2 Thuật ngữ
| Tên | Ký hiệu | Ý nghĩa |
|---|---|---|
| Prior | P(B) | Xác suất ban đầu |
| Likelihood | P(A|B) | Xác suất quan sát A khi B đúng |
| Evidence | P(A) | Xác suất quan sát A |
| Posterior | P(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)
Bước 2: Áp dụng Bayes
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ử dụng Bayes' Theorem4 """5 P_not_B = 1 - P_B6 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_B9 10 # Bayes11 P_B_given_A = (P_A_given_B * P_B) / P_A12 13 return P_B_given_A, P_A1415# Ví dụ chẩn đoán bệnh16P_disease = 0.0117P_positive_given_disease = 0.9918P_positive_given_healthy = 0.051920P_disease_given_positive, P_positive = bayes_theorem(21 P_disease, 22 P_positive_given_disease, 23 P_positive_given_healthy24)2526print(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 Filter2def spam_filter(word, P_spam=0.3, P_word_given_spam=0.8, P_word_given_ham=0.1):3 """4 P(Spam | word xuất hiện)5 """6 P_ham = 1 - P_spam7 8 P_word = P_word_given_spam * P_spam + P_word_given_ham * P_ham9 10 P_spam_given_word = (P_word_given_spam * P_spam) / P_word11 12 return P_spam_given_word1314# 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.776.2 A/B Testing với Bayesian
Python
1import numpy as np2from scipy import stats34def bayesian_ab_test(successes_A, trials_A, successes_B, trials_B, n_samples=100000):5 """6 Bayesian A/B Testing7 """8 # Beta posterior distributions9 # Prior: Beta(1,1) = Uniform10 alpha_A = 1 + successes_A11 beta_A = 1 + trials_A - successes_A12 13 alpha_B = 1 + successes_B14 beta_B = 1 + trials_B - successes_B15 16 # Sample from posteriors17 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_better2425# Ví dụ: A/B test cho conversion rate26# A: 120 conversions / 1000 visitors27# B: 150 conversions / 1000 visitors28prob = 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
| Độ đo | Công thức | Ý nghĩa |
|---|---|---|
| Sensitivity (TPR) | P(+|Disease) | True Positive Rate |
| Specificity (TNR) | P(-|No Disease) | True Negative Rate |
| PPV | P(Disease|+) | Positive Predictive Value |
| NPV | P(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 chẩn đoán4 """5 # Số người6 n_disease = int(prevalence * n)7 n_healthy = n - n_disease8 9 # True/False Positives/Negatives10 TP = int(sensitivity * n_disease)11 FN = n_disease - TP12 TN = int(specificity * n_healthy)13 FP = n_healthy - TN14 15 # Metrics16 PPV = TP / (TP + FP) if (TP + FP) > 0 else 017 NPV = TN / (TN + FN) if (TN + FN) > 0 else 018 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, NPV3031# 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
- P(Giỏi | Nam)?
- P(Nam | Giỏi)?
- 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:
- Tính P(Lỗi)
- 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%
- P(Bệnh | Test +)?
- P(Khỏe | Test -)?
- Nếu test 2 lần đều dương tính, P(Bệnh)?
Tóm tắt
| Công thức | Ý nghĩa |
|---|---|
| Xác suất có điều kiện | |
| Total Probability | |
| Bayes' Theorem |
Key Takeaways
- Conditional probability thu hẹp sample space
- Bayes' Theorem cập nhật belief dựa trên evidence
- Base rate (prior) rất quan trọng
- Independence: P(A|B) = P(A)
- Bayes được dùng trong ML (Naive Bayes, Bayesian inference)
