파이썬으로 조건부 확률(Conditional Probability)을 계산하는 방법을 알아보자.
개요
조건부 확률은 특정 조건이 주어졌을 때 어떤 사건이 일어날 확률을 계산하는 것이다. 조건부 확률의 예시로 사건 B가 주어졌을 때 사건 A가 일어날 확률을 수식으로 표기하자면 $P(A|B)$로 표기할 수 있다. 그리고 해당 수식은 다음과 같이 풀어쓸 수 있다.
$$P(A|B) = \frac{P(A \cap B)}{P(B)} $$
예를 들어, A를 “오늘 치킨을 먹는다.”라는 사건, B를 “어제 치킨을 먹는다.”라는 사건이라고 해보자. 조건부 확률 $P(A|B)$는 “어제 치킨을 먹은 경우 오늘 또 치킨을 먹을 확률”로 해석할 수 있다.
그리고 조건부 확률은 다양한 분야에서 활용된다.
의학: 조건부 확률은 질병의 진단과 관련된 예측 모델에서 활용될 수 있다. 예를 들어, 특정 검사 결과가 주어졌을 때 질병이 있는지 여부를 판단하는 경우이다. 검사 결과가 주어졌을 때 해당 질병이 있는 조건부 확률을 계산하여 진단에 도움을 준다.
금융: 주식 투자자들이 주가가 특정 이벤트 발생 시 어떻게 움직일지 예측하고자 할 때 조건부 확률을 사용할 수 있다. 이전의 주가 동향, 특정 뉴스 발표 등의 조건이 주어졌을 때 특정 주가 움직임의 조건부 확률을 계산하여 의사결정을 한다.
자연어 처리: 기계 번역에서는 이전 문장이 주어졌을 때 다음 단어의 조건부 확률을 계산하여 번역 모델을 개선하기도 한다.
마케팅: 고객의 구매 기록, 성향, 관심사 등의 조건이 주어졌을 때 특정 상품을 구매할 확률을 예측하여 개인화된 추천시스템이나 마케팅 전략수립에 활용되기도 한다.
실습
실습을 위해 고객의 물품 구매 예제 데이터를 다음과 같이 준비해보자.
1 | df = pd.DataFrame(dict(cust_id = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4], |
cust_id | prod | |
---|---|---|
0 | 1 | A |
1 | 1 | B |
2 | 2 | A |
3 | 2 | B |
4 | 2 | C |
5 | 3 | B |
6 | 3 | C |
7 | 3 | D |
8 | 4 | A |
9 | 4 | C |
예를 들어 상품 “B”를 구매한 사람이 상품 “A”도 구매했을 확률을 구해보자. 먼저 다음과 같이 상품 “A”와 “B”를 구매한 사람을 추려보자.
1 | prod_A_cust = df.loc[df["prod"] == "A", "cust_id"].unique() |
상품 “B”를 구매한 구매자 중에서 상품 “A”도 구매한 구매자의 수는 집합견산을 활용하여 연산하거나 NumPy의 isin()
함수를 사용하여 산출할 수도 있다.
1 | prod_both = len(set(prod_B_cust).intersection(prod_A_cust)) # 1 |
이제 상품 “B”를 구매한 사람 수를 구하고
1 | prod_B_cust_cnt = len(prod_B_cust) |
최종적으로 상품 “B”를 구매한 사람 중 상품 “A”를 구매한 사람에 대한 조건부 확률은 다음과 같이 계산한다.
1 | prod_both / prod_B_cust_cnt |