axjack's blog

### axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz ###

コンプガチャ問題

おまけを10種類揃えるには?

  • おまけが全部で25種類の、とあるお菓子がある
  • 一個税込143円である
  • 25種類中欲しいのは10種類
  • 1種類目が当たる確率は10/25
  • 2種類目が当たる確率は9/25
  • 10種類目が当たる確率は1/25
  • 一般に、確率pのものを引き当てるために必要となる購入回数の期待値は1/pである(幾何分布)
  • よって10種類コンプリートするためには平均で


\displaystyle (10/25)^{-1} + (9/25)^{-1} + \cdots + (1/25)^{-1}

回購入すれば良い。これを計算すると、

f <- function(x,N){
p <- (1:x)/N
sum(1/p)
}

f(10,25)
[1] 73.22421

約73回購入することとなる。金額に換算すると143×73 = 10,471円となる。
1万円札と500円玉を握りしめて大人買いすれば10種類コンプリートできるかもしれない。

幾何分布の復習

  • 確率変数Yが幾何分布Geo(p)に従うとする。
  • ここでpは成功確率、q = 1-pとする。
  • 確率質量関数はP(Y=y) = pq^y
  • つまりy回連続で外れを引いてy+1回目で初成功するような確率である
  • 確率母関数はG(s)=E(s^Y)=\sum s^y p q^y = p \sum (qs)^y = p (1-qs)^{-1}である
  • 確率母関数を使うと、期待値がq/pとなる
  • この期待値は「y回外れを引いてy+1回目で初成功する」ときのYに関する期待値である
  • つまり、初成功する回"目"の期待値はq/p1を足してq/p + 1 = 1/p となる。

おまけを25種類コンプリートするには?

では、1種類コンプリート・2種類コンプリート・…・25種類コンプリートにかかる平均購入回数は?計算すると

data.frame(
種類=paste(1:25,'種類')
,平均購入回数 = vapply(1:25, f, 0, N=25)
) |> kable()

種類 平均購入回数
1 種類 25.00000
2 種類 37.50000
3 種類 45.83333
4 種類 52.08333
5 種類 57.08333
6 種類 61.25000
7 種類 64.82143
8 種類 67.94643
9 種類 70.72421
10 種類 73.22421
11 種類 75.49693
12 種類 77.58027
13 種類 79.50334
14 種類 81.28906
15 種類 82.95572
16 種類 84.51822
17 種類 85.98881
18 種類 87.37770
19 種類 88.69349
20 種類 89.94349
21 種類 91.13397
22 種類 92.27033
23 種類 93.35729
24 種類 94.39895
25 種類 95.39895


となる。

さて本当に幾何分布であっているのか?ということで、幾何分布に従う乱数を生成して確認する。

f2 <- function(nn,p){
mean( rgeom(nn,p)+1 )
}

nn <- 1000
data.frame(
種類=paste(1:25,'種類')
,幾何分布の乱数で計算した平均購入回数 =mapply(f2,nn,(1:25)/25) |> cumsum()
) |> kable()

種類 幾何分布の乱数で計算した平均購入回数
1 種類 25.2860
2 種類 37.6042
3 種類 46.1189
4 種類 52.3534
5 種類 57.3745
6 種類 61.5205
7 種類 65.1356
8 種類 68.2428
9 種類 70.9967
10 種類 73.4832
11 種類 75.7831
12 種類 77.8665
13 種類 79.7682
14 種類 81.5705
15 種類 83.2414
16 種類 84.7918
17 種類 86.2650
18 種類 87.6587
19 種類 88.9822
20 種類 90.2273
21 種類 91.4115
22 種類 92.5498
23 種類 93.6351
24 種類 94.6796
25 種類 95.6796


となる。だいたいあっている。

参考文献:
www.bandai.co.jp

axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz.