다운로드
작성자: admin 작성일시: 2016-05-15 12:39:55 조회수: 6963 다운로드: 320
카테고리: 기초 수학 태그목록:

확률분포함수

확률분포

확률의 정의에서 확률은 사건(event)이라는 표본의 집합에 대해 할당된 숫자라고 하였다. 어떤 사건에 어느 정도의 확률이 할당되었는지 묘사한 정보를 확률분포(probability distribution)라고 한다. 확률분포를 묘사하려면 모든 사건들을 일일히 제시하고 거기에 할당된 숫자를 보여주어야 한다. 표본의 숫자가 유한하다면 가능할 수 있지만 숫자가 많다면 결코 쉽지 않은 작업이다. 만약 표본의 숫자가 무한하다면 현실적으로 모든 사건을 하나 하나 기술하는 것은 불가능하다.

그러나 표본공간이 실수의 집합이고 표본이 실수라고 가정한다면 누적분포함수와 확률밀도함수라는 것을 이용하여 확률분포를 간결하고 정확하게 기술할 수 있다.

단순사건과 확률질량함수

콜로고로프의 정리를 사용하면 어떤 사건의 확률값을 이용하여 다른 사건의 확률값을 계산할 수 있다. 예를 들어 표본을 1개만 가지는 사건을 단순사건(elementary event, atomic event)이라고 한다. 단순사건끼리는 서로 교집합을 가지지 않으므로 유한개의 사건만 있는 경우, 모든 단순사건의 확률값을 알면 콜모고로프의 세번째 공리에 의해 다른 모든 사건의 확률값을 계산할 수 있다. 단 모든 단순사건의 확률의 합은 1이어야 한다.

예를 들어 플레잉카드 무늬 문제의 단순사건과 그 확률이 다음과 같이 정의되어 있다고 하자.

$$ P(\{♦\})=0.1, \;\; P(\{♥\})=0.2, \;\; P(\{♠\})=0.3, \;\; P(\{♣\})=0.4 $$

다음처럼 모든 사건에 대한 확률을 계산할 수 있다.

$$ P(\{♥,♠\})=0.2+0.3=0.5 $$

이렇게 유한개의 사건이 존재하는 경우 각 단순사건에 대한 확률만 정의하는 함수를 확률질량함수(probability mass function)라고 한다. 확률과 확률질량함수는 다른 개념이라는 점을 주의한다. 확률질량함수는 보통 소문자 $p$로 표시하는 경우가 많다.

$$ \text{확률}: P(\{1\}) = 0.2 $$$$ \text{확률질량함수}: p(1) = 0.2 $$$$ \text{확률}: P(\{1, 2\}) = 0.3 $$$$ \text{확률질량함수}: p(1,2) \;\; \rightarrow \;\; \text{정의되지 않는다!} $$

예를 들어 다음 확률질량함수는 주사위 눈금 6이 비정상적으로 많이 나오게 만든 조작된 주사위(unfair dice)를 묘사한다.

In [1]:
x = np.arange(1, 7)
y = np.array([0.1, 0.1, 0.1, 0.1, 0.1, 0.5])
plt.stem(x, y)
plt.title("조작된 주사위의 확률질량함수")
plt.xlabel("숫자면")
plt.ylabel("확률")
plt.xlim(0, 7)
plt.ylim(-0.01, 0.6)
plt.xticks(np.arange(6) + 1)
plt.show()

표본의 수가 무한한 경우

왜 확률을 정의할 때 입력을 표본이 아닌 사건으로 정의하였을까? 다시 말해 왜 확률값을 표본에 대해 할당하지 않고 사건에 대해 할당하였을까? 그 이유는 표본의 수가 무한한 경우를 다루기 위해서이다.

회전하는 원반에 화살을 쏘고 화살이 박힌 위치의 각도를 결정하는 문제를 생각해보자. 각도가 정확하게 0도가 될 확률은 얼마일까?

그림 7.1.6 : 회전하는 원반의 각도 문제

