Python 統計

Pythonでイカサマサイコロの検定を行う

投稿日:

こちらを読むと

  • Pythonでの統計検定方法の例が分かります
  • 二項分布を用いた検定の方法が分かります

やりたいこと

先日作成した以下のサイコロを用いて、このサイコロが普通のサイコロかどうかを調べたいと思います。

サイコロの仕様:
1:1/24の確率で出る
6:7/24の確率で出る
2~5:それぞれ1/6の確率で出る

調べる方法

1の目に着目すると、サイコロを投げて、(1が出る, 1が出ない)という2種類の結果が得られるため、この試行は”二項分布”という分布に従います。以下の手順で、普通のサイコロかどうかを調べることができます。

  1. サイコロを12000回投げ、1の目が出る確率を調べる。
  2. 仮説を立てる。帰無仮説:サイコロを振って1の目が出るのは2000回(確率1/6なので普通のサイコロ)、対立仮説:サイコロを振って1の目が出るのは2000回でない(普通のサイコロでない)
  3. 有意水準αを設定する。α=0.05とする。
  4. 検定統計量を決める。二項分布では、X=「1が出た回数」、p=「1が出る確率」、n=「試行回数」とすると、統計量zは以下の式①で表される。
  5. 棄却ルールを決める。95%の確率で帰無仮説が成り立つことを考えると、zが±1.96を超えれば、帰無仮説を棄却する(普通のサイコロではない)。
  6. 検定統計量をもとに結論を出す。
式①:標準正規分布に従う検定統計量z

サイコロを12000回投げる

サイコロを12000回投げる試行を行うプログラムは、以下のようになります。

count = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0}
for i in range(0,12000):
dice = get_dice()
count[dice] += 1

その結果は以下のようになりました。
1の目が少ないですね。ただし、この結果が本当に普通でないのか、検定を行って確実なものにします。

検定を行う

式①を用いて統計量zを求めると、以下のようになります。

結果は、z=-36.521…となり、-1.96を大幅に超えていました。
したがって、帰無仮説: サイコロを振って1の目が出るのは2000回(確率1/6なので普通のサイコロ)は棄却され、このサイコロは普通ではないイカサマサイコロであることが分かります。

ちなみに、通常通り1/6の確率で目が出る2の目で試すと、
z=0.465…となり、±1.96に収まっていることが分かります。

まとめ

  • Pythonでの統計検定方法の例が分かりました
  • 二項分布を用いた検定の方法が分かりました

検定を行うときは、具体的な試行で試すとわかりやすいと思います!

Reference

https://bellcurve.jp/statistics/course/9490.html



-Python, 統計

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Python matplotlibで複数のグラフを描画する

Table of Contents こちらを読むと記事を書いたきっかけ複数グラフの枠を表示グラフの中身を表示グラフ間隔の調整まとめReference こちらを読むと Pythonのグラフライブラリma …

単純パーセプトロン③

Table of Contents こちらを読むと数式おさらい実装まとめReference こちらを読むと 単純パーセプトロンの実装方法が分かります 数式おさらい 前回のブログで、単純パーセプトロンの …

Pythonの正規表現ライブラリで文字列検索

Table of Contents こちらを読むとはじめにPythonの正規表現ライブラリrereを使って文字列検索実行結果まとめReference こちらを読むと Pythonの正規表現ライブラリ& …

統計 検定を行うためイカサマサイコロを作ってみた

Table of Contents やりたいこと検定のターゲットイカサマサイコロの仕様 イカサマサイコロの実装まとめ やりたいこと 統計の勉強をしておりまして、「検定」と呼ばれる分析手法を実践してみた …

SIerエンジニアが1年間AIを勉強して感じること

Table of Contents こちらを読むと結論:AI職は、エンジニアの上位職ではなく、別物著者についてAI職と一般エンジニアとの違い機械学習エンジニアが一般エンジニアと違うところ機械学習のモデ …

Twitterフォロー

Twitterタイムライン