다운로드
작성자: admin 작성일시: 2019-08-28 14:58:16 조회수: 4649 다운로드: 384
카테고리: 기초 수학 태그목록:

7.4 다변수 확률변수

카테고리 값을 가질 수 있는 이산확률변수가 두 개 이상 있는 경우에는 각각의 확률변수에 대한 확률분포 이외에도 확률분포 쌍이 가지는 복합적인 확률분포를 살펴보아야 한다. 이 절에서는 이러한 다변수 확률변수의 확률분포를 표현하기 위한 결합확률분포함수를 알아본다. 두 확률변수 값의 쌍이 어떤 확률분포를 가지는지 안다면 둘 중 하나의 확률분포의 값을 알고 있을 때 다른 확률분포가 어떻게 되는지도 알 수 있다. 이러한 정보를 나타내는 것인 조건부확률분포에 대해서도 공부한다.

결합확률질량함수

주사위처럼 1부터 6까지의 값을 가지는 카테고리 분포 확률변수 $X$와 $Y$를 생각하자. 확률변수 각각의 확률적 특성은 확률질량함수 $ p_X(x), p_Y(y) $로 나타낼 수 있다. 확률변수가 여러 개 있을 때는 확률질량함수의 아랫 첨자로 확률변수 이름을 지정하여 어떤 확률변수의 확률질량함수인지 표시한다. 만약 공정한 주사위처럼 모든 값이 나올 확률이 같다면 각각의 확률질량함수는 다음과 같을 것이다.

$$ \begin{align} p_X(1) = \dfrac{1}{6}, \ldots p_X(6) = \dfrac{1}{6} \tag{7.4.1} \end{align} $$$$ \begin{align} p_Y(1) = \dfrac{1}{6}, \ldots p_Y(6) = \dfrac{1}{6} \tag{7.4.2} \end{align} $$

이번에는 하나의 값이 아닌 두 개의 값, 즉 특정한 숫자 쌍이 나타나는 경우를 생각하자. 단변수 이산확률변수와 같이 아톰(atom) 사건에 대한 확률만 알고 있으면 임의의 숫자 쌍 집합 즉, 임의의 사건에 대해서도 확률을 계산할 수 있으므로 하나 하나의 숫자 쌍에 대해 확률을 알려주는 확률질량함수만 있으면 전체 확률분포를 알 수 있다. 이러한 확률질량함수를 결합확률질량함수(joint probability mass function)이라고 하며 다음과 같이 표시한다.

$$ \begin{align} p_{XY}(x, y) \tag{7.4.3} \end{align} $$

이 때는 나타날 수 있는 숫자가 두 숫자로 이루어진 쌍이므로 독립변수가 $x,y$ 두 개가 된다. 종속변수는 그 숫자 쌍이 나타날 확률이다. 즉, $p_{XY}(2, 3)$은 $\{x=2, y=3\}$이라는 특정한 숫자 쌍으로만 이루어진 사건의 확률이다. 만약 공정한 주사위 두 개를 던지는 경우라면 결합확률질량함수는 다음과 같을 것이다.

$$ \begin{align} p_{XY}(1,1) = \dfrac{1}{36}, p_{XY}(1,2) = \dfrac{1}{36}, \ldots, p_{XY}(6,6) = \dfrac{1}{36} \tag{7.4.4} \end{align} $$

예제

어느 대학교에서 50명의 학생이 X, Y 두 과목에 대해 시험을 보고 그 결과가 다음과 같이 A, B, C, D, E, F 학점으로 나왔다고 가정하자. 각 열은 X과목의 학점, 각 행은 Y과목의 학점을 나타내고 행렬의 숫자는 해당 학점 조합을 받은 학생의 수다. 예를 들어 X과목을 B학점, Y과목을 C학점 받은 학생은 4명이다.

In [1]:
grades = ["A", "B", "C", "D", "E", "F"]
scores = pd.DataFrame(
    [[1, 2, 1, 0, 0, 0],
     [0, 2, 3, 1, 0, 0],
     [0, 4, 7, 4, 1, 0],
     [0, 1, 4, 5, 4, 0],
     [0, 0, 1, 3, 2, 0],
     [0, 0, 0, 1, 2, 1]], 
    columns=grades, index=grades)
scores.index.name = "Y"
scores.columns.name = "X"
scores
Out:
X A B C D E F
Y
A 1 2 1 0 0 0
B 0 2 3 1 0 0
C 0 4 7 4 1 0
D 0 1 4 5 4 0
E 0 0 1 3 2 0
F 0 0 0 1 2 1

결합확률질량함수는 다음과 같다.

