본문 바로가기

확률변수, 기댓값과 분산

결과마다 수를 정하는 함수인 확률변수의 분포를 같은 값의 결과를 모아 구하고, 가중 평균인 기댓값과 흩어진 정도인 분산을 정확한 분수로 계산합니다. 기댓값의 선형성, 두 변수의 공분산과 합의 분산, 공분산이 0이어도 독립이 아닌 예, 지시변수로 이항분포의 평균과 분산을 구하는 방법을 다룹니다.

동전을 세 번 던진 결과 HHT를 "앞면 2번"으로 바꾸어 적으면, 결과의 모양은 버리고 우리가 관심 있는 수만 남습니다. 이처럼 결과마다 수를 하나씩 정하는 함수를 확률변수(random variable)라고 합니다. 확률변수를 쓰면 "평균적으로 몇 번 앞면이 나오는가", "결과가 평균에서 얼마나 벗어나는가"를 계산할 수 있습니다. 이 글에서는 함수와 일대일·전사의 함수와 독립과 반복 시행의 독립을 바탕으로, 값이 유한 개인 확률변수의 평균과 흩어진 정도를 다룹니다.

같은 값의 결과를 모은다

확률변수 X는 표본공간에서 실수로 가는 함수이고, P(X=x)P(X=x)는 X의 값이 x가 되는 결과들의 확률을 모두 더한 것입니다. 값마다 이 확률을 적은 것을 X의 분포(distribution)라고 합니다. 공정한 동전을 두 번 던질 때 X를 앞면의 개수라 하면, TT는 0, HT와 TH는 1, HH는 2로 갑니다. 그래서 X의 값은 세 가지이지만 각각 1/3이 아니라, 같은 값으로 가는 결과의 확률을 모아 P(X=0)=1/4P(X=0)=1/4, P(X=1)=1/2P(X=1)=1/2, P(X=2)=1/4P(X=2)=1/4입니다.

X의 기댓값(expected value)은 값에 그 확률을 곱해 더한 가중 평균 E[X]=∑xx P(X=x)E[X]=\sum_x x\,P(X=x)입니다. 위의 X는 0⋅14+1⋅12+2⋅14=10\cdot\frac14+1\cdot\frac12+2\cdot\frac14=1입니다. 기댓값은 시행을 아주 많이 반복했을 때 X의 평균이 가까워지는 값을 뜻하며, 한 번 던졌을 때 반드시 그 값이 나온다는 뜻이 아닙니다. 0과 3을 반반의 확률로 내는 변수의 기댓값은 1.5인데, 1.5는 실제로 나올 수 없는 값입니다.

X가 평균에서 얼마나 흩어져 있는지는 편차 X−E[X]X-E[X]를 제곱해 평균한 분산(variance)으로 잽니다. 편차를 그냥 평균하면 양수와 음수가 서로 지워져 언제나 0이 되기 때문에 제곱을 씁니다. 분산의 음이 아닌 제곱근은 표준편차(standard deviation)라고 합니다.

Var⁡(X)=E[(X−E[X])2]=E[X2]−(E[X])2\operatorname{Var}(X)=E\big[(X-E[X])^2\big]=E[X^2]-(E[X])^2

오른쪽 식은 제곱을 전개하고 기댓값의 선형성을 쓰면 나옵니다. 위의 X는 E[X2]=0⋅14+1⋅12+4⋅14=32E[X^2]=0\cdot\frac14+1\cdot\frac12+4\cdot\frac14=\frac32이므로 분산은 32−12=12\frac32-1^2=\frac12입니다. E[X2]E[X^2]와 (E[X])2(E[X])^2를 같은 것으로 보면 분산이 언제나 0이 되어 버리므로 구별해야 합니다.

from collections import Counter
from fractions import Fraction
from itertools import product

omega = list(product("HT", repeat=2))
dist = Counter()
for w in omega:
    dist[w.count("H")] += Fraction(1, len(omega))
mean = sum(x * p for x, p in dist.items())
variance = sum((x - mean) ** 2 * p for x, p in dist.items())
print({x: str(p) for x, p in sorted(dist.items())}, mean, variance)
{0: '1/4', 1: '1/2', 2: '1/4'} 1 1/2

w.count("H")가 결과 w를 앞면의 개수로 바꾸는 확률변수이고, Counter는 같은 값으로 가는 결과의 확률을 더해 분포를 만듭니다. 기댓값과 분산은 분포에서 정의대로 계산했습니다.

