Up

経験比率と確率

ゲームのシミュレーション

 

ゲームの経験的勝率がゲームを多数回行っていくと確率に近付くことをSpiegelhalter(2019)はシミュレーションで示している。ゲーム1とゲーム2の2つのゲームが扱われている。

 

ゲーム1:

サイコロを4回投げて、6の目が1回以上出たら勝ち。1回も出なかったら負け。

 

ゲーム2:

2個のサイコロを24回投げて、2個のサイコロの目が2つとも6の目であるということが1回以上あれば勝ち。2個のサイコロの目が6であるということが1回も起こらなかったら負け。

 

ゲーム1において勝つ確率は次式で与えられる。

ゲーム2において勝つ確率は次式で与えられる。

 

ゲーム数を増やしていくと、経験的勝率がどのように変化していくかを見るシミュレーションプログラムを、Spiegelhalter(2019), p. xviに記載されているウェブサイトからダウンロードしたファイル(Rスクリプト)を参考にして、リストに示すもの(Pythonスクリプト)を書いてみた。

ゲーム1のシミュレーションは、確率のベルヌーイ分布(試行数1の2項分布)で表している。

 

play1 = rng.binomial(1, 1.0 - (5/6)**4, n_games)

 

ゲーム2のシミュレーションは確率のベルヌーイ分布によるシミュレーションである。

 

play2 = rng.binomial(1, 1.0 - (35 / 36)**24, n_games)

 

リストのプログラムを実行すると、図1のグラフが表示される。

図1

 

上のグラフが、100回目までのグラフで、下のグラフは10000までのグラフである。100回目までの勝率を示す上のグラフは変動がかなり認められるが、10000回目までの勝率を示す下のグラフでは、2000回を超えると、それぞれの経験勝率が確率の近くで安定しているように見える。

 

 

 

リスト1 ゲームのシミュレーション

 

import numpy as np

import matplotlib.pyplot as plt

 

rng = np.random.default_rng()

 

n_games = 10000

play1 = rng.binomial(1, 1.0 - (5/6)**4, n_games)

cum_play1 = np.cumsum(play1)

cum_n = np.arange(1, n_games+1)

prop1 = cum_play1 / cum_n

play2 = rng.binomial(1, 1.0 - (35 / 36)**24, n_games)

cum_play2 = np.cumsum(play2)

prop2 = cum_play2 / cum_n

 

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

#

#         ゲーム数200までの描画

#

plt.subplot(211)

plt.plot(cum_n[:101], prop1[:101], c='b', label='Game 1')

plt.plot(cum_n[:101], prop2[:101], c='r', label='Game 2')

plt.hlines(0.5, 0, 100, ls='--', color='k', label='0.5')

plt.xticks([0]+[v for v in np.arange(19,101,20)],

           [1]+[v for v in np.arange(20,101,20)])

plt.xlabel('Number of games')

plt.ylabel('Proportion of wins')

plt.legend()

#

#         ゲーム数2000までの描画

#

plt.subplot(212)

plt.plot(cum_n, prop1, c='b', label='Game 1')

plt.plot(cum_n, prop2, c='r', label='Game 2')

plt.hlines(0.5, 0, 10000, ls='--', color='k', label='0.5')

plt.xticks([0]+[v for v in np.arange(1999, 11000, 2000)],

            [1]+[v for v in np.arange(2000, 11000, 2000)])

plt.xlabel('Number of games')

plt.ylabel('Proportion of wins')

plt.legend()

plt.tight_layout()

plt.show()

 

 

 

参考文献

岡本安晴(2019) いまさら聞けないPythonでデータ分析.丸善出版

Spiegelhalter, D. (2019). The art of statistics: Learning from data. Pelican

 

 

 

Home