見出し画像

設定推測手法覚書 3.多項分布編(長い)

多項分布とはなんぞや

前回の二項分布の話に続いて多項分布の話となります。
多項分布とは一回の試行で3種類以上の結果からいずれかが得られる試行についての確率計算。みたいな理解でいいのかなと。
「理屈は二項分布とそんなに変わらなくて、結果が2種類だったら二項分布、3種類以上だったら多項分布。」
と知り合いには説明されました。
ウィキペディアにもそんな様な事が書いてありました。

多項分布の例と計算式

番長ZEROで規定ポイント到達時にボーナス非当選時のモード移行とか
AT終了画面で何が選ばれるか
とかが例としてわかりやすいのかなと。
例えばZEROモードでボーナス非当選時の移行先はZERO、チャンス、通常の3種類ですね。
これで設定推測する時の計算方法です。

二項分布で計算した結果同士をかけ合わせても、それっぽい数字は出てくるんですが、数学的に正しい理屈は(説明出来ないので)説明しませんが、二項分布の結果同士で計算すると「既に計算した事を次の計算にも含んじゃうので誤差が大きくなる」くらいの理解でいいのかなあと思っています。

1/2で高設定示唆が出る台があった時に、「高設定示唆が出た」場合と「高設定示唆が出なかった」場合の結果同士をかけ合わせたら1つの要素で2回設定推測してるような感じになって、なんかおかしいですよね。
ザックリしすぎた説明ですね。

実際に計算してみるとわかりますが、強い要素が1回出ると設定推測結果が大きく高設定に、逆なら大きく低設定に振れてしまいます。
正しい(と思われる)に計算に比べて、下手すると設定⑥期待度が20%とか上下しちゃう感じになります。

そこで多項分布の公式を使った計算をしようという事になるのですが、計算式は以下の通りです。

$$
f(X_{1}, X_{2}, …, X_{k})=\frac{n!}{x_{1}! x_{2}! … x_{k}!} p_{1}^{x_{1}} p_{2}^{x_{2}} … p_{k}^{x_{k}} \\~~~~~~~~~~~(x_{i} \geq 0, ~~ x_{1} + … + x_{k} = n)
$$

意味がわからん。
と言ってても仕方ないので、自分で調べたり
友とAIの助けを借りたりして計算に成功しました。
持つべきものは友とAIですね。

$${n}$$をゼロモードからの総モード移行回数として8回
$${x_{1}}$$をゼロモード移行回数として3回
$${x_{2}}$$をチャンスモード移行回数として2回
$${x_{3}}$$を通常モード移行回数として3回
$${p_{1}}$$をゼロモード移行確率として仮に30%
$${p_{2}}$$をチャンスモード移行確率として仮に20%
$${p_{3}}$$を通常モード移行確率として仮に50%
で計算してみます。
あてはめると計算式は以下のようになります。

$$
\frac{n!}{x_{1}!x_{2}!x_{3}!}*p_1^3*p_2^2*p_3^3=\frac{8!}{3!2!3!}*0.3^3*0.2^2*0.5^3
$$

普通に計算しようとすると

$$
=(8×7×6×5×4×3×2×1)÷((3×2×1)×(2×1)×(3×2×1))×0.3^3×0.2^2×0.5^3
$$

ですかね。めんどくさいですね。
これをエクセルに突っ込むとすると、

$$
=fact(8)/(fact(3)*fact(2)*fact(3))*poewr(0.3,3)*power(0.2,2)*power(0.5,3)
$$

とかになります。
FACT( ) はカッコ内の数字の階乗(数字に!マークがつくヤツ)を求める関数で
POWER( , )はカッコ内の2つの数字のべき乗(AのB乗みたいなヤツ)を求める関数だそうです。
さすがexcelですね。
で、計算してみると0.0756とか表示されます。
この設定では7.56%の確率でこういう事が起きるよ。と計算できます。
これを各設定で計算してやって設定推測の礎とします。
長ったらしいですね。

で、他にも色々と計算の方法はあったんですが、とても長ったらしい計算式になってしまいがちで、ちょっとミスがあった時にそれに気付けるかどうかと、気づいた時に修正が大変かなあという感じでした。
一応、他にも色々とやってはみましたので学習の跡を紹介しておきます。

記号の意味は上の計算式のヤツと同じだと思ってください。

$$
=combin(n,x_{1})*combin(n-x_{1},x_{2})*combin(n-x_{1}-x_{2},x_{3})*power(p_{1},x_{1})*power(p_{2},x_{2})*power(p_{3},x_{3})
$$

とか

