사건의 종속성 vs 독립성
사건 A의 발생 여부가 사건 B의 발생 여부에 대한 정보를 제공한다면,
사건 A와 사건 B는 종속 사건(dependent event).
사건 A의 발생 여부가 사건 B의 발생 여부와 상관이 없다면,
사건 A와 사건 B는 독립 사건(independent event).
동전 2개를 던지는 경우
A: 첫번째 동전이 앞면
B: 두번째 동전이 뒷면
C: 두 동전 모두 뒷면(앞면)
A와 B는 독립 사건.
A와 C는 종속 사건.
P(A): 사건 A가 일어날 확률
P(B): 사건 B가 일어날 확률
P(A,B): 사건 A와 사건 B의 교집합이 일어날 확률
P(A,B) = P(A) * P(B)이 성립하면, 두 사건은 독립 사건.
# 자녀가 2명인 경우,
# A : 첫째가 딸인 경우
# B : 둘째가 아들인 경우
# C : 둘 다 딸인 경우
# A와 B가 독립 사건, A와 C는 종속사건임을 증명
# P(A), P(B), P(C), P(A, B), P(A, C)
# 딸인 경우 : 0 , 아들인 경우 1
import random
from collections import Counter
def experiment(type, n, t):
"""
:param type: 실험 타입(동전 던지기 or 주사위 던지기, ...)
:param n: 동전/주사위의 개수
:param t: 실험 회수
:return: 리스트
"""
cases = [] # 동전 던지기 실험 결과를 저장
for _ in range(t): # 실험 회수만큼 반복
case = [] # 각 실험의 결과를 저장
for _ in range(n): # 동전 개수만큼 반복
rand = random.choice(type) # 'H' or 'T'
case.append(rand) # 1회 실험 결과에 저장
# 1회 실험이 끝날 때마다 각 결과를 tuple로 변환 후 저장
# Counter 클래스는 tuple의 개수는 셀 수 있지만,
# list의 개수는 셀 수 없음!
cases.append(tuple(case))
return cases
bear = [0, 1]
trial = 10_000
bear_exp = experiment(bear, 2, trial)
print(bear_exp[1:10])
coin_event_counts = Counter(bear_exp)
print(coin_event_counts)
[(0, 0), (0, 0), (1, 0), (0, 0), (1, 1), (1, 1), (0, 1), (1, 1), (1, 1)]
Counter({(1, 0): 2521, (1, 1): 2505, (0, 1): 2491, (0, 0): 2483})
# P(A) 첫째가 딸인 경우
num_of_cases = 0
for ev, cnt in coin_event_counts.items():
if ev[0] == 0:
num_of_cases += cnt
p_a = num_of_cases / trial
print(f'P(A) : {p_a}')
P(A) : 0.4974
# P(B) 둘째가 아들인 경우
num_of_cases = 0
for ev, cnt in coin_event_counts.items():
if ev[1] == 1:
num_of_cases += cnt
p_b = num_of_cases / trial
print(f'P(B) : {p_b}')
P(B) : 0.4996
# P(C) 둘 다 딸인 경우
num_of_cases = 0
for ev, cnt in coin_event_counts.items():
if ev[0] == 1 and ev[1] == 1:
num_of_cases += cnt
p_c = num_of_cases / trial
print(f'P(C) : {p_c}')
P(C) : 0.2505
# P(A, B) 첫째가 딸, 둘째가 아들인 경우
num_of_cases = 0
for ev, cnt in coin_event_counts.items():
if ev[0] == 0 and ev[1] == 1:
num_of_cases += cnt
p_ab = num_of_cases / trial
print(f'P(A, B) : {p_ab}')
P(A, B) : 0.2491
# P(A, C) 둘 다 딸인 경우?
num_of_cases = 0
for ev, cnt in coin_event_counts.items():
if ev[0] == 1 and ev[1] == 1:
num_of_cases += cnt
p_ac = num_of_cases / trial
print(f'P(A, C) : {p_ac}')
P(A, C) : 0.2505
# A와 B가 독립 사건, A와 C는 종속사건임을 증명
print(f'P(A, B) : {p_ab} == P(A) * P(B) = {p_a*p_b} 이므로 독립사건')
print(f'P(A, C) : {p_ac} != P(A) * P(C) = {p_a*p_c} 이므로 종속사건')
P(A, B) : 0.2491 == P(A) * P(B) = 0.24850104 이므로 독립사건
P(A, C) : 0.2505 != P(A) * P(C) = 0.1245987 이므로 종속사건