[확률] 6.5 결합확률과 조건부확률

JKH·2024년 11월 4일
0

확률

목록 보기
4/7

✏️ 데이터 사이언스 스쿨에서 공부한 내용입니다.

범인 찾기 문제

경찰은 전체 용의자 목록을 가지고 있다. 베이지안 확률론 관점에서 전체 용의자 목록은 바로 표본공간이다. 우리가 알고 싶은 것은 전체 용의자 목록(표본공간)에서 누가 범인(선택된 표본)인가 하는 점이다. 현재 표본공간은 용의자 20명으로 구성되어 있으며 이 중 남자가 12명, 여자가 8명이라고 가정한다.

만약 담당 형사가 범인은 남자라고 생각한다면, ‘범인이 남자이다’라는 주장은 확률론적 관점에서 남성인 용의자(표본)로만 이루어진 사건(표본공간의 부분 집합)이 된다. 이를 사건 AA라고 하자.

이때 우리가 관심을 가지는 것은 "범인이 남자"라는 사건 AA의 신뢰도 즉, 사건 AA의 확률 P(A)P(A)다. 아무런 추가 정보가 없다면 모든 사람이 범인일 가능성이 같기 때문에 범인이 남자일 확률 P(A)P(A)는 다음과 같이 전체 용의자 수로 남자 용의자 수를 나눈 값이 된다.

P(A)=AΩ=1212+8=1220=0.6(6.5.1)P(A) = \dfrac{|A|}{|\Omega|} = \dfrac{12}{12 + 8} = \dfrac{12}{20} = 0.6 \tag{6.5.1}

반대로 "범인은 여자"라는 사건은 여집합 ACA^C로 표현할 수 있고 "범인이 여자일 확률"은 다음처럼 계산한다.

P(AC)=ACΩ=812+8=820=0.4(6.5.2)P(A^C) = \dfrac{\left|A^C\right|}{|\Omega|} = \dfrac{8}{12 + 8} = \dfrac{8}{20} = 0.4 \tag{6.5.2}

이때 새로운 사건 BB가 발생했다고 하자. 범인의 것으로 추정되는 긴 머리카락을 발견했다. 이 머리카락에서 범인은 머리카락이 길다는 가능성이 제시되었다.

이 새로운 사건 BB는 확률론적으로는 새로운 용의자 목록, 즉 머리카락이 긴 사람의 목록이라는 표본공간의 새로운 부분 집합을 의미한다. 그리고 사건 BB가 발생했다는 것은 이 용의자 목록에 진짜로 범인이 포함되었다는 뜻이다.

현재 표본공간 즉, 전체 용의자 목록에는 머리카락이 긴 사람이 10명, 머리카락이 짧은 사람이 10명이다. 만약 이 사건이 진실이라는 보장이 없다면, 사건 BB에 대한 확률 P(B)P(B), 즉 머리카락이 긴 사람이 범인이라는 주장의 신뢰도는 다음과 같다.

P(B)=BΩ=1010+10=1020=0.5(6.5.3)P(B) = \dfrac{|B|}{|\Omega|} = \dfrac{10}{10 + 10} = \dfrac{10}{20} = 0.5 \tag{6.5.3}

반대로 머리카락이 짧은 사람의 사건은 BCB^C이고 범인이 머리카락이 짧을 확률은 다음처럼 계산한다.

P(BC)=BCΩ=1010+10=1020=0.5(6.5.4)P(B^C) = \dfrac{\left|B^C\right|}{|\Omega|} = \dfrac{10}{10 + 10} = \dfrac{10}{20} = 0.5 \tag{6.5.4}

요약하면 다음과 같다.

  • 용의자는 20명
    • 남자 12명, 여자 8명
    • 머리카락이 긴 사람 10명, 머리카락이 짧은 사람 10명
  • 범인이 남자일 확률
    • 남자 집합(사건) AA에 범인(선택된 표본)이 속해 있다는 주장의 신뢰도: P(A)=0.6P(A) = 0.6
  • 범인이 머리카락이 길 확률
    • 머리카락이 긴 사람의 집합(사건) BB에 범인(선택된 표본)이 속해 있다는 주장의 신뢰도 : P(B)=0.5P(B) = 0.5

결합확률과 조건부확률

베이지안 확률론은 두 사건 AABB의 관계를 알고 있다면 사건 BB가 발생하였했다는 사실로부터 기존에 알고 있는 사건 AA에 대한 확률 P(A)P(A)를 좀 더 정확한 확률로 바꿀 수 있는 방법을 알려준다. 이를 위해서는 결합확률과 조건부확률이라는 두 가지 개념을 정의해야 한다.

결합확률(joint probability)사건 AABB가 동시에 발생할 확률이다. 즉, 사건(명제/주장) AA도 진실이고 사건(명제/주장) BB도 진실이므로 사건 AABB의 교집합의 확률을 계산하는 것과 같다.

P(AB) or P(A,B)(6.5.5)P(A \cap B) \text{ or } P(A, B) \tag{6.5.5}

결합확률과 대비되는 개념으로 결합되지 않는 개별 사건의 확률 P(A)P(A) 또는 P(B)P(B)주변확률(marginal probability) 라고 한다.

또한 BB가 사실일 경우의 사건 AA에 대한 확률을 사건 BB에 대한 사건 AA의 조건부확률(conditional probability) 이라고 하며 다음과 같이 표기한다.

P(AB)(6.5.6)P(A | B) \tag{6.5.6}

위 수식에서 기호 |는 if를 뜻한다. 즉 다음과 같다.

P(AB) new P(A) if P(B)=1(6.5.7)P(A | B) \equiv \text{ new } P(A) \text{ if } P(B) = 1 \tag{6.5.7}

이 조건부확률의 값은 다음처럼 정의한다.

P(AB)=P(A,B)P(B)(6.5.8)P(A|B) = \dfrac{P(A,B)}{P(B)} \tag{6.5.8}

조건부확률이 위와 같이 정의된 근거는 다음과 같다.

  1. 사건 BB가 사실이므로 모든 가능한 표본은 사건 BB에 포함되어야 한다. 즉, 새로운 실질적 표본공간은 ΩnewB\Omega_\text{new} \rightarrow B가 된다.

  2. 사건 AA의 원소는 모두 사건 BB의 원소도 되므로 사실상 사건 ABA \cap B의 원소가 된다. 즉, 새로운 실질적 AnewABA_\text{new} \rightarrow A \cap B가 된다.

  3. 따라서 사건 AA의 확률 즉, 신뢰도는 원래의 신뢰도(결합확률)를 새로운 표본공간의 신뢰도(확률)로 정규화(normalize)한 값이라고 할 수 있다.

P(AB)=P(Anew)P(Ωnew)=P(A,B)P(B)(6.5.9)P(A|B) = \dfrac{P(A_\text{new})}{P(\Omega_\text{new})} = \dfrac{P(A,B)}{P(B)} \tag{6.5.9}
  • 조건부확률 P(AB)P(A|B)
    • 사건 B가 발생한 경우의 사건 A의 확률
    • 표본이 이벤트 B에 속한다는 새로운 사실을 알게 되었을 때,
    • 이 표본이 사건 A에 속한다는 사실의 정확성(신뢰도)이 어떻게 변하는지를 알려준다.

예를 들어 범인 찾기 문제에서는 조건부확률을 다음처럼 정의한다.

  • P(A)P(A): 범인이 남자일 확률
  • P(B)P(B): 범인이 머리카락이 길 확률
  • P(AB)P(A|B): 범인이 머리카락이 길다는 사실을 알게 되었을 때, 달라진(갱신된) "범인이 남자일 확률"

조건부확률의 값을 구하기 위해서는 결합확률의 값을 알아야 한다. 그런데 사건 AA와 사건 BB의 결합확률의 값 P(A,B)P(A,B)은 기존의 사건 AA의 확률 P(A)P(A)나 사건 BB의 확률 P(B)P(B)와는 전혀 무관한 별개의 정보이다. 즉, 수학적으로 계산하여 구할 수 있는 값이 아니라 외부에서 주어지지 않으면 안되는 정보인 것이다.

범인 찾기의 경우에도 이미 주어진 정보 P(A)P(A), P(B)P(B)와 관계없이 P(A,B)P(A,B)는 여러 가지 경우가 있을 수 있다. 예를 들어 어떤 경우에는 12명의 남자 중 머리카락이 긴 사람이 다음과 같이 3명일 수도 있고(경우 1), 6명일 수도 있다(경우 2). 이 두 경우에 대해 조건부확률 P(AB)P(A|B)를 구해보자.

만약 머리카락이 긴 남자가 3명이라면

P(AB)=P(A,B)P(B)=3/2010/20=310(6.5.10)P(A|B) = \dfrac{P(A, B)}{P(B)} = \dfrac{3/20}{10/20} = \dfrac{3}{10} \tag{6.5.10}

이 된다. 원래 사건 AA의 확률 P(A)P(A)가 0.6 즉 60% 였으므로 범인이 머리카락이 길다는 정보로 인해 남자가 범인일 확률은 절반으로 뚝 떨어졌다.

만약 머리카락이 긴 남자가 6명이라면

P(AB)=P(A,B)P(B)=6/2010/20=610(6.5.11)P(A|B) = \dfrac{P(A, B)}{P(B)} = \dfrac{6/20}{10/20} = \dfrac{6}{10} \tag{6.5.11}

이 된다.

이 경우에는 새로운 정보(사건 BB)가 주어지든 주어지지 않든 남자가 범인일 확률은 변함없다. 이러한 경우에는 사건 AA가 사건 BB와 서로 독립(independent) 이라고 한다.

연습 문제 6.5.1 ~ 6.5.2

(경우 1), (경우 2)에 대해 다음 확률을 구하라.

✏️

경우1남자 A여자합계
길다 B3710
짧다9110
합계12820
경우2남자 A여자합계
길다 B6410
짧다6410
합계12820

(1) 범인이 머리카락이 짧다면 범인이 남자일 확률 P(ABC)P(A|B^C) = 9/10, 6/10
(2) 범인이 머리카락이 길다면 범인이 여자일 확률 P(ACB)P(A^C|B) = 7/10, 4/10
(3) 범인이 머리카락이 짧다면 범인이 여자일 확률 P(ACBC)P(A^C|B^C) = 1/10, 4/10
(4) 범인이 남자라면 범인이 머리카락이 길 확률 P(BA)P(B|A) = 3/12, 6/12
(5) 범인이 여자라면 범인이 머리카락이 길 확률 P(BAC)P(B|A^C) = 7/8, 4/8
(6) 범인이 남자라면 범인이 머리카락이 짧을 확률 P(BCA)P(B^C|A) = 9/12, 6/12
(7) 범인이 여자라면 범인이 머리카락이 짧을 확률 P(BCAC)P(B^C|A^C) = 1/8, 4/8

독립

수학적으로는 사건 AA와 사건 BB의 결합확률의 값이 다음과 같은 관계가 성립하면 두 사건 AABB는 서로 독립(independent) 이라고 정의한다.

P(A,B)=P(A)P(B)(6.5.12)P(A,B) = P(A)P(B) \tag{6.5.12}

독립인 경우 조건부확률과 원래의 확률이 같아짐을 알 수 있다. 즉, BB라는 사건이 발생하든 말든 사건 AA에는 전혀 영향을 주지 않는 다는 것이다.

P(AB)=P(A,B)P(B)=P(A)P(B)P(B)=P(A)(6.5.13)P(A|B) = \dfrac{P(A,B)}{P(B)} = \dfrac{P(A)P(B)}{P(B)} = P(A) \tag{6.5.13}

예제

다음과 같은 수식도 성립한다.

P(A,B,C)=P(AB,C)P(B,C)(6.5.15)P(A,B,C) = P(A|B,C)P(B,C) \tag{6.5.15}

연습 문제 6.5.3

다음 수식을 증명하라.

(1)

P(A,B,C,D)=P(A,BC,D)P(C,D)(6.5.17)P(A,B,C,D) = P(A,B|C,D)P(C,D) \tag{6.5.17}

