チョコボール統計

チョコボールの秘密を統計解析で明らかにしていく。おもちゃのカンヅメ欲しい。

購入者によってエンゼルの出る確率は違う?

はじめに

運が強い弱いってこと、気になったことありますか?
チョコボールのエンゼルを含む「当たりクジ」をやたらと引いてしまう人がいるとかいないとか。 ゲン担ぎとか。

ということで今回は、チョコボールの購入者毎に、現時点での当たり確率を予測してみます。

【トップに戻る】

データ

データは、金のエンゼル2倍キャンペーンでは“無い”期間のチョコボールを対象にします。

ここまでの開封結果は下表の通りです。 同僚4人に協力してもらっています。

購入者 銀のエンゼル 総数
同僚A 0 8
同僚B 1 6
同僚C 0 2
同僚D 0 2
筆者 1 22

合計で40箱開封済みです。

頻度を見てみる

上記のデータを見てもらえばわかりますが、 筆者以外は購入数が10に満たない状態で、同僚A,C,Dはまだエンゼルが出ていません。

頻度を計算すると、同僚A,C,Dは0%、同僚Bは17%という値になります。

ここで、同僚AとC,Dでは購入数に違いがあります。 2箱しか開封していないC,Dに対して、Aは8箱も開封しています。
C,Dと比較してAの引きの弱さを感じないですか?

【トップに戻る】

少ないデータに対しての予測

本ブログでは、 このようにデータ数がまだ足りない場合の予測方法として、 「ベイズ推定」を使うアプローチをとってきました(以下の記事参照)。

chocolate-ball.hatenablog.com

ベイズ推定を使えば、 予測分布の広がり(分散)をもって、予測の信頼度を測ることができるのでした。
ということで今回も、ベイズ推定により購入者毎のエンゼル出現確率の予測をやってみます。

ベイズ推定による出現確率予測

ベイズ推定については、本ブログの他の分析記事や、参考文献等を参照ください。
上記のデータを使って、予測した結果が以下の図です。

f:id:hippy-hikky:20180409000900p:plain

この図は、以下の記事のコードをほぼ流用しています。 必要であればご参照ください。

ベイズ推定でエンゼルの出現確率を予測する - チョコボール統計

ベイズ推定で【銀の】エンゼルの出現確率を予測する - チョコボール統計

この図を見ると、 Aの予測分布が0に偏っているのに対し、 C,Dの分布がまだ広がっていることがわかります。 このことから、同僚Aの引きの弱さの直感が表現できていますね。

また、同僚Bの分布は広がってはいるものの、他と比較して高い位置に分布していることが見えます。

エンゼル出現数が0の同僚A,C,Dですが、 購入数の違いにより、Aの引きの弱さが分布に表現出来ているのが、ベイズ推定の面白いところですよね。

【トップに戻る】

まとめ

ということで、購入者別のエンゼル出現確率を予測してみました。

こういう分析は話のネタとしてはちょっとだけ笑えますが、 この結果はデータが少ないためのバラつきと考えられます。
結果の図を見てみると、 予測分布がいずれの購入者でもほぼ重なっている状態であり、 有意な差は見いだせません。

ランダムなサンプルの中からクジを引く場合、 当たりクジが入っている割合に依存して確率的に当たりが出るはずです。 (もしも確率に偏りが生じているなら、イカサマをしているという証拠)
しかし、今回のデータのようにサンプルが少ない場合には、 ばらつきのために運が良いとか悪いとか見えてしまう場合があります。 データを増やしていけば、この分布が収束していき、ほぼ重なるはずです。

もし重ならないようであれば、超常的な力が働いているのかも。。。

【トップに戻る】

おまけ

これだけだと、記事として軽いので、もう少しだけ分析を続けます。

データが少ない場合の予測は難しいものですが、 人間であれば常識や事前の知識に基づいてある程度のあたりをつけてデータを眺めることがあります。 良い場合と悪い場合あると思いますが、データが少ない場合には、大きく外す予測をしにくいという利点があります。

本ブログでは、 過去の記事で、 エンゼルの出現確率は不明なんだから無情報事前分布(一様分布)を使うということにしていました。

しかし今手元には、40箱開封して2個の銀のエンゼルが出たという証拠があります(5%)。

そこで、真の確率も5%から大きく外れた値ではないだろうというあたりをつけて予測をしてみたいと思います。

事前分布の設計

このような確率を扱う問題に対しての事前分布には、 ベータ分布が良く用いられます。 (ベータ分布については参考文献参照)

ベータ分布に従う確率変数は0から1の実数を取るので、確率をモデル化するのに調度良いという性質があります。

ベータ分布は、以下の式で表現され、パラメータは(\alpha, \beta)の2つです。

{ \displaystyle
f(x | \alpha, \beta) = \frac{x^{(\alpha - 1)}(1-x)^{(\beta-1)}}{B(\alpha, \beta)}
}

ここで、B(\alpha, \beta)はベータ関数を表します。

今回は、\alpha = 2.0\beta = 15.0として、約5%の値にピークを持つベータ分布を事前分布としてみました。(下図)

f:id:hippy-hikky:20180410003621p:plain

出現確率予測

上記のベータ分布を事前分布として、銀のエンゼルの出現確率の予測をしてみます。

実装は簡単で、過去の記事を基本にすると、 getMCMCResult関数の中で、事前分布の関数を以下のように変えているだけです。

# 出現確率pの事前分布
p = pm.Beta('p', alpha=2, beta=15)   ← この部分を変えているだけ
# 観測を結びつける
obs = pm.Bernoulli('obs', p, value=data, observed=True)

予測結果

予測結果は以下の図の通りです。

f:id:hippy-hikky:20180410003814p:plain

結論としては上記の結論とそう変わりはないのですが、 各購入者の予想分布が近づいています。
常識的に考えて、出現確率が50%を超えるようなことはまずありえないので、 妥当な結果なのかなと思います。

データが多量にあれば、事前分布の設計に気を付けることは必要ないのですが、 データが少なく、常識や事前知識がある程度ある場合には、 このように事前分布を適切なものに設計することで、 より早く妥当な分布に収束しやすくなると言えます。

また、ここでは言及しませんが、 今回のようにモデルにベルヌーイ分布を使っている場合、 ベータ分布は共役事前になり、事後分布もベータ分布になります。 つまりMCMCを使わずとも解析的に計算ができてしまいます。

このあたりの話も別の機会に書けたらと思います。

【トップに戻る】

参考文献

Pythonで体験するベイズ推論 PyMCによるMCMC入門

Pythonで体験するベイズ推論 PyMCによるMCMC入門

【トップに戻る】

広告

Amazonの欲しいものリスト作ってみました。 チョコボールのカンパ募集中です。
チョコボールをカンパする

森永製菓  チョコボール<ピーナッツ>  28g×20箱

森永製菓 チョコボール<ピーナッツ> 28g×20箱