アルゴリズム忘備録

競技プログラミングとかデータ分析とか

Rでガチャ推定

最近のガチャは確率pで当たりが出ます、というだけじゃなく天井と言うものが設定されてることがあります。これは、例えばガチャにある一定の数nが設定され、その中で必ず1枚は当たりがある、といったものです。とりあえずこれをモデル化してみます。

 

流石に天井付きガチャで当たりを引く確率なんてのはデフォルトライブラリにはないので適当に関数を書きます。

g <- function(m, n) {
arr <- c()
last <- 0
for (k in n) {
if (m <= k) {
arr <- c(arr, 0)
} else {
ret <- 1.0
for (i in 0:(k-2)) {
ret <- ret * (m - 1 - i) / (m - i)
}
ret <- ret * 1 / (m - (k - 1))
arr <- c(arr, ret)
last <- ret
}
}
return (arr)
}

一方で、通常の天井のないガチャは簡単です。二項分布っぽいですが、若干違うのでこっちも関数を自作します。

f <- function(p, n) { return (p * (1-p)^n) }

 で、書きます。

plot(1:1000, cumsum(f(1/200, 1:1000)), type="l", xlim=c(0, 1000), ylim=c(0, 1), lty=2, ylab="")
par(new=T)
plot(1:1000, cumsum(g(200, 1:1000)), type="l", xlim=c(0, 1000), ylim=c(0, 1), ylab="p")

 

f:id:phwinx:20170507033129p:plain

 点線が天井なしガチャ、実線が天井ありガチャで、n=200(天井なしの場合は1/n=0.005の確率で当たる)として、累積で当たった人の割合をplotしてあります。100回あたりから徐々に差がではじめ、ワースト10%の運が悪い人では6倍ぐらいの投資金額の差が出ています。というわけで自分がとても運が悪いという認識のある人は天井ありガチャのあるゲームをやりましょう。