マイクラの司書ガチャを、統計的な観点で検証

# はじめに
今日もマイクラの話ですが、割とまじめです。データサイエンティスト（の新人レベル）の出番です。ちなみに私はデータサイエンティストではないのですが、ChatGPTさんにご協力をお願いして、それっぽく進めます。

## マイクラの司書ガチャをご存じない方向けに説明
ゲーム内の村人MOBは、職業に就く（就かせる）ことができて、そのうちの１つが司書。
司書になると、３種類のものを取引してくれる。１つが「紙」、もう１つが「本棚」、最後の１つが「エンチャント本」。
「エンチャント本」は、多数の種類の本がある。エンチャント能力が39あり、１つの能力でもレベル１～最大５まである。レベル１しかないものから５まであるものがある。組み合わせると全部で105種類ある。
取引されるものは、「紙」と「本棚」を合わせて、107種類あることになります。

職業に就いた瞬間に、107のうち、２つに決まる。
欲しくないものが出た場合は職を解いてもう一度司書にすると、別の２つになっているので、欲しいものが出るまでそれを繰り返すことを、司書ガチャと呼びます。

なお、欲しいエンチャント本は、多くても25種くらい。そしたら４回に１回くらい出るんじゃないかと思うかもしれなくて、その確率どうなってるの？の検証がこれ。
ちなみに、確率はどーだか知らんけど、今欲しい１つが全然出ない！というのが鉄板です:innocent:

長々と失礼しました。

## 使うデータ
延々と司書ガチャを繰り返し、その記録を地味にDBに登録してます。今時点で**1,425回分**。１回で２件ずつデータがあるので、**2,850件**あります。全部自分のデータです。今回はそれを使います。

バージョンを跨いでいるので、その間に確率が変わっていることは否定できませんが、変わっていないと仮定します。たぶんかなり昔から変わっていない。ちなみにデータの最過去は2024年の2月なので、割りと新しいです。

## 検討したい仮説
①：紙と本棚とエンチャント本の出現確率は、1/3ずつである
②：能力ごとに平等な確率である
③：特定の能力に限ると、そのうちの各レベルは、平等な確率である
④：特定の能力、レベルにおいて、金額の確率分布は一定確率である

# 検証
## 【仮説①】紙と本棚とエンチャント本の出現確率は、1/3ずつである
司書の交換枠の２つは、「紙」と「本棚」と「エンチャント本」の３種類になるのだけど、1/3ずつなんじゃないかという仮説です。
交換枠の２つでは「紙」と「紙」のように、種類はかぶらないです。「エンチャント本」と「エンチャント本」にもならない。「本棚」も。

単純に回数をカウントすると、
- 紙の出現回数: 940回 (全体の約32.98%)
- 本棚の出現回数: 953回 (全体の約33.44%)
- その他の出現回数: 957回 (全体の約33.58%)

ということで、まず間違いないでしょう。2,850件の説得力が光ります。

同じ種類のものが出なくて、それぞれ1/3ならば、１枠目で「エンチャント本」が出る確率は1/3。次の２枠目で出る確率は、１枠目で出なかった2/3かつ２枠目の1/2なので、2/3  * 1/2 = 2/6 = 1/3。足し合わせて、「エンチャント本」は2/3の確率。
つまりガチャの３回のうち２回、「エンチャント本」が含まれます。逆に、３回のうち１回は、「エンチャント本」がない。

こんなことばっかりやっていた高校の時の確率統計を思い出します。こんなこと役に立つのかよ！と毒づきながら勉強していましたが、役に立ちました。

以下では、2/3でエンチャント本が出た前提で、その中で何の能力・レベルの本が出る？という話です。

## 【仮説②】能力ごとに平等な確率である

実は、ここを一番調べたかったです。というのも、fandomに下記の記述があります。