기댓값의 선형성

두 확률변수 X와 Y에 대해 언제나 E[X+Y]=E[X]+E[Y]E[X+Y]=E[X]+E[Y]이고, 상수 a, b에 대해 E[aX+b]=aE[X]+bE[aX+b]=aE[X]+b입니다. 결과 ω마다 X(ω)+Y(ω)X(\omega)+Y(\omega)에 그 결과의 확률을 곱해 더하면, X의 몫과 Y의 몫으로 나누어 더할 수 있기 때문입니다. 이 성질에는 독립이 필요하지 않다는 점이 중요합니다.

분산은 이렇게 간단하지 않습니다. 상수를 더하면 모든 값이 함께 움직여 흩어진 정도가 그대로이고, a배를 하면 편차가 a배, 제곱한 편차가 a2a^2배가 되므로 Var⁡(aX+b)=a2Var⁡(X)\operatorname{Var}(aX+b)=a^2\operatorname{Var}(X)입니다. 두 변수의 합의 분산은 두 변수가 어떻게 함께 움직이는지에 따라 달라집니다.

공분산과 합의 분산

두 변수가 함께 움직이는 정도는 두 편차의 곱을 평균한 공분산(covariance)으로 잽니다. μX=E[X]\mu_X=E[X], μY=E[Y]\mu_Y=E[Y]라 하면 다음과 같습니다.

Cov⁡(X,Y)=E[(X−μX)(Y−μY)]=E[XY]−E[X]E[Y]\operatorname{Cov}(X,Y)=E\big[(X-\mu_X)(Y-\mu_Y)\big]=E[XY]-E[X]E[Y]

X가 평균보다 클 때 Y도 평균보다 큰 경향이 있으면 두 편차의 부호가 같아 곱이 양수가 되고, 반대로 움직이면 음수가 됩니다. 합의 분산은 편차의 합을 제곱해 전개하면 다음과 같습니다.

Var⁡(X+Y)=Var⁡(X)+Var⁡(Y)+2Cov⁡(X,Y)\operatorname{Var}(X+Y)=\operatorname{Var}(X)+\operatorname{Var}(Y)+2\operatorname{Cov}(X,Y)

X와 Y가 독립이면 E[XY]=E[X]E[Y]E[XY]=E[X]E[Y]라서 공분산이 0이고, 합의 분산은 각 분산의 합입니다. 세 가지 결합분포로 확인해 보겠습니다. 첫째는 공정한 동전 하나를 던져 앞면이면 1, 뒷면이면 0인 X를 만들고 Y도 같은 결과를 읽은 Y = X입니다. 둘째는 서로 독립인 두 동전을 각각 읽은 X와 Y입니다. 셋째는 X가 −1, 0, 1을 각각 확률 1/3로 갖고 Y=X2Y=X^2인 경우입니다. 분포는 함께 나오는 값의 쌍 (x, y)와 그 확률의 목록으로 적습니다.

from fractions import Fraction


def expect(dist, f):
    return sum(p * f(x, y) for x, y, p in dist)


def summary(dist):
    ex = expect(dist, lambda x, y: x)
    ey = expect(dist, lambda x, y: y)
    var_x = expect(dist, lambda x, y: (x - ex) ** 2)
    var_y = expect(dist, lambda x, y: (y - ey) ** 2)
    cov = expect(dist, lambda x, y: (x - ex) * (y - ey))
    var_sum = expect(dist, lambda x, y: (x + y - ex - ey) ** 2)
    return cov, var_sum, var_sum == var_x + var_y + 2 * cov


half, quarter, third = Fraction(1, 2), Fraction(1, 4), Fraction(1, 3)
same_coin = [(0, 0, half), (1, 1, half)]
two_coins = [(x, y, quarter) for x in (0, 1) for y in (0, 1)]
square = [(x, x * x, third) for x in (-1, 0, 1)]
for name, dist in (("같은 동전", same_coin), ("독립 동전", two_coins), ("X와 X²", square)):
    print(name, *summary(dist))
같은 동전 1/4 1 True
독립 동전 0 1/2 True
X와 X² 0 8/9 True