만약 모든 각도에 대해 가능성이 똑같다면 각도가 정확하게 0이 될 확률은 0이다.

$$ P(\{ \theta = 0^{\circ} \}) = 0$$

각도가 0이 아닌 어떤 경우도 마찬가지로 확률이 0이다. 예를 들어 각도가 30도가 되는 경우도 확률은 0이다.

$$ P(\{ \theta = 30^{\circ} \}) = 0$$

왜 그럴까. 모든 각도에 대해 가능성이 똑같으므로 그 확률을 $x$라는 값이라고 하자. 그런데 각도가 나올 수 있는 경우는 무한대의 경우가 있으므로 만약 $x$가 0이 아니라면 $x \times \infty = \infty$로 전체 표본 집합의 확률이 무한대가 된다. 즉, 1이 아니다. 따라서 표본의 수가 무한하고 모든 표본에 대해 표본 하나만을 가진 사건의 확률이 동일하다면, 표본 하나에 대한 사건의 확률은 언제나 0이다.

이번에는 다음과 같은 사건(event)을 생각해 보자. 확률은 얼마라고 말할 수 있을까?

  • 각도가 0도보다 같거나 크고 30도보다 작은 경우
$$ P(\{ 0^{\circ} \leq \theta < 30^{\circ} \}) = ?$$

이 경우에는 동일한 가능성을 지닌 사건이 $12$개 있으므로 전체집합의 확률 $1$을 $12$로 나누면 주어진 사건에 대한 확률은 $1/12$가 된다.

$$ P(\{ 0^{\circ} \leq \theta < 30^{\circ} \}) = 1 \div 12 = \frac{1}{12}$$

다음은 일부 사건에 대해 확률을 할당한 예이다.

$$ P(\{ 0^{\circ} \leq \theta < 30^{\circ} \}) = \frac{1}{12}$$$$ P(\{ 30^{\circ} \leq \theta < 60^{\circ} \}) = \frac{1}{12}$$$$ P(\{ 0^{\circ} \leq \theta < 60^{\circ} \text{ or } 90^{\circ} \leq \theta < 150^{\circ} \}) = \frac{1}{3}$$

이렇게 원소의 수가 무한대인 표본 집합의 경우에는 사건(부분집합)의 수도 무한대이므로 확률을 할당하는 일도 어렵거니와 어떻게 확률을 할당했는지 다른 사람에게 설명하는 것도 쉽지 않다. 이 경우에는 나중에 설명하게 될 확률밀도함수(probability density function)을 사용한다.

연습 문제 7.1.12

위 원반을 이용하여 복권 번호를 결정하는 경우를 생각하자. 결과를 조작하기 위해 0도에서 180도 사이에 화살이 2배 더 잘 박히도록 원반을 조작하였다. 이 결과를 확률을 사용하여 공범에게 전달해야한다. 어떻게 해야 간결하고 정확하게 확률 할당 결과를 전달할 수 있겠는가?

단순구간사건

표본공간이 실수의 집합이라면 대부분의 사건은 시작점과 끝점이라는 두 개의 숫자로 이루어진 단순구간(simple interval)으로 표현된다. 이러한 구간내의 실수로 이루어진 집합을 단순구간사건(simple interval event)이라고 한다.

$$ A = \{ a \leq x < b \} $$

$a$는 구간의 시작점이고 $b$는 구간의 끝점이다.

단순구간사건을 입력받아 확률값을 출력하는 함수는 다음처럼 이차원 함수 $P(a, b)$로 표현할 수 있다.

$$ A = \{ a \leq x < b \} \;\; \rightarrow \;\; P(A) = P(\{ a \leq x < b \}) = P(a, b) $$

단순구간 사건의 확률만 표현할 수 있다면 여러개의 단순구간으로 이루어진 복잡한 사건은 콜모고로프의 공리에 따라 각 단순구간의 확률값의 더하기나 빼기로 표현할 수 있다.

예를 들어 다음과 같은 사건

$$ B = \{ -2 \leq x < 1 \text{ 또는 } 2 \leq x < 3 \} $$