> エンチャントはソウルスピードとスニーク速度上昇を除いたすべての種類からランダムに選択される。複数のレベルを有するエンチャントは**各レベルそれぞれが一つの候補**となっており、したがって**最大レベルが大きいエンチャントほど選択されやすい傾向がある**。（[取引 - Minecraft Wiki](https://minecraft.fandom.com/ja/wiki/%E5%8F%96%E5%BC%95#cite_note-enchanted-book-12)）

つまり、最大レベル１の能力は１候補しかないけど、レベル１～５が出る能力は５候補あるので、その能力は出やすい傾向があるということ。

疑わしいんですよ！

最大レベル１の修繕はよく出るけど、最大レベル５まである射撃ダメージ増加のレベル５はなかなか出ない、同じ確率だとは思えないんです。
そこで仮説として、まず、能力の37種類で抽選があって、次に、レベルの抽選があるんじゃないかと考えました。前者が仮説②、後者が仮説③。

### 検証：まじめに統計の話
能力ごとの全レベルの出現回数を合計し、その出現確率を調べました。

帰無仮説 (H0): 各能力の出現確率に差はない。
対立仮説 (H1): 各能力の出現確率には差がある。

有意水準0.05でカイ二乗検定。

検定統計量 (Chi-squared statistic): 45.25
p値 (p-value): 0.1388
p値が大きいので、帰無仮説を棄却することができない。

やっぱりね！
fandom間違ってるよ。

### 仮説②の結果：能力単位で、等確率で出る
単純集計の結果からそうだろうなとは思ってました。いちおう下記が実際の数の一部。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/e11be79c-83f1-03b5-d3df-e194299178ac.png)

1,425回の司書ガチャの理論値は、
ガチャ1,425回のうち、「エンチャント本」が出るのは、1,425 x 2/3 = 950回。
能力は39種類あるので１能力ごとの平均出現回数は、950 / 39 = 24.4回。

実際は、（上記の表を計算）
平均25.9回、標準偏差5.7でした。

大体あってそうですね。

射撃ダメージ増加の17回っていうのがえぐいです。絶対欲しい能力なのに、そこで１σ以上の下振れの悲しみ。


## 【仮説③】特定の能力に限ると、そのうちの各レベルは、平等な確率である

②の次に、例えば、射撃ダメージ増加という能力は、レベル１～５の５種類が出るのだけど、射撃ダメージ増加に限れば、１も２も・・・５も、全部等確率で出る、という仮説です。

これは、たぶんそうだろうと思います。

fandomの説明が合っていたとしても、仮説②が合っていたとしても、同じになるはず。ゲーム的には、レベルが高い方が出にくいという設定もありだと思いますが、感覚的に等確率。

これは、各能力ごとに、１つ１つ仮説②で使った方法で、平等かどうかを調べていきます。

### 検証：まじめに統計の話

帰無仮説 (H0): 各エンチャントの異なるレベルごとの出現確率に差はない。
対立仮説 (H1): 各エンチャントの異なるレベルごとの出現確率には差がある。

1. 観測値の集計: 各エンチャントの各レベルごとの出現回数を集計します。
2. 期待値の計算: 各エンチャントの各レベルが同じ出現確率であると仮定した場合の期待値を計算します。
3. カイ二乗検定の実行: 観測値と期待値を用いてカイ二乗検定を行います。
4. 検定結果の解釈: p値を基に帰無仮説を棄却するかどうかを判断します。

結果（の一部）は下記。p値がNaNは最大レベル１なので気にしなくていい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/5c41f3d6-6baa-170e-313e-c04420acfaa4.png)

p値はことごとく0.05を超えるので、レベルごとの出現確率に有意差なし。
つまり、同じ確率で出ます。

唯一「水中呼吸」（最大レベル３）だけ、p値0.041を出していました。つまりレベルごとに出現確率に差がある。
下記が実測値。確かにレベル３が出てないのが誤差とは言いたくない感じ。正直、今は分かりません。レコード件数が足りないのかもしれない。まぁでもゲーム的には必要度は低めなので怒りは湧きません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/296a0991-5bb2-edce-4286-18f5afca7e13.png)


なおレベルの差がなさそうな例として、「射撃ダメージ増加」はこうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/f2857ca0-5e7a-8298-8f3b-6ecca03e3b9d.png)
うーん・・・レベル５は３回しか出たことがないのか。

### 別解？：最大レベル５の能力たちを、全部合算
能力ごとの分布に違いはないと仮定してそれらを全部合算すれば、それなりの量になるということで合算してみました。
ちなみに最大レベル５の能力は、"アンデッド特効"、"効率強化"、"射撃ダメージ増加"、"水生特効"、"ダメージ増加"、"虫特効"。それの能力名をつぶしてレベルごとに出現回数を合計してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/0f5f9862-88fb-9bf2-80e8-adbd7652a960.png)