In [2]:
pmf = scores / scores.values.sum()
pmf
Out:
X A B C D E F
Y
A 0.02 0.04 0.02 0.00 0.00 0.00
B 0.00 0.04 0.06 0.02 0.00 0.00
C 0.00 0.08 0.14 0.08 0.02 0.00
D 0.00 0.02 0.08 0.10 0.08 0.00
E 0.00 0.00 0.02 0.06 0.04 0.00
F 0.00 0.00 0.00 0.02 0.04 0.02

이 확률질량함수를 히트맵(heat map)으로 나타내면 다음과 같다.

In [3]:
sns.heatmap(pmf, cmap=mpl.cm.bone_r, annot=True,
            xticklabels=['A', 'B', 'C', 'D', 'E', 'F'],
            yticklabels=['A', 'B', 'C', 'D', 'E', 'F'])
plt.title("결합확률질량함수 p(x,y)")
plt.tight_layout()
plt.show()

연습 문제 7.4.1

위에서 구한 데이터를 기준으로 다음 질문에 답하라.

  1. 이 확률변수의 표본 값이 (D,F)일 확률을 구하라.
  2. 이 확률변수의 표본 값이 (F,A)일 확률을 구하라.
  3. 확률변수의 값을 모른다고 할 때 어떤 값이 나올 가능성이 가장 높은가.

주변확률질량함수

주변확률질량함수(marginal probability mass function)는 두 확률변수 중 하나의 확률변수 값에 대해서만 확률분포를 표시한 함수이다. 즉 다변수가 되기 이전의 단변수 확률질량함수를 말한다.

결합확률질량함수에서 주변확률질량함수를 구하려면 전체 확률의 법칙에 의해 다른 변수가 가질 수 있는 모든 값의 결합확률질량함수를 합한 확률이 된다.

$$ \begin{align} p_X(x) = \sum_{y_i} p_{XY}(x,y_i) \tag{7.4.5} \end{align} $$$$ \begin{align} p_Y(y) = \sum_{x_i} p_{XY}(x_i,y) \tag{7.4.6} \end{align} $$

위에서 예로 든 이산 확률변수의 경우에 과목 X만 관심이 있다면 결합확률질량함수 $p_{XY}(x, y)$로부터 X에 대한 주변확률질량함수 $p_X(x)$를 구해야 한다.

주변확률질량함수를 계산한 값은 다음과 같다.

$$ \begin{align} \begin{aligned} p_X(A) &= p_{XY}(A,A) + p_{XY}(A,B) + p_{XY}(A,C) \\ &+ p_{XY}(A,D) + p_{XY}(A,E) + p_{XY}(A,F) \\ &= 0.02 \end{aligned} \tag{7.4.7} \end{align} $$

In [4]:
pmf_marginal_x = pmf.sum(axis=0)
pmf_marginal_x
Out:
X
A    0.02
B    0.18
C    0.32
D    0.28
E    0.18
F    0.02
dtype: float64
In [5]:
pmf_marginal_y = pmf.sum(axis=1)
pmf_marginal_y[:, np.newaxis]
Out:
array([[0.08],
       [0.12],
       [0.32],
       [0.28],
       [0.12],
       [0.08]])

연습 문제 7.4.2

위에서 구한 데이터를 기준으로 다음 질문에 답하라.

  1. 확률변수 $Y$의 표본 값이 A일 확률을 구하라.
  2. 확률변수 $X$의 표본 값이 B일 확률을 구하라.

조건부확률질량함수

만약 $y$값이 특정한 값으로 고정되었다면 확률질량함수의 단면을 이용하여 다음과 같이 그릴 수도 있다.

In [6]:
import string

x = np.arange(6)
for i, y in enumerate(string.ascii_uppercase[:6]):
    ax = plt.subplot(6, 1, i + 1)
    ax.tick_params(labelleft=False)
    plt.bar(x, pmf.iloc[i, :])
    plt.ylabel("p(x, y={})".format(y), rotation=0, labelpad=30)
    plt.ylim(0, 0.15)
    plt.xticks(range(6), ['A', 'B', 'C', 'D', 'E', 'F'])

plt.suptitle("y가 주어진 경우의 결합확률질량함수의 단면", y=1.05)
plt.tight_layout()
plt.show()

연습 문제 7.4.3

위에서 구한 데이터를 기준으로 다음 질문에 답하라.

  1. 만약 확률변수 $Y$의 값이 A가 나왔다면 확률변수 $X$의 값은 어떤 값이 나올 가능성이 가장 높은가.
  2. 만약 확률변수 $Y$의 값이 C가 나왔다면 확률변수 $X$의 값은 어떤 값이 나올 가능성이 가장 높은가.