$$
=binom.dist(x_{1},n,p_{1},false)*binom.dist(x_{2},n-x_{1},p_{2}/(1-p_{1}),false)
$$

とかになります。
答えは全部0.0756です。
他にも計算の仕方は色々あるんでしょうな。
こんな感じの式に各設定での数値を入れた計算結果で比率を出します。

一応の解説

浅い理解で一応解説。
まず上の式。
前半のcombin関数の部分で組み合わせの数を計算します。
高一あたりの数学で習う$${{}_n C_k}$$ですね。

計算式で表すと$${\frac{n!}{k!(n-k)!}}$$となります。
後半のpower関数の部分でなんか良い感じにその事柄が続けざまに起きる確率に計算して、掛け合わせると不思議とその事柄が起きる確率が出てくる感じです。

というか最初に出てきた公式の前半部分の見た目がちょこっと変わっただけで、やってることは同じのようです。
数学って便利ですね。

combin関数の部分では、最初に「8回中3回」の組み合わせを計算しています。
ZEROモードに移行する数の組み合わせです。
次にチャンスモードに移行する組み合わせ数を計算しますが、ZEROモードに移行した分はもう計算してると考えて除外します。
「8-3」の「5回中2回」の組み合わせ数を出します。
最後に通常モードに移行する部分ではZEROモードとチャンスモードに移行した分の組み合わせを除外して計算します。
母数が「8-3-2」となるので「3回中3回」となって1通りなので、無くても良いような部分ですが、考え方を理解する上ではあったほうが良いのかなと。

次に下の式。
まずは二項分布の式で8回中3回ZEROモードに移行する確率を求めています。
次に既にZEROモードに移行した部分を除いて、8-3=5回中2回チャンスモードに移行する確率を求めますが、移行する確率からもZEROモード移行の部分を除きます。

$$
x_{2}/(1-x_{1})=20\%÷ (1-30\%)=28.57\%
$$

として計算します。
最後に通常モードに移行する確率を計算しますが、これは8-3-2=3回中3回通常モードに移行する確率になり、移行確率は

$$
x_{3}/(1-x_{1}-x_{2})=50\%÷(1-30\%-20\%)\\
=50\%÷50\%=100\%
$$

となるので、最後の項目に関しては式は省略できますが、理屈と言うかフォーマットとしては

$$
*binom.dist(x_{3},n-x_{1}-x_{2},p_{3}/(1-p_{1}-p_{2}),false)
$$

という式がくっついてると考えたほうが良いのかもしれません。
また二項分布の計算式で確率が100%を少しでも超えてしまうとエラーが出て計算できません。
公表されてる数値をそのまま足しても、四捨五入とか桁数の関係でキッチリと100%になるのはむしろ稀で、99.98%とか、100.03%とかになってしまってたりするのが普通なので、自分でフォーマットを作る場合はどこでどう数字が丸められてるか考えたり、どこかで帳尻を合わせる作業が必要になってきます。
例えば「0.4%と書いてあるけどこれは1/256のことだろう」みたいな感じで。

また、このパターンの計算式を使用してAT終了画面などから設定推測をする場合、特定の設定だけ(振分が無かったりする都合で設定が確定するパターン等で)エラーを吐いたりする事があります。

なんでエラーが出るのかというと、成功確率の表を◯◯分の1の○○を羅列する形式で作った場合、成功確率を「1/A5」の様なセルの参照の仕方で設定することになりますが、これが0だとゼロ除算(ゼロで割るというのは数学では出来ない)になってエラーを吐きます。

その都度場当たり的に計算式を修正をするのもまずまず手間なので、全体の確率である「1」に計算にほとんど影響無い範囲で数字を足しちゃうのも一つの手なのかもしれません。

$$
1.000000001  ‐ p_{1} ‐ p_{2}
$$

とか、あらかじめ成功確率を0%ではなく0.00000001%にしておくとかそんな感じで。
ただあまりスマートな手段だとは思えないし、式が汚いですね。
条件式を書き加えておく手もありますが、いまいち煩雑ですし。
〇〇分の1で公開されている部分の設定値も、すべて小数や%表記に直して作っておくのも一つの手ですが、切り捨てられている数字も含めて完全に正確な設定値がわからない場合に、適当な数字に丸めちゃうのも個人的には抵抗があります。
作ったものを点検するのもめんどくさくなりますし、なんか他に無い良い手って無いのかなあと思っています。

また、3項目くらいだと全然大した事ありませんが、項目が増えれば増えるほど式が冗長になって大変です。
尚、新鬼武者2の鬼ボーナス中の設定示唆は全部で24種類ですね。
うん。
気が狂いそう。
なんですが、一番最初の式の後半部分

