프로그래머를 위한 조건부 확률 개념
조건부 확률(Conditional Probability) 은 어떤 사건이 발생했을 때, 다른 특정 사건이 발생할 확률을 의미한다. 즉, 사건 A가 이미 발생한 상황에서 사건 B가 발생할 확률을 P(B|A) 로 표기하며, 이를 "A 사건이 발생한 조건에서 B 사건이 발생할 확률"이라고 한다.
예제: 학생과 노트북 소지 확률
한 학급에 남학생 5명, 여학생 5명이 있다고 가정하자. 이 중:
- 남학생 2명, 여학생 3명이 노트북을 가지고 있다.
전체 학생 중에서 노트북을 가진 학생을 뽑을 확률
- 전체 학생 수 = 10명
- 노트북을 가진 학생 수 = 5명 (남학생 2명 + 여학생 3명)
- 따라서, P(노트북) = 5/10 = 1/2
조건부 확률 계산
조건부 확률을 계산하기 위해 특정 조건(남학생 또는 여학생)을 고려한다.
- "남학생(A)일 경우, 노트북을 가지고 있을 확률 P(B|A)"
- 남학생 중 노트북을 가지고 있는 학생 = 2명
- 전체 남학생 수 = 5명
- P(B|A) = 2/5 (즉, 남학생일 때 노트북을 가지고 있을 확률은 40%)
- "여학생(A)일 경우, 노트북을 가지고 있을 확률 P(B|A)"
- 여학생 중 노트북을 가지고 있는 학생 = 3명
- 전체 여학생 수 = 5명
- P(B|A) = 3/5 (즉, 여학생일 때 노트북을 가지고 있을 확률은 60%)
프로그래밍으로 조건부 확률 계산하기
이제 이를 Python 코드로 구현해 보자.
# 조건부 확률 계산 함수
def conditional_probability(event_count, condition_count):
""" 주어진 조건에서 특정 사건이 발생할 확률을 계산 """
if condition_count == 0:
return 0 # 0으로 나누는 오류 방지
return event_count / condition_count
# 데이터 정의
num_students = 10
num_male = 5
num_female = 5
num_male_with_laptop = 2
num_female_with_laptop = 3
# 확률 계산
p_laptop_given_male = conditional_probability(num_male_with_laptop, num_male)
p_laptop_given_female = conditional_probability(num_female_with_laptop, num_female)
# 결과 출력
print(f"P(노트북 | 남학생) = {p_laptop_given_male:.2f}")
print(f"P(노트북 | 여학생) = {p_laptop_given_female:.2f}")
실행 결과:
P(노트북 | 남학생) = 0.40
P(노트북 | 여학생) = 0.60
조건부 확률의 활용
조건부 확률은 추천 시스템, 스팸 필터링, 베이지안 통계, 강화학습 등에서 널리 사용된다. 특히 강화학습에서는 특정 상태(State)에서 특정 행동(Action)을 했을 때, 원하는 보상(Reward)을 받을 확률을 계산하는 데 핵심적인 역할을 한다.
Tags:
강화학습