Py) 통계 - 조건부 확률

Py) 통계 - 조건부 확률

파이썬으로 조건부 확률(Conditional Probability)을 계산하는 방법을 알아보자.


개요

조건부 확률은 특정 조건이 주어졌을 때 어떤 사건이 일어날 확률을 계산하는 것이다. 조건부 확률의 예시로 사건 B가 주어졌을 때 사건 A가 일어날 확률을 수식으로 표기하자면 $P(A|B)$로 표기할 수 있다. 그리고 해당 수식은 다음과 같이 풀어쓸 수 있다.

$$P(A|B) = \frac{P(A \cap B)}{P(B)} $$

예를 들어, A를 “오늘 치킨을 먹는다.”라는 사건, B를 “어제 치킨을 먹는다.”라는 사건이라고 해보자. 조건부 확률 $P(A|B)$는 “어제 치킨을 먹은 경우 오늘 또 치킨을 먹을 확률”로 해석할 수 있다.

그리고 조건부 확률은 다양한 분야에서 활용된다.

  • 의학: 조건부 확률은 질병의 진단과 관련된 예측 모델에서 활용될 수 있다. 예를 들어, 특정 검사 결과가 주어졌을 때 질병이 있는지 여부를 판단하는 경우이다. 검사 결과가 주어졌을 때 해당 질병이 있는 조건부 확률을 계산하여 진단에 도움을 준다.

  • 금융: 주식 투자자들이 주가가 특정 이벤트 발생 시 어떻게 움직일지 예측하고자 할 때 조건부 확률을 사용할 수 있다. 이전의 주가 동향, 특정 뉴스 발표 등의 조건이 주어졌을 때 특정 주가 움직임의 조건부 확률을 계산하여 의사결정을 한다.

  • 자연어 처리: 기계 번역에서는 이전 문장이 주어졌을 때 다음 단어의 조건부 확률을 계산하여 번역 모델을 개선하기도 한다.

  • 마케팅: 고객의 구매 기록, 성향, 관심사 등의 조건이 주어졌을 때 특정 상품을 구매할 확률을 예측하여 개인화된 추천시스템이나 마케팅 전략수립에 활용되기도 한다.

실습

실습을 위해 고객의 물품 구매 예제 데이터를 다음과 같이 준비해보자.

1
2
3
df = pd.DataFrame(dict(cust_id = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4],
prod = ["A", "B", "A", "B", "C", "B", "C", "D", "A", "C"]))
df
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
2
3
4
5
6
7
8
prod_A_cust = df.loc[df["prod"] == "A", "cust_id"].unique()
prod_B_cust = df.loc[df["prod"] == "B", "cust_id"].unique()

prod_A_cust
## array([1, 2, 4], dtype=int64)

prod_B_cust
## array([1, 2, 3], dtype=int64)

상품 “B”를 구매한 구매자 중에서 상품 “A”도 구매한 구매자의 수는 집합견산을 활용하여 연산하거나 NumPyisin() 함수를 사용하여 산출할 수도 있다.

1
2
3
4
prod_both = len(set(prod_B_cust).intersection(prod_A_cust)) # 1
prod_both = prod_B_cust[np.isin(prod_B_cust, prod_A_cust)] # 2
prod_both
## 2

이제 상품 “B”를 구매한 사람 수를 구하고

1
2
3
prod_B_cust_cnt = len(prod_B_cust)
prod_B_cust_cnt
## 3

최종적으로 상품 “B”를 구매한 사람 중 상품 “A”를 구매한 사람에 대한 조건부 확률은 다음과 같이 계산한다.

1
2
prod_both / prod_B_cust_cnt
## 0.6666666666666666
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×