조건부확률질량함수(conditional probability mass function)는 다변수 확률변수 중 하나의 값이 특정 값으로 고정되어 상수가 되어 버린 경우, 나머지 변수에 대한 확률질량함수를 말한다. 조건부확률질량함수는 다음과 같이 정의된다.

$$ \begin{align} p_{X \mid Y}(x \mid y) = \dfrac{p_{XY}(x, y)}{p_{Y}(y)} \tag{7.4.8} \end{align} $$$$ \begin{align} p_{Y \mid X}(y \mid x) = \dfrac{p_{XY}(x, y)}{p_{X}(x)} \tag{7.4.9} \end{align} $$

조건부확률질량함수의 모양은 결합질량함수 $p_{XY}(x, y)$에서 $y$값이 고정된 함수, 즉, 결합질량함수의 단면과 같아진다. 다만 조건부확률질량함수의 합은 1이 된다.

$y=A$일 때의 결합확률질량함수의 단면과 확률의 합은 다음과 같다.

In [7]:
pmf.iloc[0, :]
Out:
X
A    0.02
B    0.04
C    0.02
D    0.00
E    0.00
F    0.00
Name: A, dtype: float64
In [8]:
np.sum(pmf.iloc[0, :])
Out:
0.08

$y=A$일 때의 조건부확률질량함수와 확률의 합은 다음과 같다.

In [9]:
cond_y0 = pmf.iloc[0, :]/pmf_marginal_y[0]
cond_y0
Out:
X
A    0.25
B    0.50
C    0.25
D    0.00
E    0.00
F    0.00
Name: A, dtype: float64
In [10]:
np.sum(cond_y0)
Out:
1.0
In [11]:
plt.subplot(211)
plt.bar(x, pmf.iloc[0, :])
plt.ylim(0, 0.5)
plt.xticks(range(6), ['A', 'B', 'C', 'D', 'E', 'F'])
plt.title("y=A일 때의 결합확률질량함수 단면 p(x,y=A)")
plt.subplot(212)
plt.bar(x, cond_y0)
plt.ylim(0, 0.5)
plt.xticks(range(6), ['A', 'B', 'C', 'D', 'E', 'F'])
plt.title("y=A일 때의 조건부확률질량함수 p(x|y=A)")
plt.xlabel("x")
plt.tight_layout()
plt.show()

$y=B$일 때의 결합확률질량함수의 단면과 확률의 합은 다음과 같다.

In [12]:
pmf.iloc[1, :]
Out:
X
A    0.00
B    0.04
C    0.06
D    0.02
E    0.00
F    0.00
Name: B, dtype: float64
In [13]:
np.sum(pmf.iloc[1, :])
Out:
0.12000000000000001

$y=B$일 때의 조건부확률질량함수와 확률의 합은 다음과 같다.

In [14]:
cond_y1 = pmf.iloc[1, :]/pmf_marginal_y[1]
cond_y1
Out:
X
A    0.000000
B    0.333333
C    0.500000
D    0.166667
E    0.000000
F    0.000000
Name: B, dtype: float64
In [15]:
np.sum(cond_y1)
Out:
0.9999999999999999
In [16]:
y = np.arange(6)
plt.subplot(211)
plt.bar(y, pmf.iloc[1, :])
plt.ylim(0, 0.6)
plt.xticks(range(6), ['A', 'B', 'C', 'D', 'E', 'F'])
plt.title("y=B일 때의 결합확률질량함수 단면  p(x,y=B)")
plt.subplot(212)
plt.bar(y, cond_y1)
plt.ylim(0, 0.6)
plt.xticks(range(6), ['A', 'B', 'C', 'D', 'E', 'F'])
plt.title("y=B일 때의 조건부확률질량함수 p(x|y=B)")
plt.xlabel("x")
plt.tight_layout()
plt.show()

다변수 연속확률변수

연속확률분포에서는 이산확률분포와 같이 단순사건을 이용하여 확률을 정의할 수 없으므로 단변수 연속확률변수처럼 누적확률분포함수를 먼저 정의한 후 이를 미분하여 확률밀도함수를 정의하는 방법을 사용한다.

결합누적확률분포함수

두 연속 확률변수 $X$, $Y$에 대한 결합누적확률분포함수 $p_{XY}(x, y) $는 다음과 같이 정의한다.

$$ \begin{align} F_{XY}(x, y) = P(\{ X < x \} \cap \{ Y < y \}) = P(\{X < x, Y < y\}) \tag{7.4.10} \end{align} $$

결합누적확률분포함수 $p_{XY}(x, y) $는 다음과 같은 특성을 가진다.

