ベル確率はどれくらいぶれるか?

お世話になっております、スログラミングです。

前回、ぶどう確率がどれくらいぶれるか?をプログラミングしてみましたが、今回はベル編です。
ということでツインドラゴンハナハナもしくはプレミアムハナハナのベル確率を検索してみましたが、ハナハナのベル確率って情報数がすごい少ないですね。。
(このサイトでもぶどう逆算の需要よりもベル逆算の需要の方が多いのが気になってましたが、謎が解けました。)
気が向いたら、ニューハナハナゴールドやツイドラ、プレハナのベル確率予想もチャレンジしてみます。

話が逸れましたが、ネットの海を徘徊しながら自分でまとめたベル確率はおよそこんな感じでした。
設定1:7.64
設定6:7.32
ということで早速シミュレータを回してみましょう。

説明は前回の記事を参照いただくということで割愛します。
ざっくりいうと、
・シミュレータで設定1と設定6で100~1000個までベル取得した時のベル確率を1000回取得
・ボックスプロット(箱ひげ図)で結果を描画
します。

※毎度のことですが、本内容の正確性は何も保証できませんので、ご了承ください。

今回のアジェンダはこちら。

1. ヒストグラムとは?

今回は前回のコードがほぼそのまま使えます。
修正点としては、変数名をぶどう→ベルに変更し、ベル確率の設定を変更するだけです。
    # ベル確率の設定
    ベル確率_設定1 = 7.64
    ベル確率_設定6 = 7.32
とはいえ、これだけではあまりにも情報量が少ない記事になってしまいますので、今回はボックスプロットだけでなくヒストグラム(度数分布)の描画も行ってみます。

ヒストグラムとは下図のようなグラフで、縦軸は度数、つまり頻度(回数)を表しています。
下図は、設定1でベルを800個数えたときのベル確率がいくつになったか?をプロットしたデータですが、例えば緑枠で囲った部分を見ると、ベル確率が7.50となるケースが約850回発生したことがわかります。

同様に青枠で囲った部分を見ると、ベル確率が8.25となるケースが約50回発生したことがわかります。
当たり前といえば当たり前ですが、設定1のベル確率である7.64よりも離れた値となるほど、発生頻度が低くなることがわかります。

pythonでは下記の1文で描画することができます。
データの部分に、ヒストグラムを描画したいデータを入れればOKです。
    pylab.hist(データ)
これだけで基本的には自動でヒストグラムを描画してくれますが、色々と細かい設定も可能です。
    # bins:縦棒の数、color:グラフの色、alpha:色の透過度)
    pylab.hist(データ, bins=30, color='red', alpha=0.5)
また、ちょっと横道にそれますが、今回のように複数のグラフを別々のウィンドウで表示させたい場合は、以下のようにpylab.figure()を先に書いておけばOKです。
逆に1つのグラフ内に複数のグラフを描画したい場合は、以下のpylab.figure()を削除すればOKです。
    pylab.figure()
    pylab.hist(データ1)
    pylab.figure()
    pylab.hist(データ2)

2. 今回作成したコード