✏️
양변을 P(C,D)P(C,D) 으로 나누면 그 자체로 조건부확률을 정의하는 식이다.

(2)

P(A,BC)P(C)=P(AB,C)P(B,C)(6.5.18)P(A,B|C)P(C) = P(A|B,C)P(B,C) \tag{6.5.18}

✏️
(1)의 단순한 확장으로서 좌변과 우변은 P(A,B,C)P(A,B,C)로 같다.

(3)

P(A,B,CD,E)=P(A,BC,D,E)P(C,DE)P(E)P(D,E)(6.5.19)P(A,B,C|D,E) = \dfrac{P(A,B|C,D,E)P(C,D|E)P(E)}{P(D,E)} \tag{6.5.19}

✏️
(1), (2)를 응용하면 양변에 P(D,E)P(D,E)를 곱했을 때 좌변과 우변은 P(A,B,C,D,E)P(A,B,C,D,E)로 같다.

연습 문제 6.5.4

B,CB,C가 독립인 사건일 때 다음이 성립함을 증명하라.

P(A,BC)=P(AB,C)P(B)(6.5.20)P(A,B|C) = P(A|B,C)P(B) \tag{6.5.20}

✏️
연습 문제 6.5.3 (2) 에서 양변을 P(C)P(C)로 나누고 B, C가 독립이므로 P(B,C)P(B,C) = P(B)P(C)P(B)P(C) 를 적용하면
식 (6.5.20) 이 얻어진다.

사슬 법칙

조건부확률과 결합확률의 관계를 확장하면 복수의 사건 X1,X2,,XNX_1, X_2, \dots, X_N에 대한 조건부 확률을 다음처럼 쓸 수 있다. 이를 사슬 법칙(chain rule) 이라고 한다.

P(X1,X2)=P(X1)P(X2X1)P(X1,X2,X3)=P(X3X1,X2)P(X1,X2)=P(X1)P(X2X1)P(X3X1,X2)P(X1,X2,X3,X4)=P(X4X1,X2,X3)P(X1,X2,X3)=P(X1)P(X2X1)P(X3X1,X2)P(X4X1,X2,X3)P(X1,,XN)=P(X1)i=2NP(XiX1,Xi1)(6.5.21)\begin{aligned} P(X_1, X_2) &= P(X_1) P(X_2 | X_1) \\ P(X_1, X_2, X_3) &= P(X_3 | X_1, X_2) P(X_1, X_2) \\ &= P(X_1) P(X_2 | X_1) P(X_3 | X_1, X_2) \\ P(X_1, X_2, X_3, X_4) &= P(X_4 | X_1, X_2, X_3) P(X_1, X_2, X_3) \\ &= P(X_1) P(X_2 | X_1) P(X_3 | X_1, X_2) P(X_4 | X_1, X_2, X_3) \\ & \vdots \\ P(X_1, \dots, X_N) &= P(X_1) \prod_{i=2}^{N} P( X_{i} | X_1, \dots X_{i-1}) \end{aligned} \tag{6.5.21}

확률변수

확률적인 숫자 값을 출력하는 변수를 확률변수(random variable) 라고 한다. 범인 찾기 문제에서는 두 확률변수 XX, YY를 정의할 수 있다. 확률변수 XX는 성별을 나타내고 확률변수 YY는 머리카락이 긴지 짧은지를 나타낸다.

  • X=0X=0인 경우가 사건 AA (남자인 사건)
  • X=1X=1인 경우가 사건 ACA^C (여자인 사건)
  • Y=0Y=0인 경우가 사건 BB (머리카락이 긴 사건)
  • Y=1Y=1인 경우가 사건 BCB^C (머리카락이 짧은 사건)

두 확률변수 XX, YY가 가질 수 있는 모든 사건의 조합에 대해 독립이 성립하면 두 확률변수 XX, YY독립이라고 한다. 위 결합확률 표에서 주변확률의 곱을 구해서 결합확률과 비교해보면 확률변수 XX, YY는 독립이 아니라는 것을 알 수 있다.

