「5%なのに20回で出ない」は、不具合ではありません
ドロップ率5%のアイテムを、平均どおりの20回周回しても出なかった。プレイヤーからそんな声が上がると、確率の設定ミスを疑いたくなります。しかし多くの場合、計算上は十分に起こりうることです。開発側が確率の感覚を持っていないと、「渋い」と言われる設計や、逆に出すぎてしまう設計になりかねません。
この記事では、「何回試せば出るか」を数式で見積もる方法と、天井(確定枠)の考え方、体感とのズレの理由をまとめます。
基本の式
1回あたりの確率をp、試行回数をnとします。各回は独立で、前の結果に影響されないものとします。
- 1個も出ない確率 = (1 − p)ⁿ
- 1個以上出る確率 = 1 − (1 − p)ⁿ
- 期待される入手数 = n × p
- x%の確率で出るのに必要な回数 = ⌈ln(1 − x) ÷ ln(1 − p)⌉(小数点以下切り上げ)
「期待回数 1 ÷ p」は平均の話で、「そこまでに出る確率」が何%かは別問題です。この区別が体感ズレの核心です。
数値例
Pythonで計算して検算した値です。
p=5% n=20 → 1個以上: 64.15% / 0個: 35.85%
p=5% n=40 → 1個以上: 87.15% / 0個: 12.85%
p=5% n=60 → 1個以上: 95.39%
p=1% n=100 → 1個以上: 63.40% / 0個: 36.60%
p=1% n=300 → 1個以上: 95.10%
平均回数(1 ÷ p)ちょうどで試しても、出る確率は約63〜64%に留まります。残りの約36%は、平均回数を使い切ってもまだ出ていません。1 ÷ pの回数での失敗率は、pが小さいほど約36.8%(1/e)に近づきます。
「何割の人が出せるか」で見ると、必要な周回数は次のとおりです。
50% 90% 99%
p=5% 14 45 90
p=3% 23 76 152
p=1% 69 230 459
p=1%のアイテムは、半数のプレイヤーが出すまでに69回、9割が出すまでに230回、ほぼ全員が出すまでに459回かかります。平均値の100回だけを見ていると、この裾野の長さを見落とします。
p=5%でn=20のとき、入手数の分布は、0個が35.9%、ちょうど1個が37.7%、2個以上が26.4%です。期待値は1個ですが、「0個」と「2個以上」を合わせると6割以上になります。ばらつきが大きい、と言い換えられます。
天井と確定枠の考え方
長い裾野をなくす手段が天井です。「N回目までに出なければ、N回目で確定させる」という設計になります。
p=3%、50回目で確定する場合を考えます。
- 天井がなければ、50回で出ない確率は 0.97の50乗 ≒ 21.81%です。天井を入れると、これが0%になります。
- 平均の試行回数は (1 − (1 − p)ᴺ) ÷ p で求まり、約26.06回です。天井なしの平均 33.33回(1 ÷ p)より短くなります。
天井を入れると、運の悪いプレイヤーの上限が決まり、同時に平均も少し下がります。つまり、表示している確率のままで天井を足すと、実際の入手しやすさは上がっています。経済設計(アイテムの供給量)を保ちたいなら、基礎確率pも下げて、平均回数が元と同じになるよう調整します。
もう一つの考え方は、確率を回数に応じて少しずつ上げる方式や、「N回に1回は必ず当たり枠」にする方式です。式が複雑になるほど、解析式ではなくシミュレーションで確かめるほうが確実です。
体感とのズレが生まれる理由
- 平均と中央値の混同: p=5%の平均は20回ですが、半数が出せるのは14回です。一方、90%が出せるのは45回。短い側と長い側で見え方が違います。
- 賭け事の誤謬: 19回外れたあとの20回目も、確率は5%のままです。「そろそろ出るはず」という期待は、過去の外れを根拠にしても成立しません(天井を実装している場合を除く)。
- 母集団の効果: 平均の2倍の40回でも出ない確率は12.85%。プレイヤーが1000人いれば、100人以上がそれを経験します。不満の声が一定数出るのは、設計通りの結果とも言えます。
- 確率の表示と実装の差: 内部で別の処理(補正、天井、抽選の順序)が入っていると、見た目の確率と実測がずれます。ずれを後から調べるときは、数千〜数万回シミュレーションして、計算値と照らし合わせます。
設計の判断基準
- 「大半のプレイヤーが何回で入手できてほしいか」を先に決め、そこから逆算してpを置きます(例: 9割が45回以内ならp=5%)。
- 入手できなかったときの救済(天井、別ルート、素材の蓄積)を、レア度が高いほど手厚くします。
- 複数のアイテムが絡むときは、個別の確率ではなく「全部集まるまで」の期待回数で見ます。
シミュレーションで確かめる
計算式の結果が正しく実装に反映されているかは、乱数を大量に回して確認できます。次のコードは、p=5%で20回試して1個以上出る割合を求めるものです。
import random
p, n, trials = 0.05, 20, 200000
hit = sum(any(random.random() < p for _ in range(n)) for _ in range(trials))
print(hit / trials) # 0.64前後(理論値は0.6415)
乱数の種を1にして実行した例では0.6417となり、理論値の64.15%とほぼ一致しました。シード値を固定すれば結果を再現できます。ただし、シミュレーションの結果には誤差があるため、数%単位の違いを議論するなら試行回数を増やす必要があります。
天井を足した場合の補正も数値で見られます。天井50回を足しつつ、平均を元の33.33回に保つには、基礎確率を約1.77%まで下げる必要があります。このとき天井に到達するプレイヤーは約40.9%です。つまり、確率を下げすぎると、天井が「保険」ではなく「ほぼ全員が使う前提」に変わります。天井を主役にするのか保険にするのかは、基礎確率との組み合わせで決まります。
関連ツールの使い方
ドロップ率計算機に確率と回数を入れると、1個以上出る確率や、50%・90%に届く回数が一度に出ます。複数の景品があるときはガチャ確率計算機、重み付きの抽選を設計するなら乱数設計ツールで確率表や天井の効果を確認できます。単純に抽選や班分けをしたい場面では抽選・グループ分け・サイコロが使えます。
まとめ
ドロップ率は「平均何回」ではなく「何割の人が何回で出せるか」で考えるのがコツです。p=5%なら50%が14回、90%が45回、p=1%なら69回と230回。裾野の長さを数字で把握しておけば、天井の位置や救済策も根拠をもって決められます。