今回作成したコードはこちら。
ベル400個数えたときと、800個数えたときのヒストグラムを描画するようにしています。
    # coding: UTF-8
    # 乱数作成用
    import random
    # ボックスプロット描画用
    import pylab
    # 統計値取得用
    import numpy as np
    
    # ベル確率の設定
    ベル確率_設定1 = 7.64
    ベル確率_設定6 = 7.32
    
    # 乱数範囲の設定準備
    ベル確率_設定1 = round(65536 / ベル確率_設定1)
    ベル確率_設定6 = round(65536 / ベル確率_設定6)
    
    # 乱数範囲の設定(設定1)
    ベル確率_設定1_下 = 1
    ベル確率_設定1_上 = ベル確率_設定1_下 + ベル確率_設定1 - 1
    
    # 乱数範囲の設定(設定6)
    ベル確率_設定6_下 = 1
    ベル確率_設定6_上 = ベル確率_設定6_下 + ベル確率_設定6 - 1
    
    # 結果用の箱やカウンタの準備
    ベル個数 = []
    ベル結果_設定1 = []
    ベル結果_設定6 = []
    ベル個数_設定1 = 0
    ベル個数_設定6 = 0
    ゲーム数 = 0
    
    #ループ処理(100回ループする)
    for loop in range(1000):
        # ループ処理(ベルを1000個獲得するまでループする)
        while ベル個数_設定1 <= 1000:
            ゲーム数 = ゲーム数 + 1
            rand = random.randint(1,65536)
    
            # 取得した乱数が設定1のベル確率の範囲内にあるか判定
            if ベル確率_設定1_下 <= rand <= ベル確率_設定1_上:
                # ベル個数をカウント
                ベル個数_設定1 = ベル個数_設定1 + 1
    
                # 100個単位で集計するために、100で割った時の余りが0の時を判定
                if ベル個数_設定1 % 100 == 0:
                    # 獲得時のベル確率を配列に格納
                    ベル結果_設定1.append(ゲーム数 / ベル個数_設定1)
                    # 後のデータ整形用にベル何個の時のデータかをメモしておく。
                    ベル個数.append(ベル個数_設定1)
        # ベル獲得数とゲーム数をリセット
        ベル個数_設定1 = 0
        ゲーム数 = 0
    
        # ループ処理(ベルを1000個獲得するまでループする)
        while ベル個数_設定6 <= 1000:
            ゲーム数 = ゲーム数 + 1
            rand = random.randint(1,65536)
    
            # 取得した乱数が設定6のベル確率の範囲内にあるか判定
            if ベル確率_設定6_下 <= rand <= ベル確率_設定6_上:
                # ベル個数をカウント
                ベル個数_設定6 = ベル個数_設定6 + 1
    
                # 100個単位で集計するために、100で割った時の余りが0の時を判定
                if ベル個数_設定6 % 100 == 0:
                    # 獲得時のベル確率を配列に格納
                    ベル結果_設定6.append(ゲーム数 / ベル個数_設定6)
    
        # ベル獲得数とゲーム数をリセット
        ベル個数_設定6 = 0
        ゲーム数 = 0
    
    # ボックスプロット用に結果を整形
    ベル結果_設定1_100 = []
    ベル結果_設定1_200 = []
    ベル結果_設定1_300 = []
    ベル結果_設定1_400 = []
    ベル結果_設定1_500 = []
    ベル結果_設定1_600 = []
    ベル結果_設定1_700 = []
    ベル結果_設定1_800 = []
    ベル結果_設定1_900 = []
    ベル結果_設定1_1000 = []
    ベル結果_設定6_100 = []
    ベル結果_設定6_200 = []
    ベル結果_設定6_300 = []
    ベル結果_設定6_400 = []
    ベル結果_設定6_500 = []
    ベル結果_設定6_600 = []
    ベル結果_設定6_700 = []
    ベル結果_設定6_800 = []
    ベル結果_設定6_900 = []
    ベル結果_設定6_1000 = []
    
    # ベル確率を格納した配列を一つずつ確認していく
    for i, j, k in zip(ベル個数, ベル結果_設定1, ベル結果_設定6):
        # ベル100個の時のデータをまとめる
        if i == 100:
            ベル結果_設定1_100.append(j)
            ベル結果_設定6_100.append(k)
        # ベル200個の時のデータをまとめる
        elif i == 200:
            ベル結果_設定1_200.append(j)
            ベル結果_設定6_200.append(k)
        # ベル300個の時のデータをまとめる
        elif i == 300:
            ベル結果_設定1_300.append(j)
            ベル結果_設定6_300.append(k)
        # ベル400個の時のデータをまとめる
        elif i == 400:
            ベル結果_設定1_400.append(j)
            ベル結果_設定6_400.append(k)
        # ベル500個の時のデータをまとめる
        elif i == 500:
            ベル結果_設定1_500.append(j)
            ベル結果_設定6_500.append(k)
        # ベル600個の時のデータをまとめる
        elif i == 600:
            ベル結果_設定1_600.append(j)
            ベル結果_設定6_600.append(k)
        # ベル700個の時のデータをまとめる
        elif i == 700:
            ベル結果_設定1_700.append(j)
            ベル結果_設定6_700.append(k)
        # ベル800個の時のデータをまとめる
        elif i == 800:
            ベル結果_設定1_800.append(j)
            ベル結果_設定6_800.append(k)
        # ベル900個の時のデータをまとめる
        elif i == 900:
            ベル結果_設定1_900.append(j)
            ベル結果_設定6_900.append(k)
        # ベル1000個の時のデータをまとめる
        elif i == 1000:
            ベル結果_設定1_1000.append(j)
            ベル結果_設定6_1000.append(k)
    
    # このまま大量の配列があるとグラフ描画時に面倒なので、配列をまとめる
    ベル結果_設定1_箱ひげ = [ベル結果_設定1_100, ベル結果_設定1_200, ベル結果_設定1_300, ベル結果_設定1_400,ベル結果_設定1_500,ベル結果_設定1_600,ベル結果_設定1_700,ベル結果_設定1_800,ベル結果_設定1_900,ベル結果_設定1_1000]
    ベル結果_設定6_箱ひげ = [ベル結果_設定6_100, ベル結果_設定6_200, ベル結果_設定6_300, ベル結果_設定6_400,ベル結果_設定6_500,ベル結果_設定6_600,ベル結果_設定6_700,ベル結果_設定6_800,ベル結果_設定6_900,ベル結果_設定6_1000]
    
    # 結果の表示
    pylab.figure()
    bp1 = pylab.boxplot(ベル結果_設定1_箱ひげ, labels=['100', '200', '300', '400', '500', '600', '700', '800', '900', '1000'], patch_artist=True, boxprops=dict(facecolor='none', color='red'), medianprops=dict(color='red'), whiskerprops=dict(color='red'), capprops=dict(color='red'), flierprops=dict(markeredgecolor='red'))
    bp2 = pylab.boxplot(ベル結果_設定6_箱ひげ, labels=['100', '200', '300', '400', '500', '600', '700', '800', '900', '1000'], patch_artist=True, boxprops=dict(facecolor='none', color='blue'), medianprops=dict(color='blue'), whiskerprops=dict(color='blue'), capprops=dict(color='blue'), flierprops=dict(markeredgecolor='blue'))
    pylab.legend([bp1["boxes"][0], bp2["boxes"][0]], ["設定1", "設定6"], prop={"family":"MS Gothic"})
    
    # 統計値の表示
    print("ベル個数", "設定", "第1四分位", "第2四分位", "第3四分位", "四分位範囲")
    ベル = 100
    for i, j in zip(ベル結果_設定1_箱ひげ, ベル結果_設定6_箱ひげ):
        q75_設定1, q50_設定1, q25_設定1 = np.round(np.percentile(i, [75, 50, 25]), 2)
        iqr_設定1 = np.round(q75_設定1 - q25_設定1, 2)
        q75_設定6, q50_設定6, q25_設定6 = np.round(np.percentile(j, [75, 50, 25]), 2)
        iqr_設定6 = np.round(q75_設定6 - q25_設定6, 2)
        print(ベル, "1", q25_設定1, q50_設定1, q75_設定1, iqr_設定1)
        print(ベル, "6", q25_設定6, q50_設定6, q75_設定6, iqr_設定6)
        ベル = ベル + 100
    
    # ヒストグラムの描画
    # ボックスプロットと異なるWindowにする
    pylab.figure()
    # ベル400個のときのヒストグラム
    hi1 = pylab.hist(ベル結果_設定1_400, bins=30, color='red', alpha=0.5)
    hi2 = pylab.hist(ベル結果_設定6_400, bins=30, color='blue', alpha=0.5)
    pylab.legend(["設定1", "設定6"], prop={"family":"MS Gothic"})
    pylab.title("400個", fontname="MS Gothic")
    
    # ベル800個のときのヒストグラム
    # ベル400個のときと異なるWindowにする
    pylab.figure()
    hi1 = pylab.hist(ベル結果_設定1_800, bins=30, color='red', alpha=0.5)
    hi2 = pylab.hist(ベル結果_設定6_800, bins=30, color='blue', alpha=0.5)
    pylab.legend(["設定1", "設定6"], prop={"family":"MS Gothic"})
    pylab.title("800個", fontname="MS Gothic")
    
    pylab.show()