경우1남자 X=0여자 X=1합계
길다 Y=03710
짧다 Y=19110
합계12820
경우2남자 X=0여자 X=1합계
길다 Y=06410
짧다 Y=16410
합계12820
XX의 값YY의 값XX의 확률YY의 확률주변확률의 곱결합확률
X=0Y=0P(X=0)=0.6P(X=0)=0.6P(Y=0)=0.5P(Y=0)=0.5P(X=0)P(Y=0)=0.3P(X=0)P(Y=0)=0.3P(X=0,Y=0)=320P(X=0,Y=0)=\dfrac{3}{20}
X=0Y=1P(X=0)=0.6P(X=0)=0.6P(Y=1)=0.5P(Y=1)=0.5P(X=0)P(Y=1)=0.3P(X=0)P(Y=1)=0.3P(X=0,Y=1)=920P(X=0,Y=1)=\dfrac{9}{20}
X=1Y=0P(X=1)=0.4P(X=1)=0.4P(Y=0)=0.5P(Y=0)=0.5P(X=1)P(Y=0)=0.2P(X=1)P(Y=0)=0.2P(X=1,Y=0)=720P(X=1,Y=0)=\dfrac{7}{20}
X=1Y=1P(X=1)=0.4P(X=1)=0.4P(Y=1)=0.5P(Y=1)=0.5P(X=1)P(Y=1)=0.2P(X=1)P(Y=1)=0.2P(X=1,Y=1)=120P(X=1,Y=1)=\dfrac{1}{20}

연습 문제 6.5.5

(경우 2)에 대해 위와 같은 표를 완성하고 확률변수 XX, YY가 독립임을 보여라.

✏️

XX의 값YY의 값XX의 확률YY의 확률주변확률의 곱결합확률
X=0Y=0P(X=0)=0.6P(X=0)=0.6P(Y=0)=0.5P(Y=0)=0.5P(X=0)P(Y=0)=0.3P(X=0)P(Y=0)=0.3P(X=0,Y=0)=620P(X=0,Y=0)=\dfrac{6}{20}
X=0Y=1P(X=0)=0.6P(X=0)=0.6P(Y=1)=0.5P(Y=1)=0.5P(X=0)P(Y=1)=0.3P(X=0)P(Y=1)=0.3P(X=0,Y=1)=620P(X=0,Y=1)=\dfrac{6}{20}
X=1Y=0P(X=1)=0.4P(X=1)=0.4P(Y=0)=0.5P(Y=0)=0.5P(X=1)P(Y=0)=0.2P(X=1)P(Y=0)=0.2P(X=1,Y=0)=420P(X=1,Y=0)=\dfrac{4}{20}
X=1Y=1P(X=1)=0.4P(X=1)=0.4P(Y=1)=0.5P(Y=1)=0.5P(X=1)P(Y=1)=0.2P(X=1)P(Y=1)=0.2P(X=1,Y=1)=420P(X=1,Y=1)=\dfrac{4}{20}

주변확률의 곱과 결합확률이 같다.

피지엠파이 패키지

pgmpy(Probabilistic Graphical Models in Python) 패키지를 사용하면 이산확률모형을 쉽게 구현할 수 있다. 피지엠파이 패키지는 다음 명령으로 설치한다.

pip install pgmpy

피지엠파이 패키지의 JointProbabilityDistribution 클래스는 결합확률 모형을 만드는 데 사용하는 클래스다. 사용법은 다음과 같다.

JointProbabilityDistribution(variables, cardinality, values)
  • variables: 확률변수의 이름 문자열의 리스트. 정의하려는 확률변수가 하나인 경우에도 리스트로 넣어야 한다.
  • cardinality: 각 확률변수의 표본 혹은 배타적 사건의 수의 리스트
  • values: 확률변수의 모든 표본(조합)에 대한 (결합)확률값의 리스트

variables에 들어가는 인수가 사건의 이름이 아니라 확률변수의 이름이라는 점에 주의하라. pgmpy에서는 사건의 이름을 명시적으로 지정할 수 없고 입력한 사건의 수가 KK일 때, 0,1,,K10, 1, \ldots, K-1와 같이 숫자로 지정된다.

