AI 수학 로드맵 노트 10 — 베이즈 정리, 검사 결과를 뒤집어 읽기

표 3 · 도식 1작성 Rhymbro

제1원리 질문. 민감도 99% 검사에서 양성이 나왔는데 왜 실제로 병이 있을 확률은 훨씬 낮을 수 있는가. 우리가 아는 것은 ‘병이 있을 때 양성이 나올 확률’인데 궁금한 것은 ‘양성일 때 병이 있을 확률’이라 조건의 방향이 반대이고, 이 방향을 뒤집으려면 원래 얼마나 흔한 병인지(사전확률)를 반드시 넣어야 하기 때문이다.

사전확률 0.01, 민감도 0.99, 거짓 양성률 0.05에서 양성일 때 병이 있을 확률을 구하는 흐름도
개념도 — 베이즈 정리 적용 예. 본문 내용을 바탕으로 자체 제작

핵심 — 조건의 방향 뒤집기

로드맵은 51주차 조건부 확률을 “정보가 들어오면 확률이 바뀐다”, 53주차 베이즈 정리를 “믿음의 업데이트 — 검사 결과 뒤집어 읽기”로 요약한다. 식은 P(병 | 양성) = P(양성 | 병) × P(병) / P(양성)이다.

기호 이름 이번 예의 값 (가정)
P(병) 사전확률(prior) 0.01 (100명 중 1명)
P(양성 | 병) 민감도 0.99
P(양성 | 병 없음) 거짓 양성률 0.05
P(병 | 양성) 사후확률(posterior) 계산 결과 약 0.1667

1만 명으로 세어 보기가정: 유병률 1%, 민감도 99%, 거짓 양성률 5%1만 명병 100 / 없음 9,900병 있음 양성100 × 0.99 = 99병 없음 양성9,900 × 0.05 = 495양성 중 병99 / 594 ≈ 16.7%

확률 식보다 사람 수로 세면 직관이 빨리 잡힌다. 양성 594명 중 대부분(495명)이 거짓 양성이다.

코드로 번역하기

식 그대로 계산한 값과 1만 명으로 센 값이 같은지 함께 확인한다. 세 입력값은 모두 설명용 가정 값이다.

# 베이즈 정리: P(병|양성) = P(양성|병) * P(병) / P(양성)
p_d   = 0.01    # 사전확률: 유병률 1% (가정 값)
sens  = 0.99    # 병이 있을 때 양성 확률 (가정 값)
fpr   = 0.05    # 병이 없는데 양성 확률 (가정 값)

p_pos = sens * p_d + fpr * (1 - p_d)       # 전체 양성 확률
post  = sens * p_d / p_pos                 # 사후확률
print(round(p_pos, 4))                     # 0.0594
print(round(post, 4))                      # 0.1667

# 1만 명으로 세어 보기
N = 10_000
sick_pos = N * p_d * sens                  # 99명
well_pos = N * (1 - p_d) * fpr             # 495명
print(sick_pos, well_pos, round(sick_pos / (sick_pos + well_pos), 4))

실행 결과

0.0594
0.1667
99.0 495.0 0.1667

사례 적용 — 사전확률이 결과를 지배한다

민감도가 99%여도 사후확률이 약 17%에 그친 이유는 병이 드물기 때문이다. 병이 없는 사람이 워낙 많아서, 그중 5%만 잘못 양성이 나와도 진짜 양성보다 수가 많아진다. 같은 검사를 한 번 더 해서 또 양성이 나오면, 이번 사후확률 0.1667이 다음 계산의 사전확률이 된다. 이것이 ‘믿음의 업데이트’라는 표현의 뜻이다.

로드맵 54주차는 이 구조를 스팸 필터로 옮긴다. ‘스팸일 사전확률’에서 출발해 메일 속 단어 하나하나를 증거로 삼아 확률을 계속 업데이트하는 방식이고, 64주차 미니 프로젝트가 이를 직접 구현하는 ‘나이브 베이즈 스팸 분류기’다. 2편에서 본 ‘곱셈을 로그의 덧셈으로’ 바꾸는 성질이 이 계산에서 다시 쓰인다.

1분 개념 체크

로드맵 교재 템플릿의 ‘1분 개념 체크’ 형식을 빌려 스스로 확인할 문제 두 개를 만들었다.

질문 답 근거
이번 예에서 1만 명 중 양성 판정은 모두 몇 명인가? 594명 99 + 495
양성이 다시 나올 때 다음 계산의 사전확률은? 약 0.1667 이번 사후확률이 새 사전확률

내 해석 — Rhymbro가 읽은 것

베이즈 정리를 보며 설비 알람 해석이 떠올랐다. 이상 감지 알람의 감지율이 높아도 실제 고장이 드문 설비라면, 울린 알람 대부분이 오경보일 수 있다. 알람 하나만 보고 판단하기보다 ‘원래 이 고장이 얼마나 드문가’를 함께 넣어야 한다는 점에서, 베이즈 정리는 현장 판단의 순서를 수식으로 적은 것처럼 읽혔다.

또 입력값 셋 중 하나만 바꿔도 결과가 크게 달라진다는 점이 인상적이었다. 유병률을 1%에서 10%로 바꾸면 결과가 어떻게 되는지는 직접 계산해 볼 과제로 남겨 둔다.

한계로, 사전확률 값 자체를 정확히 알기 어려운 경우가 많아서, 베이즈 계산의 결과는 입력한 사전확률의 신뢰도를 넘을 수 없다.

요약

항목 정리
식 P(A | B) = P(B | A) P(A) / P(B)
핵심 조건의 방향을 뒤집을 때 사전확률이 필요
이번 예 민감도 99%, 거짓 양성률 5%, 유병률 1% → 양성 시 약 16.7%
업데이트 이번 사후확률 = 다음 사전확률

그래서 나는 무엇을 하기로 했나

이번 주는 같은 코드에서 유병률을 0.1%, 1%, 10%로 바꿔 사후확률 표를 만들고, 검사를 두 번 연속 양성으로 받았을 때의 값도 계산해 보기로 했다.

주제와 순서는 개인 학습용으로 정리한 104주 AI 수학 로드맵 목차를 따랐고, 설명과 예제는 그 목차를 바탕으로 내 언어로 다시 썼다. 코드는 Python 3 + NumPy 2.x에서 실행해 출력을 확인했으며, 예시 수치는 설명용 가정 값이다.

함께 읽기: AI 수학, 네 기둥만 먼저 세운다 — 내가 잡은 로드맵

같은 카테고리에서 함께 읽기

강의자료 121편

댓글 1개

댓글 남기기

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