$$ \begin{align} F_{XY}(\infty, \infty)=1 \tag{7.4.11} \end{align} $$$$ \begin{align} F_{XY}(-\infty, y)=F_{XY}(x,-\infty)=0 \tag{7.4.12} \end{align} $$

결합확률밀도함수

단변수 확률변수의 경우처럼 결합누적확률분포함수를 미분하여 결합확률밀도함수(joint probability density function)를 정의할 수 있다. 독립 변수가 2개이므로 각각에 대해 모두 편미분(partial differentication)해야 한다.

$$ \begin{align} p_{XY} = \dfrac{\partial^2 F_{XY}(x, y)}{\partial x \partial y} \tag{7.4.13} \end{align} $$

결합확률밀도함수를 특정 구간에 대해 적분하면 해당 구간에 대한 확률이 된다.

$$ \begin{align} \int_{x_1}^{x_2} \int_{y_1}^{y_2} p_{XY}(x,y)dxdy = P\big(\{ x_1 \leq X \leq x_2, \; y_1 \leq Y \leq y_2 \}\big) \tag{7.4.14} \end{align} $$

따라서 결합확률밀도함수를 모든 변수에 대해 $-\infty$에서 $\infty$ 까지 적분하면 값이 1이 된다.

$$ \begin{align} \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} p_{XY}(x,y)dxdy=1 \tag{7.4.15} \end{align} $$

연속 확률변수의 결합확률밀도함수는 2차원 함수가 된다. 아래는 다변수정규분포의 결합확률밀도의 예를 그린 것이다. 어떤 집단에 대해 X는 몸무게, Y는 키를 나타내는 확률변수라고 하자.

In [17]:
mu = [70, 170]
cov = [[150, 140], [140, 300]]
rv = sp.stats.multivariate_normal(mu, cov)

xx = np.linspace(20, 120, 100)
yy = np.linspace(100, 250, 100)
XX, YY = np.meshgrid(xx, yy)
ZZ = rv.pdf(np.dstack([XX, YY]))
plt.contour(XX, YY, ZZ)
plt.xlabel("x")
plt.ylabel("y")
plt.title("결합확률밀도함수 p(x,y)")
plt.show()

주변확률밀도함수

주변확률밀도함수(marginal probability density function)는 결합확률밀도함수를 특정한 하나의 변수에 대해 가중평균한 값을 말한다. 따라서 결합확률밀도함수를 하나의 확률변수에 대해서만 적분하여 구한다.

가중평균(적분)으로 인해 차원이 한 개 줄어들기 때문에 2차원 확률변수의 주변 확률 밀도 함수는 1차원 함수가 된다.

$$ \begin{align} p_X(x) = \int_{-\infty}^{\infty} p_{XY}(x,y)dy \tag{7.4.16} \end{align} $$$$ \begin{align} p_Y(y) = \int_{-\infty}^{\infty} p_{XY}(x,y)dx \tag{7.4.17} \end{align} $$
In [18]:
from matplotlib.ticker import NullFormatter
from matplotlib import transforms
from scipy.integrate import simps  # 심슨법칙(Simpson's rule)을 사용한 적분 계산

xx = np.linspace(20, 120, 100)
yy = np.linspace(100, 250, 100)
XX, YY = np.meshgrid(xx, yy)
ZZ = rv.pdf(np.dstack([XX, YY]))
fx = [simps(Z, yy) for Z in ZZ.T]
fy = [simps(Z, xx) for Z in ZZ]

plt.figure(figsize=(6, 6))

left, width = 0.1, 0.65
bottom, height = 0.1, 0.65
bottom_h = left_h = left + width + 0.05

rect1 = [left, bottom, width, height]
rect2 = [left, bottom_h, width, 0.2]
rect3 = [left_h, bottom, 0.2, height]

ax1 = plt.axes(rect1)
ax2 = plt.axes(rect2)
ax3 = plt.axes(rect3)

ax2.xaxis.set_major_formatter(NullFormatter())
ax3.yaxis.set_major_formatter(NullFormatter())

ax1.contour(XX, YY, ZZ)
ax1.set_title("결합확률분포함수 $p_{XY}(x, y)$")
ax1.set_xlabel("x")
ax1.set_ylabel("y")

ax2.plot(xx, fx)
ax2.set_title("주변확률분포함수 $p_X(x)$")

base = ax3.transData
rot = transforms.Affine2D().rotate_deg(-90)
plt.plot(-yy, fy, transform=rot + base)
plt.title("주변확률분포함수 $p_Y(y)$")

ax1.set_xlim(38, 102)
ax1.set_ylim(120, 220)
ax2.set_xlim(38, 102)
ax3.set_xlim(0, 0.025)
ax3.set_ylim(120, 220)

plt.show()