私の備忘録

考えたことを、備忘録的に。

ソシャゲで学ぶ最尤法

高校時代の数学で、

A君とB君が勝負をすると、A君は0.6の確率で勝利し、B君は0.4の確率で勝利する(引き分けはなし)。5回勝負するとき、A君が4勝する確率を求めなさい。

っていう問題を目にすることがある。解くのは簡単。

{p={}_5\mathrm{C}_4 0.6^4 0.4^1=0.2592}

でも、実際に何か勝負するときに、この問題みたいに勝利する確率が最初から分かっている場面なんてほとんどない。

逆に、手元には「A君がB君に4勝1敗だった」っていうデータが先にあって、そこからA君の勝利確率という真のパラメータを推定しようよ!みたいな話の流れの方が多かったりする。

 

これが最尤法の考え方。

データ(この場合は勝敗の結果)が与えられたときに、真のパラメータ(この場合は真の勝利確率)をxxxxだと見るのが、最も尤もらしいよね!→最尤法

 

続いて、一気に飛んで、ソーシャルゲーム(略してソシャゲ)の話。

(今どき感あるけど) mixiのゲームに、ブラウザプロ野球っていうゲームがある。簡単に説明すると、自分が監督になって選手のカードを集めてチームを作る、っていうゲーム。

強いチームを作るには、レアリティが高いカードを集めるのがいい。カードにはレアリティがあって、高い順に「XR」「UR」「SR」・・・と続く。

で、このたびこのゲームが無償で高レアリティのカードばかりが出るガチャが引けるチケットを5枚くれた。このガチャを1度回すごとに4枚の選手がゲットでき、

4枚中1枚は、XR 15% UR 50%  SR 35%

4枚中3枚は、XR   5% UR 25%  SR 70%

でカードが排出される。大変ありがたいキャンペーンだけど、無課金で遊ぶにはXRを引くかどうかが死活問題になったりする。

こういう類のキャンペーンは以前もあって、ウキウキでガチャを回してみたものの、排出されたのはSRばかりであまりいい思い出がない。運営が排出確率をこっそりいじっているんじゃないのか?とすら邪推してしまったり。

 

だから、今回このキャンペーンで、自分のチームと、同じくこのゲームをやっている友人のチームとで、

全部で6チーム×チケット5枚分=30回分

のガチャを回し(1度回すと4枚の選手が手に入るので、全部で120枚もの選手が手に入る)、最尤法によってXRの真の排出確率を求めようではないか!

 

簡単のために、上で書いた排出確率をまとめると、平均的には

XR 7.5% UR 31.25%  SR 61.25%

となる。XRか否かだけに注目すると、

XR 7.5% XR以外 92.5%

というのが、運営サイドの発表。

 

真のXR排出確率{p}を最尤法によって求めてみよう。

 

さて、冒頭にも書いたが、最尤法のスタートはデータである。そこで、実際に30回分ガチャを回してデータを取ってみた。

これが結果だ!!!

XR 9枚 UR 42枚 SR 69枚

(XR 9枚 XR以外 111枚)

 

さて、データが手に入ったところで、最尤法は進んでいく。求めたい真のXR排出確率を{p}としたうえで、このデータが手に入る確率{P}を表してみよう。

{P={}_{120}\mathrm{C}_9   p^9 (1-p)^{111}}

見方を逆にすると、この式はデータが手に入ったときに、求めたい真のXR排出確率を{p}とすることの「尤もらしさ」の度合い=尤度を表している。この「尤度」を表す{p}の関数を尤度関数(Likelihood function)と呼び、

{L={}_{120}\mathrm{C}_9   p^9 (1-p)^{111}}

と表す。

そして、この尤度を最大にするような{\hat{p}}を求めることが、最もデータに対して妥当なパラメータを求めることになる。だから最尤法

実際には尤度関数からいきなり{\hat{p}}を求めるのが難しかったりするので、尤度関数の対数をとったもの(対数尤度関数)を考えることが多い。手順としては、対数尤度関数をパラメタ{p}微分して0と置いた方程式を解くことになる。

 {\log{L}=\log{{}_{120}\mathrm{C}_9}+n\log{p}+(20-n)\log{(1-p)} }

{p}微分して0と置くと、

{\frac{9}{p}+\frac{111}{1-p}(-1)=0}

これを{p}について解くと、

{p=\frac{9}{120}=0.075}

 

よって、真のXR排出確率は、7.5%と求まるのであった・・・。

 

運営さん、疑ってすみませんでした。

************************************

ただし、今回扱った例はあまりにも単純すぎたので、実は最尤法を使うまでもなく、単純に得られたデータから、

{9/120=0.075}

と求まってしまったりする。まさに直感通り。

 

計算間違ってないといいな。