범인 찾기 예제에서 성별을 나타내는 확률변수 XX와 머리카락 길이를 나타내는 확률변수 YY의 확률을 다음과 같이 표로 정의할 수 있다.

from pgmpy.factors.discrete import JointProbabilityDistribution as JPD

px = JPD(['X'], [2], np.array([12, 8]) / 20)
print(px)
+------+--------+
| X    |   P(X) |
+======+========+
| X(0) | 0.6000 |
+------+--------+
| X(1) | 0.4000 |
+------+--------+

연습 문제 6.5.6

위의 범인 찾기 문제의 예에서 확률변수 YY의 확률을 JointProbabilityDistribution 클래스 객체 py로 구현하라. 확률변수 XX와 확률변수 YY의 결합확률은 다음처럼 정의한다.

✏️

from pgmpy.factors.discrete import JointProbabilityDistribution as JPD
import numpy as np
py = JPD(['Y'], [2], np.array([10,10]) / 20)
print(py)
+------+--------+
| Y    |   P(Y) |
+======+========+
| Y(0) | 0.5000 |
+------+--------+
| Y(1) | 0.5000 |
+------+--------+

확률변수 XX와 확률변수 YY의 결합확률은 다음처럼 정의한다.

pxy = JPD(['X', 'Y'], [2, 2], np.array([3, 9, 7, 1]) / 20)
print(pxy)
+------+------+----------+
| X    | Y    |   P(X,Y) |
+======+======+==========+
| X(0) | Y(0) |   0.1500 |
+------+------+----------+
| X(0) | Y(1) |   0.4500 |
+------+------+----------+
| X(1) | Y(0) |   0.3500 |
+------+------+----------+
| X(1) | Y(1) |   0.0500 |
+------+------+----------+

연습 문제 6.5.7

위의 범인 찾기 문제의 예에서 남자 12명 중 머리카락이 긴 사람이 6명인 경우(경우 2)의 결합확률 모형을 JointProbabilityDistribution 클래스 객체 pxy2로 구현하라.

✏️

pxy2 = JPD(['X', 'Y'], [2, 2], np.array([6, 6, 4, 4]) / 20)
print(pxy2)
+------+------+----------+
| X    | Y    |   P(X,Y) |
+======+======+==========+
| X(0) | Y(0) |   0.3000 |
+------+------+----------+
| X(0) | Y(1) |   0.3000 |
+------+------+----------+
| X(1) | Y(0) |   0.2000 |
+------+------+----------+
| X(1) | Y(1) |   0.2000 |
+------+------+----------+

JointProbabilityDistribution 클래스는 결합확률로부터 주변확률을 계산하는 marginal_distribution() 메서드, marginalize() 메서드와 조건부확률을 계산하는 conditional_distribution() 메서드를 제공한다.

marginal_distribution(values, inplace=True)
  • values: 주변확률을 구할 확률변수의 이름 문자열 리스트

  • inplace: True이면 객체 자신을 주변확률 모형으로 변화시킨다. False면 주변확률 모형 객체를 반환한다.

marginalize(values, inplace=True)
  • values: 어떤 확률변수의 주변확률을 구하기 위해 없앨 확률변수의 이름 문자열 리스트

  • inplace: True이면 객체 자신을 주변확률 모형으로 변화시킨다. False면 주변확률 모형 객체를 반환한다.

marginal_distribution() 메서드는 인수로 받은 확률변수에 대한 주변확률분포를 구한다. 다음 코드는 결합확률로부터 주변확률 P(A)P(A), P(AC)P(A^C)를 계산한다.

pmx = pxy.marginal_distribution(['X'], inplace=False)
print(pmx)
+------+--------+
| X    |   P(X) |
+======+========+
| X(0) | 0.6000 |
+------+--------+
| X(1) | 0.4000 |
+------+--------+