3. 結果の確認

作成したコードを実行した結果、ボックスプロットは下図のようになりました。

ちなみに前回のぶどう確率のグラフを横に並べるとこんな感じ。
(縦軸のレンジが若干違いますが、ご容赦ください。)
ベルとぶどうだと確率分母が1違うだけですが、結果は思ったよりも変わりますね。

※以下、考察のようなことを書いていますが、押し引きの判断基準は人によって異なりますので、こんな考え方もあるのね程度の見方でお願いします。

3.1. ベル800個数えれば結果を信じて良さそう

各ベル個数の結果を確認すると、ベル800個数えた辺りから設定1と設定6の四分位範囲が被らなくなります。
同じ見方でぶどうの結果を確認すると、ぶどう600個辺りで四分位範囲が被らなくなるので、200個分追加で回さないと設定判別できないことになります。
ざっくり計算すると、ベル200個数えるのに1500G程度必要なので、この差はかなり大きいですね。
ちなみに、1500Gを設定1(機械割96%と仮定)で回したとすると期待収支は、-180枚程度です。


とはいえ高設定の可能性もあるので、期待収支の問題というよりは、時間拘束されることの方がデメリットとしては大きいですね。

3.2. ベル400個程度からベル確率を参考にできそう

ベル400個くらいから一方の第2四分位が他方の四分位範囲の外側になっています。
こちらもぶどうの場合は300個程度だったので、100個は追加で数える必要がありますね。
ベル100個追加で数えるのに必要なG数と期待収支は先ほどの半分なので、設定1の機械割が96%と仮定して、750Gで-90枚となります。

