비버놀로지

[나이브 베이즈 분류] 유방암 검사 키트 본문

인공지능 머신러닝

[나이브 베이즈 분류] 유방암 검사 키트

KUNDUZ 2022. 11. 3. 09:22
728x90

유방암 검사 키트

40대 여성이 mammogram(X-ray) 검사를 통해 유방암 양성 의심 판정을 받았을 때 유방암을 실제로 가지고 있을 확률은 어떻게 될까요?

mammogram_test() 함수를 구현하며 베이즈 법칙을 직접 응용해보겠습니다. mammogram_test() 함수는 세 가지 숫자를 입력 받습니다.

  • sensitivity - 검사의 민감성을 뜻합니다. 유방암 보유자를 대상으로 검사 결과가 양성으로 표시될 확률입니다. 0부터 1 사이의 값을 갖습니다.
  • prior_prob - 총 인구를 기준으로 유방암을 가지고 있을 사전 확률(prior probability)입니다. 0.004 정도로 매우 낮은 값입니다.
  • false_alarm - 실제로는 암을 갖고 있지 않지만 유방암이라고 진단될 확률입니다. 0.1 정도로 생각보다 높은 값입니다.

입력 받은 세 값을 바탕으로 나이브 법칙을 이용해 유방암 보유 여부를 확률로 출력합니다.

>>> 0.8
>>> 0.004
>>> 0.1
3.11%
 

실습

A=1 은 Mammogram 검사를 통해 암으로 진단되는 경우, B=1 은 실제로 유방암을 가지고 있는 경우입니다.

1. sensitivity는 P(A=1∣B=1)로 표현할 수 있습니다. 암을 실제로 가지고 있을 때 암으로 진단될 확률이 80%라면

 

P(A=1∣B=1)=0.8

 

2. 일반적으로 유방암을 가지고 있을 확률은, 즉 prior_prob의 값은 매우 낮습니다:

 

P(B=1)=0.004

 

3.유방암을 가지고 있지 않을 확률은 1에서 prior_prob를 빼면 됩니다:

 

P(B=0)=1−P(B=1)=0.996

 

4.실제로 암을 가지고 있지 않지만 암으로 진단되는 확률, false_alarm는 생각보다 매우 높습니다:

 

P(A=1∣B=0)=0.1

 

5. Mammogram 검사를 통해 암으로 진단되는 경우의 확률, P(A=1)를 구해보겠습니다:

 

P(A=1)
=P(A=1∣B=0)P(B=0)
+P(A=1∣B=1)P(B=1)

=0.1×0.996+0.8×0.004
=0.1028

 

6.유방암 진단을 받았을 때 실제로 유방암을 가지고 있을 확률을 베이즈 법칙을 이용해 계산하면 다음과 같습니다:

 

 

def main():
    sensitivity = float(input())
    prior_prob = float(input())
    false_alarm = float(input())

    print("%.2lf%%" % (100 * mammogram_test(sensitivity, prior_prob, false_alarm)))

def mammogram_test(sensitivity, prior_prob, false_alarm):
    p_a1_b1 = sensitivity # p(A = 1 | B = 1)

    p_b1 = prior_prob    # p(B = 1)

    p_b0 = 1 - prior_prob    # p(B = 0)

    p_a1_b0 = false_alarm # p(A = 1|B = 0)

    p_a1 = p_a1_b0*p_b0 + p_a1_b1*p_b1   # p(A = 1)

    p_b1_a1 = p_a1_b1*p_b1/p_a1 # p(B = 1|A = 1)

    return p_b1_a1

if __name__ == "__main__":
    main()

 

 

728x90
Comments