marginalize() 메서드는 인수로 받은 확률변수를 주변화(marginalize)하여 나머지 확률변수에 대한 주변확률분포를 구한다. 다음 코드도 앞과 마찬가지로 결합확률로부터 주변확률 P(A)P(A), P(AC)P(A^C)를 계산한다.

pmx = pxy.marginalize(['Y'], inplace=False)
print(pmx)
+------+--------+
| X    |   P(X) |
+======+========+
| X(0) | 0.6000 |
+------+--------+
| X(1) | 0.4000 |
+------+--------+

다음 코드는 결합확률로부터 주변확률 P(B)P(B), P(BC)P(B^C)를 계산한다.

py = pxy.marginal_distribution(['Y'], inplace=False)
print(py)
+------+--------+
| Y    |   P(Y) |
+======+========+
| Y(0) | 0.5000 |
+------+--------+
| Y(1) | 0.5000 |
+------+--------+
conditional_distribution(values, inplace=True)
  • values: 조건부확률을 구할 확률변수의 이름 문자열과 값을 묶은 튜플의 리스트

  • inplace: True이면 객체 자신을 조건부확률 모형으로 변화시킨다. False면 조건부확률 모형 객체를 반환한다.

conditional_distribution() 메서드를 사용하면 어떤 확률변수가 어떤 사건이 되는 조건에 대해 조건부확률값을 계산한다. 다음 코드는 결합확률로부터 조건부확률 P(BA)P(B|A), P(BCA)P(B^C|A)를 계산한다.

py_on_x0 = pxy.conditional_distribution([('X', 0)], inplace=False)  # 사건 A에 대한 조건부확률
print(py_on_x0)
+------+--------+
| Y    |   P(Y) |
+======+========+
| Y(0) | 0.2500 |
+------+--------+
| Y(1) | 0.7500 |
+------+--------+

다음 코드는 결합확률로부터 조건부확률 P(BAC)P(B|A^C), P(BCAC)P(B^C|A^C)를 계산한다.

py_on_x1 = pxy.conditional_distribution([('X', 1)], inplace=False)
print(py_on_x1)
+------+--------+
| Y    |   P(Y) |
+======+========+
| Y(0) | 0.8750 |
+------+--------+
| Y(1) | 0.1250 |
+------+--------+

다음 코드는 결합확률로부터 조건부확률 P(AB)P(A|B), P(ACB)P(A^C|B)를 계산한다.

px_on_y0 = pxy.conditional_distribution([('Y', 0)], inplace=False)  # 사건 B에 대한 조건부확률
print(px_on_y0)
+------+--------+
| X    |   P(X) |
+======+========+
| X(0) | 0.3000 |
+------+--------+
| X(1) | 0.7000 |
+------+--------+

check_independence() 메서드를 이용하면 두 확률변수 간의 독립도 확인할 수 있다.

pxy.check_independence(['X'], ['Y'])
False

두 개의 JointProbabilityDistribution 객체끼리 곱하면 두 분포가 독립이라는 가정하에 결합확률을 구한다. 이 값과 원래의 결합확률을 비교하면 독립이 아니라는 것을 알 수 있다.

print(px * py)
print(pxy)
+------+------+----------+
| X    | Y    |   P(X,Y) |
+======+======+==========+
| X(0) | Y(0) |   0.3000 |
+------+------+----------+
| X(0) | Y(1) |   0.3000 |
+------+------+----------+
| X(1) | Y(0) |   0.2000 |
+------+------+----------+
| X(1) | Y(1) |   0.2000 |
+------+------+----------+
+------+------+----------+
| X    | Y    |   P(X,Y) |
+======+======+==========+
| X(0) | Y(0) |   0.1500 |
+------+------+----------+
| X(0) | Y(1) |   0.4500 |
+------+------+----------+
| X(1) | Y(0) |   0.3500 |
+------+------+----------+
| X(1) | Y(1) |   0.0500 |
+------+------+----------+

연습 문제 6.5.8

위에서 구현한 JointProbabilityDistribution 클래스 객체 pxy2로부터 주변확률 모형 및 조건부확률 모형을 구하라. 또 check_independence() 메서드를 이용하여 사건 A, B의 독립을 확인하라.

✏️

