대수의 법칙 때문에 시도했다.

통계학 공부를 하고 있어 「대수의 법칙」이 나왔습니다. 법칙의 내용적으로는, 「뭐 어쩌면 그렇겠지」라는 느낌이었습니다만, 일단 시뮬레이션해 보는가 하는 것으로, 했던 것을 정리해 보려고 생각합니다.

대수의 법칙이란?



서로 독립적인 확률 변수 $X_1,X_2,...,X_n$가 모평균 $\mu$일 때 표본 평균 $\frac{X_1+X_2+...+X_n}{n}$는 n이 크다. 과연 모 평균에 가까워지는 것.
\lim_{n \to \infty}\frac{X_1+X_2+...+X_n}{n} \rightarrow \mu

이 수식은 수학적으로 엄격하지 않을 수도 있지만 이미지는 이것으로 괜찮다고 생각합니다. 직감적으로는 이해할 수 있습니다만, 실세계에서 대량으로 시행한다(n을 늘린다)라고 하는 것도 좀처럼 근기가 있어요? 그렇다면 주사위를 예로 들어 "대수의 법칙"이 사실인지 시뮬레이션 해 나갑니다.

주사위 시뮬레이션



1~6까지가 같은 확률($\frac{1}{6}$)로 나오는 주사위로, 주사위를 흔드는 횟수를 1~10000회까지 늘려 가고, 시행 횟수가 표본 평균에 미치는 영향을 그래프로 확인 할 수 있도록 합니다.

시뮬레이션 코드


import matplotlib.pyplot as plt
%matplotlib inline
import random
from collections import Counter 

# 試行回数リスト
numTrials = list(range(1,10001))
meanlist = []

for numTrial in numTrials:
    resultData = [ random.randrange(1,7) for _ in range(numTrial)]
    countResult = Counter(resultData)
    sumCountResult = 0
    for num in (countResult.keys()):
        sumCountResult += num * countResult[num]
    mean = sumCountResult / numTrial
    meanlist.append(mean)

plt.plot(numTrials,meanlist)
plt.xlabel("Trials")
plt.ylabel("mean")
plt.axhline(3.5, ls="--", color="magenta")
plt.savefig("verification_lawOfLargeNumber.png")
plt.show()

시뮬레이션 결과



다음은 시뮬레이션 결과입니다. 가로축은 주사위를 흔든 횟수, 세로축은 주사위를 n회 흔들었을 때 나온 눈의 평균값입니다.


분홍색 점선이 평균 3.5의 라인에서 횟수를 겹칠 때마다 수렴하고 있음을 알 수 있습니다. 「대수의 법칙」은 역시 맞을 것 같네요. 뭐 당연한가・・・(웃음)

그리고, 이번 주사위의 출목을 난수를 사용해 시뮬레이션을 하고 있습니다만, 시트를 고정하고 있지 않으므로, 같은 프로그램을 실행해도, 같은 그래프를 쓸 수 없기 때문에, 양해 바랍니다. 그러나 평균값이 3.5로 수렴한다는 점은 여러 번 실행해도 변하지 않습니다.

마지막으로



이번은 단지 확인이었기 때문에, 특히 재미있는 이야기는 아니었군요. 더 재미있는 이야기를 할 수 있도록 공부 노력하겠습니다.

좋은 웹페이지 즐겨찾기