3.3. ベル400個ならベル確率7.0くらい、ベル800個ならベル確率7.4くらいが継続目安?

ここからはヒストグラムを確認してみます。
ヒストグラムはこのようになりました。
"3.1"~"3.2"で例示したベル400個時点(図左)と800個時点(図右)のグラフです。
※元々1000ループの予定でしたが、グラフがガタガタになってしまったので、10000ループに変更してます。

ざっくりとした見方として、グラフの重なりが大きい部分は設定を見抜きづらい箇所という考え方ができます。
ベル400個時点のグラフと800個時点のグラフを見比べると、グラフの重なり具合が大きく異なっていることがわかります。
例えば、ベル確率が設定6の近似値の7.3のとき、ベル400個時点では設定1でも結構な頻度でベル確率7.3になってしまうのに対して、ベル800個時点では設定1でベル確率7.3になる頻度はさほど高くありません。

ここでおおよその押し引きの目安として、グラフの重なりが半分以下を閾値としてグラフを見てみると、タイトルにしたようにベル400個ならベル確率7.0くらい、ベル800個ならベル確率7.4くらいなら粘ってみても良いのかなと思えます。


ということで、今回はボックスプロットだけでなくヒストグラムも用いて、ベル確率がどのくらい荒れるかをシミュレートしてみました。
こういうデータを見ながら色々妄想してる時間も楽しいですね。


にほんブログ村 スロットブログ スロット情報へ
にほんブログ村

コメント

このブログの人気の投稿

【WEBアプリ】Sキングハナハナ-30のベル確率予想&ベル確率逆算ツール&設定判別ツール

【WEBアプリ】ハナハナホウオウ天翔のベル確率を差枚数から逆算するツール

【WEBアプリ】6号機ジャグラーのぶどう確率逆算ツール&設定判別ツール