# 결합확률 모형 (case2)
pxy2 = JPD(['X', 'Y'], [2, 2], np.array([6, 6, 4, 4]) / 20)
print("결합확률 모형 (case2)")
print(pxy2)

# 주변확률 모형
p_m_x = pxy2.marginal_distribution(['X'], inplace=False)
p_m_y = pxy2.marginal_distribution(['Y'], inplace=False)
print("주변확률 모형")
print("확률변수 X")
print(p_m_x)
print("확률변수 Y")
print(p_m_y)

# 조건부 확률 모형
# P(B/A), P(B^C/A)
p_cond_Y_on_X0 = pxy2.conditional_distribution([('X', 0)], inplace=False)
# P(B/A^C), P(B^C/A^C)
p_cond_Y_on_X1 = pxy2.conditional_distribution([('X', 1)], inplace=False)
# P(A/B), P(A^C/B)
p_cond_X_on_Y0 = pxy2.conditional_distribution([('Y', 0)], inplace=False)
# P(A/B^C), P(A^C/B^C)
p_cond_X_on_Y1 = pxy2.conditional_distribution([('Y', 1)], inplace=False)
print("조건부확률 1")
print(p_cond_Y_on_X0)
print("조건부확률 2")
print(p_cond_Y_on_X1)
print("조건부확률 3")
print(p_cond_X_on_Y0)
print("조건부확률 4")
print(p_cond_X_on_Y1)

# 확률변수 간의 독립 확인: 메서드로 확인
print(pxy2.check_independence(['X'], ['Y']))

# 독립의 정의로 직접 확인: 같으면 독립
print(p_m_x * p_m_y)
print(pxy2)
결합확률 모형 (case2)
+------+------+----------+
| X    | Y    |   P(X,Y) |
+======+======+==========+
| X(0) | Y(0) |   0.3000 |
+------+------+----------+
| X(0) | Y(1) |   0.3000 |
+------+------+----------+
| X(1) | Y(0) |   0.2000 |
+------+------+----------+
| X(1) | Y(1) |   0.2000 |
+------+------+----------+
주변확률 모형
확률변수 X
+------+--------+
| X    |   P(X) |
+======+========+
| X(0) | 0.6000 |
+------+--------+
| X(1) | 0.4000 |
+------+--------+
확률변수 Y
+------+--------+
| Y    |   P(Y) |
+======+========+
| Y(0) | 0.5000 |
+------+--------+
| Y(1) | 0.5000 |
+------+--------+
조건부확률 1
+------+--------+
| Y    |   P(Y) |
+======+========+
| Y(0) | 0.5000 |
+------+--------+
| Y(1) | 0.5000 |
+------+--------+
조건부확률 2
+------+--------+
| Y    |   P(Y) |
+======+========+
| Y(0) | 0.5000 |
+------+--------+
| Y(1) | 0.5000 |
+------+--------+
조건부확률 3
+------+--------+
| X    |   P(X) |
+======+========+
| X(0) | 0.6000 |
+------+--------+
| X(1) | 0.4000 |
+------+--------+
조건부확률 4
+------+--------+
| X    |   P(X) |
+======+========+
| X(0) | 0.6000 |
+------+--------+
| X(1) | 0.4000 |
+------+--------+
True
+------+------+----------+
| Y    | X    |   P(Y,X) |
+======+======+==========+
| Y(0) | X(0) |   0.3000 |
+------+------+----------+
| Y(0) | X(1) |   0.2000 |
+------+------+----------+
| Y(1) | X(0) |   0.3000 |
+------+------+----------+
| Y(1) | X(1) |   0.2000 |
+------+------+----------+
+------+------+----------+
| X    | Y    |   P(X,Y) |
+======+======+==========+
| X(0) | Y(0) |   0.3000 |
+------+------+----------+
| X(0) | Y(1) |   0.3000 |
+------+------+----------+
| X(1) | Y(0) |   0.2000 |
+------+------+----------+
| X(1) | Y(1) |   0.2000 |
+------+------+----------+
profile
Connecting my favorite things
post-custom-banner

0개의 댓글