[패스트캠퍼스 환급챌린지]딥러닝/Chapter 1. 통계

[패스트캠퍼스][환급 챌린지]Chapter 1. 딥러닝을 위한 통계 01-08 조건부확률

포리셔 2023. 2. 27. 19:18

01-08 조건부확률

def) 조건부확률(Conditional probability): 어떤 사건이 일어나는 경우 다른 사건이 일어날 확률

어떤 사건의 경우의 수나 확률을 계산하다 보면 그 사건만 단독으로 일어나지 않고 다른 사건이 함께 일어날 수도 있습니다. 아니, 오히려 그런 경우가 더 적지 않은가? 혹은 특정한 사건이 일어나야만 발생할 수 있는 다른 사건들도 있겠죠.

가챠 해금

 이런 경우에 계산되는 확률을 조건부확률이라 합니다. 수학적인 정의는 아래와 같습니다.
$$P_{Y\mid X}\left(Y=y\mid X=x\right)=\frac{P_{XY}\left(x, y\right)}{P_X\left(x\right)}$$
특정한 사건이 발생하는 것을 선행 전제로 삼기 때문에 전체 경우의 수 중 $X=x$가 발생하는 경우의 수만을 전체 경우의 수로 삼고, 그 중 원하는 사건 $Y=y$가 일어날 경우의 수를 분자에 대입해 계산하게 됩니다.
ML 분야에서는 입력 $X$가 모델에 단서로 주어지고, 이를 바탕으로 $Y$가 발생할 확률을 출력하는 것이 조건부확률이 적용된 것으로 볼 수 있습니다. 개와 고양이를 분류하는 이미지 분류 모델을 예로 들어보겠습니다.
이미지 $x$의 진짜 답이 $Y=$개라고 하면, 이 이미지를 옳게 분류할 확률은
$$P_{Y\mid X}\left(Y=개|X=x\right)=\frac{P_{XY}\left(x,y\right)}{P_X\left(x\right)}$$
로 나타낼 수 있습니다.

결합확률과의 차이

결합확률 $P\left(X\cap Y\right)$와 조건부확률 $P\left(Y\mid X\right)$는 그것이 정의되는 공식은 물론 개념도 유사해서 자주 혼동되곤 합니다. 하지만 문제는 ML과 딥러닝 분야는 확률과 통계 없이 설명할 수 없다는 것... 따라서 우리도 이걸 제대로 구분할 필요가 있습니다.
강의 예제에서 예를 들어보죠. 아래 표는 학교 계정과 회사 계정으로 온 모든 메일을 일반 메일과 스팸 메일로 구분해 놓은 데이터입니다.

  스팸 메일 일반 메일 합계
학교 계정 40 30 70
회사 계정 50 60 110
합계 90 90 180

위 표에서 하나의 메일을 뽑았을 때, 학교 계정으로 왔을 확률은 70/180입니다. 직관적으로 답이 나오죠? 그러면 이 표에서, 하나의 메일을 뽑았을 때 학교 계정으로 온 스팸 메일일 확률을 구하면 어떨까요? 전체 경우의 수는 180개이고, 학교 계정으로 온 스팸 메일일 확률이므로 총 40가지의 경우가 나옵니다. 이 경우는 두 사건이 동시에 일어난 케이스이므로 결합 확률 로 봐야 하고, 확률 $P\left(X\cap Y\right)=40/180$이 됩니다.
그럼 여기서 표현을 조금만 바꿔 보죠. 스팸 메일 중 하나를 뽑았을 때, 학교 계정으로 온 메일일 확률은 얼마일까요? 스팸 메일의 경우의 수가 90가지이고 이 중 학교 계정으로 온 메일은 40가지이므로, 확률 $P\left(Y\mid X\right)=40/90$이 됩니다. 표현에 따라서 전체 경우의 수 에 해당하는 케이스가 달라지므로 수학적인 표현보다는 주어진 상황에 맞춰서 계산할 확률 에 초점을 맞추기를 권장합니다. 위에 수학적 정의로 뭐라뭐라 써놨지만 사실 저 공식은 공부하는 우리 입장에서는 일종의 함정으로 작용하는 경우가 더 많더군요. 특히나 확.통 파트에서는 이런 부분이 더 골치아픈 것 같습니다.

조건부 확률질량함수

마지막으로 조건부확률 케이스에서의 확률질량함수(PMF)를 구해보고 가겠습니다. 지난 포스트에서 사용한 영어, 수학 성적 데이터를 다시 불러오겠습니다.

import pandas as pd
scores = [1, 2, 3, 4, 5]

data = [[2, 1, 0, 0, 0],
        [1, 3, 4, 0, 0],
        [1, 3, 5, 2, 0],
        [0, 0, 0, 3, 2],
        [0, 0, 0, 1, 2]]

df = pd.DataFrame(data, index=scores, columns=scores)
df.columns.name = 'X'
df.index.name = 'Y'
pmf = df / df.values.sum()
marginal_pmf_x = pmf.sum(axis=0)
marginal_pmf_y = pmf.sum(axis=1)

이제 이 데이터에서 특정한 조건부 확률질량함수를 표현해보죠.

index = 0
x = [0, 1, 2, 3, 4]
plt.bar(x, pmf.iloc[index]/marginal_pmf_y[index+1])
plt.xticks(x, ["1", "2", "3", "4", "5"])
plt.title(f"P(X|Y={index+1})")
plt.show()

이를 그려보면 아래와 같은 그래프가 나옵니다. $Y=1$일 때의 $X$의 값에 따른 조건부확률을 나타낸 그래프입니다. 한 가지 눈여겨볼 점은, $Y=1$일 때의 케이스에 대한 경우의 수의 확률을 구한 것이므로, 이 확률을 모두 더하면 반드시 1이 나와야 한다는 점입니다.

8일차 후기

새로운 한 주의 시작입니다. 고등학교 때 확.통 과목에서 번번히 우리의 발목을 잡은 조건부확률로

상큼하게도

한 주의 미션을 시작합니다. 개념이 왜 그리 어려웠던 거지...?

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.