$$
=power(p_{1},x_{1})*power(p_{2},x_{2})*power(p_{3},x_{3})
$$

ここの部分を各設定について計算して比率を出してやるだけでも、答えは同じになります。
一番簡単。

ただ、各設定で起きる確率の比率を出すには問題ないのですが、組み合わせ数までは計算してないので、その設定でその事柄が実際に起きる確率までは求めてない式になります。

なので「ちょっとモード移行が下ブレしてるだけで⑥なんじゃないかなー。下ブレしてるとしたらどの程度の確率なのかなー」みたいな事を知りたいときには、これじゃない式を立てる必要があります。
逆に上ブレを疑ってる時も同様です。

また結果の種類とか確率にもよりますが、試行回数を500とかに増やすと簡単に組み合わせ数が膨大に成りすぎて、また確率が低くなりすぎて、エラーを吐かれるので、簡単な方の式では計算できなくなったりするので、試行回数が多い(通常ゲームとかに限らずAT中の全ゲームを分母とする場合とかも)ケースではめんどくさくても二項分布の関数を組み合わせた計算式で計算する他無いのかなぁ、と言うのが現状の認識であります。

また、ご覧の通りではありますが、サンプルの母数も式には出てこない事からもわかるように、確率の合計が100%になるような要素の組み合わせでしか計算は出来ません。

というか計算はできますが、設定推測に使う値としてはまともな答えが返ってきません。
試しにジャグラーからビッグボーナスとレギュラーボーナスとぶどうの回数だけ取り出して計算させたりすると(設定推測に使う値としては)無茶苦茶な答えが出てくるので逆に試してみるのも面白いかもです。

一方で例えばバーサスリヴァイズや新ハナビのRT中のRTリプレイ比率判別とかに使うなら、すべての要素を考慮しなくてもそれなりの精度で設定推測できる感じですね。

で、結局これは先人の知恵で計算の仕方が判明してるものを無駄にこねくり回してるだけで、公式の過程から見ても、この類の話に明るい人からすると「そらそうやろ……」程度の話しかしてないと思うのですが、その辺はどうか笑って許してやってください。

経緯と説明と能書き

ほとんど何も知らない状態で色々計算式を作ってみてたら、結構これあきらかに違うんじゃない?って結果になりました。
番長ZEROに限った話ではありませんが、AT終了画面とかモード移行とかの数値がちょっと高設定に傾くと、すぐにこぜ⑥な計算結果になったり、逆にすぐにこぜ①な計算結果になったりで、「絶対計算式間違ってんな」というのだけはわかりました。
学が無いというのは恐ろしい。
ついでに言うと、これ計算間違ってんなってアプリもあったりしたので、それも自分で調べ始めたきっかけですね。

また例えばジャグラーとかの場合、通常時の小役回数とかボーナス回数からの設定推測も、厳密性を求めれば多項分布で計算する事になるはずです。
1ゲームでボーナスやら小役やらハズレやら多種の結果が得られる事になるので、概念としては当然そうなりますよね。
なんですが、各小役やボーナスについて二項分布で計算した結果同士をかけ合わせて設定期待度を出しても、多項分布で求めた数値とあまり大きく乖離しませんので、気にしければそれまでの話なのかなと。
今、検証してる限りだと。
一応、先日打ったマイジャグの数値など。

下が設定推測結果です。
左が各項目を二項分布で求めた数字を単純にかけ合わせた設定期待度で、右が多項分布の計算で求めた設定期待度になりますが、大して変わらないですね。
数字をいじってみると、試行数の大小と極端にブレたいわゆるハズレ値みたいな結果の項目があるかどうかで誤差が大きくなるかどうか決まってくるように見えます。
ゲーム数が少ない内は見た目の数字上でも数%違いが出てくる感じですね。
とは言えこの数値が本当に計算として正しいのか、もうちょっと適切な出し方は無いのかなど検討を重ねている最中ではあります。

(尚、こんな数%の誤差をどうこういじってあーでもないこーでもないと騒いでるよりは、お店のデータとって設定配分とか高設定投入位置を考える方がよほど収支に貢献するのは間違いない事実でありますが、気になっちゃう。ちなみにネットに転がってるいくつかのアプリを試してみてもまあまあ違う結果が出たりしました。)

という事で1から書き出してみたら、色々再確認できたり、理解してない部分も確認できたり勉強になった様な気がしますが、どうだったんだろうか。
以上、初学者の戯言でした。
ステキなツッコミお待ちしております。(了)

追記
その4も書きました。

この記事が気に入ったらサポートをしてみませんか?