หลังจาก EP1 Inverse Probability เราได้อธิบายความน่าจะเป็นเบื้องต้นและ Bayes Theorem ไปแล้ว บทความนี้มาลองดูตัวอย่างการใช้งาน Bayes ในสถานการณ์จริงกันบ้าง
Cancer Detection

สมมติเราไปตรวจโรคมะเร็งที่ ร.พ. แห่งหนึ่ง คุณหมอตัดชิ้นเนื้อไปทดสอบและกลับมาบอกเราว่าพบผล positive (+) ในทางการแพทย์ การตรวจเจอผลแบบ positive (+) แปลว่ามีโอกาสที่ผู้ป่วยจะเป็นโรคนั้นๆแต่ยังฟันธงไม่ได้ 100%
ปกติ medical test ต่างๆใน ร.พ. จะมีค่าสถิติที่เราควรรู้ดังนี้
- p(+|cancer) หรือ true positive rate ถ้าผู้ป่วยโรคมะเร็งมาตรวจ จะมีโอกาสได้ผล positive กี่ %? ชื่ออื่นๆของ TPR คือ sensitivity หรือ recall
- p(+|~cancer) หรือ false positive rate ถ้าคนปกติมาตรวจ จะมีโอกาสได้ผล positive กี่ %?
สมมติว่าการตรวจโรคมะเร็งได้รับการพัฒนาจนมีค่า true positive rate 99% และมีค่า false positive rate ที่ 5%
สิ่งที่เราอยากรู้คือความน่าจะเป็นที่เราเป็นโรคมะเร็งถ้าเกิดตรวจเจอผล + หรือเขียนเป็น conditional probability ได้แบบนี้ p(cancer|+) ซึ่งก็คือ inverse probability ของ p(+|cancer)
Recall Bayes Theorem
มาทบทวน Bayes Theorem อีกครั้งหนึ่ง
P(B|A) = P(A|B) * P(B) / P(A)
จาก case study ด้านบน เราสามารถเขียนสมการ Bayes ได้แบบนี้
P(cancer|+) = P(+|cancer) * P(cancer) / P(+)
แทนค่า P(+) ด้วย P(+|cancer) * P(cancer) + P(+|~cancer) * P(~cancer) จะได้
P(cancer|+) = P(+|cancer) * P(cancer) / ( P(+|cancer) * P(cancer) + P(+|~cancer) * P(~cancer) )
Prior Probability
ก่อนที่เราจะไป ร.พ. เราได้เปิด google เพื่อหาข้อมูลเกี่ยวกับโรคมะเร็ง พบว่าคนไทยทุกๆ 10,000 คน มีโอกาสเป็นโรคนี้ 100 คน (1%) Bayesian เรียกความน่าจะเป็นนี้ว่า prior probability
ตอนนี้เรารู้ probability ทางด้านขวามือของสมการ Bayes ทั้งหมดแล้ว
- p(cancer) = 0.01
- p(~cancer) = 1 – 0.01 = 0.99
- p(+|cancer) = 0.99
- p(+|~cancer) = 0.05
แทนค่าที่เรารู้เข้าไปในสมการ Bayes
P(cancer|+) = (0.99 * 0.01) / (0.99 * 0.01 + 0.05 * 0.99)
แก้สมการออกมาจะได้ p(cancer|+) = 0.1667 หรือเท่ากับ 16.67% โดย Bayesian เรียกความน่าจะเป็นนี้ว่า posterior probability
สรุปการตรวจเจอผล + ครั้งแรก รวมกับความรู้ทั้งหมดที่เรามีตอนนี้ (prior) ความน่าจะเป็นที่เราจะเป็นโรคมะเร็งมีแค่ 16.67% (posterior)
Confusion Matrix
จากประสบการณ์ส่วนตัว แอดคิดว่าการนำ prior knowledge มาเขียนเป็นตาราง confusion matrix จะช่วยให้เราเห็นภาพการใช้งาน Bayes ได้ดียิ่งขึ้น
ถ้ามีคนไทย n=10,000 คนไปตรวจโรคมะเร็ง และเรารู้เกี่ยวกับ incidence ของโรคนี้ ค่า true positive rate และ false positive rate ของ medical test เราสามารถสร้างตาราง confusion matrix ได้ง่ายๆ โดยที่แกนตั้งคือผลตรวจ result = {positive, negative} และแกนนอนคือความจริง truth = {cancer, no cancer}
Positive | Negative | Total | |
Cancer | 99 | 1 | 100 |
No Cancer | 495 | 9405 | 9900 |
Total | 594 | 9406 | 10000 |
p(cancer|+) คิดจาก 99 / 594 = 16.67% เท่ากับที่เราคิดได้จาก Bayes formula เป๊ะ!
อธิบาย – คนไทยทุกๆ 10,000 คนพบผู้ป่วยโรคมะเร็ง 1% คิดเป็น 100 คน ถ้าผู้ป่วยหนึ่งร้อยคนนี้ไปตรวจจะได้ผล positive 99 คน และ negative 1 คน ส่วนคนปกติ 9,900 คน มีโอกาสตรวจเจอผล positive 5% คิดเป็น 495 คน และเจอผล negative 9,405 คน
R Code
เราใช้ฟังชั่น matrix()
เพื่อสร้าง confusion matrix ตามตัวอย่างด้านบน ค่า overall accuracy ของ medical test เท่ากับ 95.04% และ p(cancer|+) เท่ากับ 16.67%
overall accuracy ของการตรวจโรคมะเร็งคิดจาก true positive + true negative i.e. ผลรวมเส้นทแยงมุมของ confusion matrix หารด้วยจำนวน sample size ทั้งหมด
# create confusion matrix | |
result <- matrix(c(99,1,495,9405), ncol=2, byrow=T) | |
colnames(result) <- c("Positive", "Negative") | |
rownames(result) <- c("Cancer", "No Cancer") | |
# see the table | |
result | |
sum(result) # n=10000 | |
# overall accuracy of the medical test | |
(99 + 9405) / 10000 # 0.9504 | |
# p(cancer|+) = true positive / all positives | |
99 / (99 + 495) # 0.1667 |
หรือจะใช้ Bayes Theorem ในการคำนวณ p(cancer|+) ตรงๆเลยก็ได้
# what we know | |
p_pos_cancer <- 0.99 | |
p_cancer <- 0.01 | |
p_not_cancer <- 1 - 0.01 | |
p_pos_not_cancer <- 0.05 | |
# bayes theorem | |
p_cancer_pos <- (p_pos_cancer*p_cancer) / (p_pos_cancer*p_cancer + p_pos_not_cancer*p_not_cancer) | |
print(p_cancer_pos) # 0.1667 |
If you get another +