平等っぽいですね。たぶん、他のレベルでも一緒でしょう。めんどくさいから調べないけど。


## 【仮説④】特定の能力、レベルにおいて、金額の確率分布は一定確率である

これは出現確率から１歩進めて、司書さんがブツは用意してくれるのだけど、その価格が高い時、安い時があって、その確率分布ってどうなってるのかなーという話です。

一般的には正規分布か何かで中心あたりが多いのかなと思いますが、肌感的には端の方も結構出るので、一定確率なのかなと思います。

またfandomの英語版を見てみると、数式まで出て、maxである価格64以下は平等だとわざわざ書いてある。素直に信じるわけではないけど、ここはそれなりに信じられる。
細かい話、レベル５は、17～71が平等で64以上は64に丸められるのかなと思いました。とすると64は出やすいはず。

> The minimum price of a book is given by 2 + 3 * (enchantment level), while the maximum price is 6 + 13 * (enchantment level). The possible values are 5–19 emeralds for Lvl I, 8–32 for Lvl II, 11–45 for Lvl III, 14–58 for Lvl IV, and 17–71 for Lvl V. For treasure enchantments the price is doubled. The cost is capped at 64 emeralds. **All values below this cap are equally probable**. （[Trading – Minecraft Wiki](https://minecraft.fandom.com/wiki/Trading#cite_note-enchanted-book-10)）

treasure enchantments、２倍になってるかなぁ。まぁ価格は二の次なのでいいんですが。

### ヒストグラム
これは、真面目に検証はしません！レコード件数が少ないし、上で書いた通り価格は二の次なので、真面目に調べるモチベーションが湧きません！

いちおうヒストグラムを書くにあたって、最大レベル１ばかり選んだのは、他のレベルもあると仮説②、③によってレコード件数が散って減るためです。見ても、少なすぎてよーわからんってなる。

フレイム（最大レベル１）の金額の分布
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/1b09148b-9c50-3732-02a1-1142f19b8f85.png)

シルクタッチ（最大レベル１）の金額分布
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/5d418ab6-3032-d4be-f61f-e0943368bf5a.png)

水中採掘（最大レベル１）の金額分布
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722610/66576dc1-c4a2-8a53-15e2-cd3260ca6f67.png)

傾向として、価格が64じゃないけど、最高額が多いですね。数件の差なのでわからないけど。

結論は、「わからない」で。雰囲気は一様分布（どの値も同じ確率）。そこに、上限を超えた場合は最大値に丸める、みたいなロジックが入っているかもしれない。

でも実はゲーム中は、これは結構気になります。レベル５だと17～64という差が大きすぎるので。でも一様分布なら、下限と上限だけわかればよさそう。


# まとめ
検討したかった仮説に対して
①：紙と本棚とエンチャント本の出現確率は、1/3ずつである
　　→　YES
②：能力ごとに平等な確率である
　　→　YES（fandomは間違い）
③：特定の能力に限ると、そのうちの各レベルは、平等な確率である
　　→　ほぼYES
④：特定の能力、レベルにおいて、金額の確率分布は一定確率である
　　→　なんとなくYES

# おわりに
最初の方に書いた、４回に１回くらい、ほしいものが出るのでは？の問いには答えていないです。まず2/3しかエンチャント本が出ないことからスタートし、その後に確率ゲームが２回（能力、レベル）走るので、真面目に考えるのがめんどくさいですが、たぶん４回に１回というほど高くはないです。また"かぶり"があるので、欲しいものを全部揃えるには、それはそれは大変。
今回の仮説検証によって、理論上の回数が出せるようになったような気がする。でもそれをやると、それを超えてもまだ得られていない時にイライラしそうですね。

別の話で、Qiitaは統計の話がちょっと少ないですが、SEとして関わる必要は出てくると思います。データサイエンティストはPythonを書くのが当たり前になってきているので、逆にSEも統計の知識を持たないと、席がなくなります。プログラムのテストとかマーケティングとか、仕事では普通に使うので、計算はChatGPTさんにお願いできるにしても、言葉はわかる程度は必須かと！

そんなこと書きながら、専門分野外だからか、この記事を書くのは思いのほか疲れました。

ではよいマイクラライフを。