summary는 공분산, 합의 분산, 그리고 합의 분산이 위 공식과 같은지를 돌려줍니다. 세 경우 모두 공식이 맞습니다. 같은 동전을 두 번 읽으면 X와 Y가 언제나 함께 움직여 공분산이 1/4이고, X + Y는 0이나 2만 나와 분산이 1입니다. 각 분산 1/4을 더한 1/2보다 큰 값이므로, 분산을 그냥 더하면 틀립니다. 독립인 두 동전은 공분산이 0이라 합의 분산이 1/4 + 1/4 = 1/2입니다.

셋째 경우는 공분산이 0이지만 독립이 아닙니다. E[X]=0E[X]=0이고 E[XY]=E[X3]=0E[XY]=E[X^3]=0이라 공분산은 0인데, Y는 X로 완전히 정해집니다. 예를 들어 P(Y=0)=1/3P(Y=0)=1/3이지만 X = 0이라는 것을 알면 Y = 0이 확실합니다. 독립이면 공분산이 0이지만, 공분산이 0이라고 독립인 것은 아닙니다. 그래도 합의 분산 공식에는 공분산만 들어가므로, 이 경우에도 분산을 더할 수 있어 23+29=89\frac23+\frac29=\frac89입니다. 공분산과 상관계수는 probabilitycourse.com의 공분산 설명에서 더 볼 수 있습니다.

지시변수로 읽는 이항분포

사건이 일어나면 1, 일어나지 않으면 0인 확률변수를 지시변수(indicator variable)라고 합니다. 확률 p로 성공하는 시행의 지시변수 I는 E[I]=pE[I]=p이고, I2=II^2=I라서 Var⁡(I)=p−p2=p(1−p)\operatorname{Var}(I)=p-p^2=p(1-p)입니다. 성공 확률 p인 독립 시행 n번의 성공 횟수 X는 시행마다의 지시변수 n개의 합이므로, 기댓값의 선형성에 따라 E[X]=npE[X]=np입니다. 시행들이 독립이라 공분산이 모두 0이므로 분산도 더해져 Var⁡(X)=np(1−p)\operatorname{Var}(X)=np(1-p)입니다.

본문 처음의 동전 두 번은 n = 2, p = 1/2이라 평균 1, 분산 1/2이고, 분포에서 직접 구한 값과 같습니다. 지시변수를 쓰면 이항확률의 복잡한 합을 계산하지 않고도 평균과 분산을 얻을 수 있습니다. 평균만 필요하다면 시행들이 독립이 아니어도 선형성이 성립하므로 같은 방법을 쓸 수 있습니다.

더 깊이: 평균과 분산만으로 말할 수 있는 것