의 확률 $P(B)$는 다음 두 단순구간의 확률의 합이다.

$$ P(B) = P(\{ -2 \leq x < 1) + P(2 \leq x < 3) = P(-2, 1) + P(2, 3) $$

또는 다음 두 단순구간의 확률의 차이다.

$$ P(B) = P(\{ -2 \leq x < 3 \}) - P(\{ 1 \leq x < 2\}) = P(-2, 3) - P(1, 2) $$

연습 문제 7.1.13

0도에서 180도 사이에 화살이 2배 더 잘 박히도록 조작된 원반을 이용하여 복권 번호를 결정하는 문제에서 구간의 시작점과 끝점을 입력받아서 확률을 출력하는 함수 $P(a, b)$를 구하고 이를 파이썬으로 구현하라.

누적분포함수

그러나 사건(event) 즉, 구간(interval) 하나를 정의하기 위해 숫자가 하나가 아닌 두 개가 필요하다는 점은 아무래도 불편하다. 숫자 하나만으로 사건 즉, 구간을 정의할 수 있는 방법은 없을까? 이를 해결하기 위한 아이디어는 시작점을 모두 똑같이 음의 무한대($-\infty$)로 통일한 특수한 단순구간사건 $S_x$을 사용하는 것이다.

$$ \begin{eqnarray} S_{-1} &=& \{ -\infty \leq X < -1 \} \\ S_{0} &=& \{ -\infty \leq X < 0 \} \\ S_{1} &=& \{ -\infty \leq X < 1 \} \\ S_{2} &=& \{ -\infty \leq X < 2 \} \\ & \vdots & \\ S_{x} &=& \{ -\infty \leq X < x \} \\ \end{eqnarray} $$

콜모고로프의 공리를 이용하면 이러한 사건 $S_x$의 확률값으로부터 모든 종류의 구간사건에 대한 확률값을 계산할 수 있다. 예를 들어 $\{ a \leq x < b \}$라는 구간사건의 확률은 다음처럼 구할 수 있다.

$$ P(a, b) = P(-\infty, b) - P(-\infty, a) $$

위와 같은 방법으로 확률분포를 묘사하는 함수를 누적분포함수(cumulative distribution function)라고 하고 약자로 cdf라고 쓴다. 함수 기호로는 $F(x)$ 등 대문자 기호로 표시한다. 독립변수 $x$는 구간의 끝점을 뜻한다.

$$ F(x) = P(S_x) = P(\{X < x\}) $$

모든 실수는 당연히 $-\infty$보다 크기 때문에 $-\infty < $ 부분은 생략하였다.

누적분포함수 cdf는 다음과 같은 특징을 가진다.

  • 음의 무한대에 대한 누적분포함수값은 0이다. $$ F(-\infty) = 0 $$

  • 양의 무한대에 대한 누적분포함수값은 1이다. $$ F(+\infty) = 1 $$

  • 입력이 크면 누적분포함수값은 커진다. (단조증가) $$ x > y \;\; \rightarrow \;\; F(x) \geq F(y) $$

이 세가지 특성에 따라 누적분포함수는 0에서 시작하여 천천히 증가하면서 1로 다가가는 형태를 가진다. 단조증가 성질에 의해 절대로 내려가지는 않는다.

원반의 각도 문제에서 누적분포함수는 다음과 같다. 이 경우에는 각도가 0도부터 360까지이지만 음의 무한대를 시작점으로 해도 상관없다.

$$ \begin{eqnarray} F(-10) &=& P(\{ -\infty {}^{\circ} \leq \theta < -10 {}^{\circ} \}) &=& 0\phantom{\frac{1}{36}} \\ F(0) &=& P(\{ -\infty {}^{\circ} \leq \theta < 0 {}^{\circ} \}) &=& 0\phantom{\frac{1}{36}} \\ F(10) &=& P(\{ -\infty {}^{\circ} \leq \theta < 10 {}^{\circ} \}) &=& \frac{1}{36} \\ F(20) &=& P(\{ -\infty {}^{\circ} \leq \theta < 20 {}^{\circ} \}) &=& \frac{2}{36} \\ F(30) &=& P(\{ -\infty {}^{\circ} \leq \theta < 30 {}^{\circ} \}) &=& \frac{3}{36} \\ && \vdots && \\ F(350) &=& P(\{ -\infty {}^{\circ} \leq \theta < 350 {}^{\circ} \}) &=& \frac{35}{36} \\ F(360) &=& P(\{ -\infty {}^{\circ} \leq \theta < 360 {}^{\circ} \}) &=& 1\phantom{\frac{1}{36}} \\ F(370) &=& P(\{ -\infty {}^{\circ} \leq \theta < 370 {}^{\circ} \}) &=& 1\phantom{\frac{1}{36}} \\ && \vdots && \\ \end{eqnarray} $$

이를 NumPy와 matplotlib를 사용하여 그래프로 그리면 다음과 같다.

In [2]:
t = np.linspace(-100, 500, 100)
F = t / 360
F[t < 0] = 0
F[t > 360] = 1
plt.plot(t, F)
plt.ylim(-0.1, 1.1)
plt.xticks([0, 180, 360])
plt.title("누적분포함수")
plt.xlabel("$x$ (deg.)")
plt.ylabel("$F(x)$")
plt.show()

연습 문제 7.1.14

0도에서 180도 사이에 화살이 2배 더 잘 박히도록 조작된 원반을 이용하여 복권 번호를 결정하는 문제에서 누적분포함수 $F(x)$를 구하라.

확률밀도함수

누적분포함수는 1차원 함수라는 편리한 도구를 사용하여 확률분포를 간결하고 정확하게 묘사할 수 있도록 해 주었다.

그러나 누적분포함수가 표현하는 사건이 음수 무한대를 시작점으로 하고 변수 $x$를 끝점으로 하는 구간이다보니 분포의 형상을 직관적으로 이해하기는 힘든 단점이 있다. 다시 말해서 어떤 확률 변수 값이 더 자주 나오는지에 대한 정보를 알기 힘들다는 점이다.

이를 알기 위해서는 확률 변수가 나올 수 있는 전체 구간 ($-\infty$ ~ $\infty$)을 아주 작은 폭 $dx$를 가지는 구간들로 나눈 다음 각 구간의 확률을 살펴보는 것이 편리하다. 만약 $x_1$ 근처에서 폭 $dx$를 가지는 구간의 확률을 구하면 다음과 같다.

$$ P(x_1, x_1 + dx) = F(x_1 + dx) - F(x_1) $$

이 값은 구간의 길이에 따라 달라지므로 구간 길이 $dx$를 아주 작게 줄였을 때의 값을 알아야 한다. 단순히 $dx$를 0으로 줄이면 확률은 당연히 0으로 수렴한다. 우리가 원하는 것은 같은 구간 길이를 $dx$를 가진 두 구간이 $x_1$ 위치와 $x_2$ 위치에서 얼마나 다른가이므로 단위 구간 길이당 확률값으로 비교한다.

그런데 단위 구간 길이당 확률값은 다음 그림에서 보듯이 누적분포함수의 기울기가 된다.

$$ \lim_{dx \rightarrow 0} \frac{P(x_1, x_1 + dx)}{dx} = \lim_{dx \rightarrow 0} \frac{F(x_1 + dx) - F(x_1)}{dx} = f(x) $$

그림 7.1.7 : 누적분포함수에서 구간의 확률을 비교하기

기울기를 구하는 수학적 연산이 미분(differentiation)이므로 누적분포함수를 미분하여 누적분포함수의 기울기를 출력하는 함수를 만들면 어떤 $x_1$값 근처의 확률이 다른 $x_2$값 근처보다 더 확률이 높은지 또는 낮은지 쉽게 파악할 수 있다. 누적분포함수를 미분하여 구한 도함수를 확률밀도함수(probability density function)라고 한다.

$$ f(x) = \dfrac{dF(x)}{dx} $$

이를 적분으로 나타내면 다음과 같다.

$$ F(x) = \int_{-\infty}^{x} f(u) du $$

확률밀도함수는 특정한 구간의 확률이 다른 구간에 비해 상대적으로 얼마나 높은가를 나타내는 것이며 그 값 자체가 확률은 아니다라는 점을 명심해야 한다.

미적분학의 기본 원리에 의하면 $x=x_1$부터 $x=x_2$ 사이에서 도함수인 확률밀도함수의 면적(정적분)은 적분함수인 누적분포함수의 값을 이용하여 구할 수 있다.

$$ F(x_2) - F(x_1) = \int_{x_1}^{x_2} f(x) dx $$

그림 7.1.8 : 확률밀도함수의 면적과 누적분포함수

확률밀도함수는 다음과 같은 특징을 가진다.

  • 적분함수인 누적분포함수의 기울기가 음수가 될 수 없기 때문에 확률밀도함수는 0보다 같거나 크다.
$$ f(x) \geq 0 $$
  • $-\infty$ 부터 $\infty$ 까지 적분하면 표본공간 $(-\infty, \infty)$의 확률이 되므로 값은 1이다.
$$ \int_{-\infty}^{\infty} f(u)du = F(\infty) - F(-\infty) = 1$$

앞서 보인 시계 바늘 문제에서 확률밀도함수를 구하면 다음과 같다.

In [3]:
t = np.linspace(-100, 500, 1000)
F = t / 360
F[t < 0] = 0
F[t > 360] = 1
f = np.gradient(F, 600/1000)  # 수치미분
plt.plot(t, f)
plt.ylim(-0.0001, f.max()*1.1)
plt.xticks([0, 180, 360])
plt.title("확률밀도함수")
plt.xlabel("$x$ (deg.)")
plt.ylabel("$f(x)$")
plt.show()

연습 문제 7.1.15

0도에서 180도 사이에 더 화살이 2배 더 잘 박히도록 조작된 원반을 이용하여 복권 번호를 결정하는 문제에서 확률밀도함수 $f(x)$를 구하라.

확률분포함수

확률질량함수, 누적분포함수, 확률밀도함수등을 통틀어 확률분포함수(probability distribution function)라고 한다.

질문/덧글

시계 바늘 문제에서 확률 밀도함수 moon*** 2016년 10월 13일 12:56 오후

시계 바늘 문제에서 확률 밀도 함수를 구할 때

np.gradient(F)를 사용하였는데 그 값이 왜 0.00166834 가 나오는 건가요?

누적 확률 분포의 기울기는 1/360 = 0.0027777 인데 이 값으로 나와야 하는거 아닌가요?

그래서 np.gradient의 사용예제를 보니

>>> x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)
>>> np.gradient(x)
array([ 1. , 1.5, 2.5, 3.5, 4.5, 5. ])

이렇게 나와있는데 어떤 식으로 계산이 되는지 잘 모르겠습니다,,

답변: 시계 바늘 문제에서 확률 밀도함수 관리자 2016년 10월 14일 10:04 오전

np.gradient 명령을 사용할 때 두번째 인수로 샘플 간격을 넣어야 되는데 제가 실수로 누락했습니다.
본문을 수정하였으니 참고하세요.
지적 감사드립니다.

np.gradient(F, 600/1000)와 확률질량함수 설명 중에 대해서.. tada*** 2018년 3월 21일 7:33 오후

1) 샘플간격을 600/1000으로 설정하였다고 하셨는데 document를 보더라도 잘 이해가 안됩니다. 왜 이렇게 되는지 설명 부탁드립니다. F의 size 1000를 넣으면 계산이 이상하게 되는데 왜 그런건가요?

2) 확률질량함수 설명 중 그래프 예시 설명에서 "위의 확률 질량 함수는 주사위 눈금 1이 나오지 않고 6이 비정상적으로 많이 나오게 만든 비정상적인 주사위(unfair dice)를 묘사한다."라고 되어 있는데 주사위 눈금 3이 가장 많이 나오는 것처럼 보이는데요... 이해가 잘 안됩니다.