ความยิ่งใหญ่ของ Bayes คือการที่เราสามารถอัพเดทความน่าจะเป็นหรือความเชื่อของเราเกี่ยวกับเหตุการณ์หนึ่งๆด้วยข้อมูลใหม่
Update our belief in light of new data
Thomas Bayes
สมมติว่าเราขอคุณหมอตรวจครั้งที่สองและได้ผลออกมาเป็น + อีกครั้ง ความน่าจะเป็นที่เราจะเป็นโรคมะเร็งจะเพิ่มสูงขึ้นเป็น 79.84% เพราะว่าหลังจากการ test ครั้งที่หนึ่ง posterior ที่เราได้มาคือ 16.67% และค่านี้ถูกนำไปใช้เป็น prior ของการ test ครั้งที่สอง
P(cancer|+) = (0.99 * 0.1667) / (0.99 * 0.1667 + 0.05 * 0.8333) = .7984
ถ้าเราได้ + ในการ test ครั้งที่สาม p(cancer|+) จะเพิ่มสูงขึ้นเป็น 98.74%
P(cancer|+) = (0.99 * 0.7984) / (0.99 * 0.7984 + 0.05 * 0.2016) = .9874
สรุปความน่าจะเป็นที่จะเป็นโรคมะเร็งถ้าผลตรวจออกมาเป็น + จากการ test ทั้งสามครั้งคือ
- p(cancer|+) = 16.67%
- p(cancer|+,+) = 79.84%
- p(cancer|+,+,+) = 98.74%
- posterior ของการ test ครั้งที่ #1 จะกลายเป็น prior ของการ test ครั้งที่ #2
- เราใช้ Bayes ในการ update ความเชื่อของเราต่อเหตุการณ์นั้นๆเวลาที่มีข้อมูลใหม่
ขอบคุณมากครับ
ขอบคุณมากๆเช่นกันครับ