분포 전체를 몰라도 기댓값과 분산만으로 확률의 상한을 얻을 수 있습니다. 음이 아닌 확률변수 X와 양수 a에 대해 P(X≥a)≤E[X]/aP(X\ge a)\le E[X]/a가 성립하며, 이를 마르코프 부등식(Markov's inequality)이라고 합니다. X가 a 이상일 때 1, 아니면 0인 지시변수를 I라 하면 언제나 aI≤XaI\le X이므로, 양변의 기댓값을 취해 a P(X≥a)≤E[X]a\,P(X\ge a)\le E[X]를 얻습니다.

이 부등식을 음이 아닌 확률변수 (X−μ)2(X-\mu)^2에 쓰면 체비쇼프 부등식(Chebyshev's inequality)이 나옵니다. 평균이 μ\mu, 분산이 σ2\sigma^2인 X와 양수 k에 대해, ∣X−μ∣≥k|X-\mu|\ge k는 (X−μ)2≥k2(X-\mu)^2\ge k^2과 같은 사건이므로 P(∣X−μ∣≥k)≤σ2/k2P(|X-\mu|\ge k)\le \sigma^2/k^2입니다. 분산이 작을수록 값이 평균에서 멀리 벗어날 확률이 작다는 것을 식으로 보여 줍니다.

동전을 100번 던진 앞면의 수는 서로 독립인 지시변수 100개의 합이라 평균 50, 분산 100⋅12⋅12=25100\cdot\frac12\cdot\frac12=25입니다. 체비쇼프 부등식으로 앞면이 40번 이하이거나 60번 이상일 확률은 25/102=1/425/10^2=1/4을 넘지 않습니다. 이 상한은 분포의 모양을 전혀 쓰지 않았기 때문에 실제 확률보다 꽤 크지만, 평균과 분산만 알면 어떤 분포에도 쓸 수 있다는 것이 장점입니다.

정리

  • 확률변수는 결과마다 수를 정하는 함수이고, 분포는 같은 값으로 가는 결과의 확률을 모아 값마다 적은 것입니다.
  • 기댓값은 확률로 가중한 평균이고, 분산은 편차를 제곱해 평균한 값이며 E[X2]−(E[X])2E[X^2]-(E[X])^2로도 계산합니다.
  • 기댓값은 독립과 상관없이 E[X+Y]=E[X]+E[Y]E[X+Y]=E[X]+E[Y]이고, Var⁡(aX+b)=a2Var⁡(X)\operatorname{Var}(aX+b)=a^2\operatorname{Var}(X)입니다.
  • 합의 분산은 Var⁡(X)+Var⁡(Y)+2Cov⁡(X,Y)\operatorname{Var}(X)+\operatorname{Var}(Y)+2\operatorname{Cov}(X,Y)이며, 독립이면 공분산이 0이지만 공분산이 0이라고 독립인 것은 아닙니다.
  • 성공 횟수를 지시변수의 합으로 보면 이항분포의 평균 np와, 독립일 때의 분산 np(1 − p)를 바로 얻습니다.

연습 문제

1. 분포에서 기댓값과 분산

확률변수 Y가 0을 확률 1/2, 2를 확률 1/4, 4를 확률 1/4로 가질 때 기댓값과 분산을 구하세요.

해설 보기

E[Y]=0⋅12+2⋅14+4⋅14=32E[Y]=0\cdot\frac12+2\cdot\frac14+4\cdot\frac14=\frac32입니다. E[Y2]=0+4⋅14+16⋅14=5E[Y^2]=0+4\cdot\frac14+16\cdot\frac14=5이므로 분산은 5−(32)2=1145-\left(\frac32\right)^2=\frac{11}4입니다. 계산을 마친 뒤 확률의 합이 1인지, 분산이 음수가 아닌지 확인하면 실수를 줄일 수 있습니다. 정의대로 편차의 제곱을 평균해도 94⋅12+14⋅14+254⋅14=114\frac94\cdot\frac12+\frac14\cdot\frac14+\frac{25}4\cdot\frac14=\frac{11}4로 같습니다.

2. 바꾼 변수의 기댓값과 분산

X의 기댓값이 2이고 분산이 3일 때, Z = 2X + 5의 기댓값과 분산은 무엇인가요?

해설 보기

기댓값은 2⋅2+5=92\cdot2+5=9이고, 분산은 22⋅3=122^2\cdot3=12입니다. 상수 5는 모든 값을 함께 옮길 뿐 흩어진 정도를 바꾸지 않으므로 분산에 더하지 않습니다. 값을 두 배로 늘리면 편차도 두 배가 되고 제곱한 편차는 네 배가 되므로, 분산에는 2가 아니라 4를 곱합니다. 표준편차는 3\sqrt3에서 232\sqrt3으로 두 배가 됩니다.

3. 주사위 두 개의 합

공정한 주사위 하나의 눈의 기댓값과 분산을 구하고, 서로 독립인 주사위 두 개의 눈의 합의 기댓값과 분산을 구하세요.

해설 보기

눈의 기댓값은 (1+2+⋯+6)/6=7/2(1+2+\cdots+6)/6=7/2이고, E[X2]=(1+4+9+16+25+36)/6=91/6E[X^2]=(1+4+9+16+25+36)/6=91/6이므로 분산은 91/6−49/4=35/1291/6-49/4=35/12입니다. 두 눈의 합의 기댓값은 선형성으로 7/2 + 7/2 = 7입니다. 두 주사위가 독립이라 공분산이 0이므로 합의 분산은 35/12 + 35/12 = 35/6입니다. 기댓값을 더하는 데는 독립이 필요 없지만, 분산을 더하는 데는 공분산이 0이라는 조건을 썼습니다.

평균을 계산하기 전에 값마다 확률을 모으고 그 합이 1인지 먼저 확인해 보세요. 허프만 코드와 접두어 없는 표현의 문자당 평균 길이도 문자의 빈도를 확률로 본 코드 길이의 기댓값입니다. 이것으로 이산수학 교재의 본문을 마칩니다. 처음부터 다시 훑어보려면 교재 목차로 돌아가세요.