C.W.K.
Stream
Lesson 04 of 05 · published

결합: 동전 두 개는 동전 한 개 두 번이 아니야

~12 min · joint, marginal, chain-rule, foundations

Level 0통계 초심자
0 XP0/55 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete
"확률의 산수는 *곱셈*이지 덧셈이 아니야. 덧셈은 *동시에 못 일어나는 것* 용. 곱셈은 *동시에 일어날 수 있는 것* 용."

비슷해 보이는데 세 가지 다른 의미

확률 문장에 세 단어가 늘 등장하는데 대부분 독자는 뭉개:

  • Marginal (주변) — P(A) 만. 다른 모든 걸 무시한 A 의 확률. "전체 인구 중 60세 이상 비율?"
  • Joint (결합) — P(A 그리고 B). A 와 B 가 *함께* 일어날 확률. "전체 인구 중 60세 이상 AND 심장마비 둘 다인 비율?"
  • Conditional (조건부) — P(A | B). *B 가 참인 우주* 안에서 A 의 확률. "60세 이상인 사람들 중에서 심장마비 비율?"

세 다른 질문. 세 다른 숫자. 하나의 항등식으로 연결돼: P(A 그리고 B) = P(A | B) × P(B). *결합* = *조건부* × *조건의 marginal*.

'OR' vs 'AND' 함정

시민 실수는 *접속사 (and) 인데 덧셈을 잡는 것*. "비 올 확률이 60% AND 우산 깜빡할 확률이 30%, 그러니까 젖을 확률은 60% + 30% = 90%". 두 군데 틀려.

*AND (joint)* 면 *곱해*. 만약 둘이 독립이면: 0.60 × 0.30 = 0.18. 둘 다일 확률 18%, 90% 가 아니야.

*OR (union)* 면 더해 — 그리고 *겹침을 빼* 야 해 두 번 안 세지. P(A 또는 B) = P(A) + P(B) − P(A 그리고 B).

직관 함정은 영어의 'and' 가 '합' 처럼 들린다는 것. 한국어도 '그리고' 가 합처럼 느껴져. 아니야. 확률에서 AND 는 *곱* (사건이 독립이 아니면 조건부 변형); OR 는 *합 빼기 겹침*.

Chain Rule — 비독립일 때의 joint

A 와 B 가 독립일 때, P(A 그리고 B) = P(A) × P(B). 깔끔.

독립이 아닐 때 — 직전 lesson 에서 짚었듯 *대부분의 경우* — *체인 룰 (chain rule)* 이 필요해: P(A 그리고 B) = P(A | B) × P(B). 이렇게 읽어: "먼저 B 사건을 살아남았어, 확률 P(B); 그러고 나서, 살아남은 조건 하에 A 가 P(A | B) 확률로 일어남". 체인 룰은 조건부 확률이 *결합에 대해 정직해지는 형태*야.

동전 두 개는 동전 한 개 두 번이 아니야

두 사건의 joint 는 어느 marginal 과도 *다른 공간* 에 살아. 공정한 동전 둘을 함께 던져도 '한 동전을 두 번 던진 결과의 앞면 확률 2배' 가 안 나와. 2x2 결합 분포가 나와: HH, HT, TH, TT — 각 확률 0.25. 확률의 산수는 *결합 공간* 에서 일어나지, *marginal 둘을 옆에 쌓아둔* 공간에서 일어나지 않아.

이게 곧바로 어디서 중요해지는가

베이즈 정리의 *likelihood (가능도)* 함수가 정확히 *여러 관측의 joint 확률*이고, 조건부를 곱해서 계산해. 현대 통계학과 머신러닝의 일꾼인 *최대 가능도 추정 (MLE)* 은 그 큰 joint 확률을 *최대화하는 가설을 고르는 기예*야. 여기서 곱셈을 정확히 할 수 있으면 likelihood 를 읽을 수 있어. 못 하면 뒤따르는 모든 기법이 *겉은 멀쩡하고 속은 다 틀린* 상태가 돼.

Code

Joint, marginal, chain rule 나란히 보기·python
import numpy as np
rng = np.random.default_rng(2)

# 2x2 결합 분포: 비 (R) vs 우산 깜빡 (F).
# 둘은 *독립이 아니야* — 아침이 맑으면 우산을 더 자주 깜빡해
# (집에서 챙기지 않으니까).
N = 100_000
rain     = rng.random(N) < 0.30   # P(R)  = 0.30
# 깜빡함은 *비 안 옴* 과 상관 (하늘이 위협적일 때만 우산 챙김).
forgot   = np.where(rain, rng.random(N) < 0.10, rng.random(N) < 0.50)

P_R  = rain.mean()
P_F  = forgot.mean()
P_RF = (rain & forgot).mean()
P_F_given_R = forgot[rain].mean()

print(f"Marginal P(비)               = {P_R:.3f}")
print(f"Marginal P(우산 깜빡)        = {P_F:.3f}")
print(f"Joint    P(비 AND 깜빡)       = {P_RF:.3f}")
print(f"Chain    P(깜빡|비)*P(비)     = {P_F_given_R * P_R:.3f}  <- joint 와 일치")
print(f"Product  P(비)*P(깜빡)       = {P_R * P_F:.3f}           <- 틀림: 독립 가정")

# Chain-rule 버전이 경험적 joint 와 일치.
# Marginal 의 단순 곱은 어긋남 — *결합이 실제로 있는데 독립을 가정한* 대가.

External links

Exercise

사는 도시의 아침 날씨 예시로 세 숫자 추정: marginal P(랜덤 아침에 비), conditional P(우산 챙김 | 비 옴), joint P(비 AND 우산 챙김). joint 가 *비 marginal 보다 작거나 같은지* 확인해 — 그렇지 않으면 조건부 다시 해. Joint 는 *어느 marginal 도 절대 초과 못 해*.
Hint
Joint 는 늘 '재료 어느 한쪽보다 *흔하지 않음*'. Joint > marginal 이면 공식 방향 헷갈린 거.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 똘이warm

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.