Contents
概要と実務チェックリスト
このガイドは、ゲーム内ガチャ確率をCSVで記録・比較し、シミュレーションで実務判断に使う手順を示します。公式値の取り扱い、単位ルール、シミュレーターの推奨設定、簡単な算出例を含み、現場で即使えるチェックリストを先頭に提示します。
要点(短縮)
ここでは最重要ポイントを短く示します。
- 公式発表を一次情報として扱い、出典(URLと取得日)をCSVに記録すること。
- CSVの割合表記(%/小数)を統一し、per_unit_rate の計算式を明示すること。
- 目標確率の逆算は常に端数を切り上げ(ceil)で扱うこと。
- シミュレーターはデフォルトでモンテカルロ 100,000 試行を推奨し、精度が必要なら増やすこと。
- 例示値はすべて「例示値(仮)」と明記して公式値で差し替えること。
実務チェックリスト
実務でまず実行すべき手順を簡潔に示します。
- バナーごとにアプリ内表示と公式お知らせの両方を確認し、出典URLと取得日を記録する。
- CSVテンプレート(下記フォーマット)に値を入力し、単位(小数か%)をヘッダで明記する。
- per_unit_rate の計算式がCSV内で整合することを検算する。
- シミュレーターでまず 100,000 試行を実行し、中央値・90/95%点を確認する。必要に応じて 1,000,000 試行へ増やす。
- 結果は「中央値(典型)」「95%点(安心ライン)」「平均(期待値)」の順で意思決定に用いる。
CSVテンプレートと列仕様(単位明記)
CSVテンプレートは再現性の要です。ここでは各列の意味と「単位(小数か%)」を明確に示します。実運用では必ず単位をヘッダ注記し、サンプルに従って入力してください。
CSV列仕様(単位は%か小数かを明確に)
CSVでは割合の単位を統一します。推奨は機械処理しやすい「小数(0–1)」での保存です。下は各列の説明例です。
| 列名 | 内容 | 単位(推奨) | 例(例示値(仮)) |
|---|---|---|---|
| banner_name | バナー名 | 文字列 | フェスA |
| start_date | 開始日 | YYYY-MM-DD | 2026-01-01 |
| end_date | 終了日 | YYYY-MM-DD | 2026-01-07 |
| summon_type | 種類(フェス/ピックアップ等) | 文字列 | フェス |
| rarity | 対象レアリティ | 文字列 | ★6 |
| total_rate | 該当レアの総排出率 | 小数(0–1)推奨 | 0.03 (=3.0%) |
| pickup_within_rate | ピックアップ内での割合 | 小数(0–1)推奨 | 0.40 (=40%) |
| per_unit_rate | 1回あたりの個別排出率 | 小数(0–1)推奨 | 0.012 (=1.2%) |
| free_slot | 無料枠の有無 | あり/なし | あり |
| source | 出典(URL と取得日) | 文字列 | https://… 取得:2026-01-02 |
| notes | 備考(天井仕様など) | 文字列 | ハード天井:300回(例示値(仮)) |
サンプルCSV(例示値(仮))
以下は実際にそのまま使える簡易サンプルです。すべての確率は小数(0–1)で記載してあります。
|
1 2 3 4 |
banner_name,start_date,end_date,summon_type,rarity,total_rate,pickup_within_rate,per_unit_rate,free_slot,source,notes "フェスA",2026-01-01,2026-01-07,フェス,★6,0.03,0.40,0.012,あり,https://example.com/newsA 取得:2026-01-02,例示値(仮) "ピックB",2026-02-10,2026-02-17,ピックアップ,★6,0.01,0.60,0.006,なし,https://example.com/newsB 取得:2026-02-09,例示値(仮) |
CSVを公開・共有する場合は必ず「例示値(仮)」ラベルを残し、公式値に差し替える手順を併記してください。
per_unit_rate の計算と表記ルール
per_unit_rate の計算は混乱しやすい箇所です。ここで小数表記と%表記の両方での計算式を明確にします。誤解を防ぐために必ず単位をCSVヘッダで定義してください。
計算式(小数・%双方の表記例)
- 小数(推奨)での計算(機械処理向け)
- per_unit_rate_decimal = total_rate_decimal × pickup_within_rate_decimal
- 例(例示値(仮)): total_rate = 0.012(=1.2%), pickup_within_rate = 0.40(=40%) → per_unit_rate = 0.012 × 0.40 = 0.0048(=0.48%)
- パーセント表記を入力している場合(人間読み)
- per_unit_rate_% = total_rate_% × pickup_within_rate_% ÷ 100
- 例(例示値(仮)): total_rate = 1.20%, pickup_within_rate = 40% → per_unit_rate = 1.20 × 40 ÷ 100 = 0.48%
どちらの方式でも最終的に人に見せるときは「%表示」に戻すと解釈しやすいです(0.0048 → 0.48%)。
表記のチェックポイント
- CSVヘッダに「単位: 小数(0-1)」や「単位: %」のどちらかを必ず明記する。
- 入力ミスを防ぐため、per_unit_rate 列は自動計算(スプレッドシートやスクリプト)で生成することを推奨する。
- すべての例示値には必ず「例示値(仮)」ラベルを付けること。
シミュレーターの設計と推奨設定
シミュレーターは期待値・分位点・ヒストグラムを出力し、意思決定を支援します。ここでは推奨デフォルト、入出力フォーマット、精度と計算時間の目安を示します。
機能一覧とデフォルト設定(推奨)
シミュレーターで最低限備える機能と初期設定例は次の通りです。
- 入力: 上記CSVフォーマット(小数表記推奨)
- 出力: 平均引数、中央値、分位点(50/90/95/99%)、ヒストグラム、石換算(1回あたりの石数は設定可能)
- モンテカルロ試行数(推奨): 100,000(既定)/必要なら 1,000,000(高精度)
- シード固定化: 再現性のため乱数シードを設定可能にすること
- 天井仕様: ハード天井(N回目確定)とソフト天井(増加確率)をオプションで実装すること
実行時間の目安(環境依存):
- 単純なループ(純Python): 100k 試行で数秒〜数十秒。
- NumPy 等でベクトル化: 大幅に高速化。100k は数百ミリ秒〜数秒程度。
実際の所要時間は実装と CPU に強く依存します。
入出力フォーマットの例(シミュレーション結果 CSV)
以下はシミュレーター出力の例フォーマット(例示値(仮))。
|
1 2 3 4 |
banner_name,mean_draws,median_draws,p50,p90,p95,p99,mean_stones フェスA,180.5,160,160,260,320,520,902.5 ピックB,95.2,88,88,150,190,320,476.0 |
mean_draws 等は試行結果を集計した数値です。mean_stones は「1回あたり石数」をかけた換算例です(例示値(仮))。
制限事項と精度
- ハード天井や確率増加(ソフト天井)は正確に実装しないと誤差が大きくなるため、運営の仕様に合わせてモデルを設計すること。
- 低確率領域(p≪1)は分位点の推定に大量の試行が必要になるため、信頼性が必要なら試行数を増やすこと。
- 出力はあくまで確率論的予測であり、実プレイ結果を保証するものではない。すべての例示値は「例示値(仮)」と明記すること。
確率計算の基礎と逆算(数式と具体例)
ここでは基本式、期待値、分散、目標到達回数の逆算(端数処理)を示します。確率の単位は「小数(0–1)」で記載します。
基本式(単発・複数回)
- 少なくとも1回当たる確率(p:1回あたりの個別当選確率) = 1 − (1 − p)^n
- 期待値(当たり個数の期待値) = n × p
- 分散 = n × p × (1 − p)、標準偏差 = √(分散)
p は小数(例:1% = 0.01)で扱います。結果を%で示す場合は ×100 してください。
目標確率の逆算(端数は常に切り上げ)
目標到達確率 q を満たす最小の試行回数 n は次式で求められます(端数は常に切り上げ)。
n = ceil( ln(1 − q) / ln(1 − p) )
例(例示値(仮)): p = 0.01(1%)、q = 0.90(90%)の場合
- ln(1 − q) = ln(0.1) ≈ −2.302585092994046
- ln(1 − p) = ln(0.99) ≈ −0.01005033585350145
- n ≈ −2.302585092994046 / −0.01005033585350145 ≈ 229.147… → 切り上げて 230 回
別の例(例示値(仮)): p = 0.01、q = 0.80(80%)
- ln(0.2) ≈ −1.6094379124341003
- n ≈ −1.6094379124341003 / −0.01005033585350145 ≈ 160.148… → 切り上げて 161 回
計算上の注意点:端数は常に切り上げます(部分的な試行は実行できないため)。
k 個到達(負の二項分布による逆算)
k 個到達(例:3体欲しい)を特定確率 q で満たす最小 n は、二項分布の累積で求めるか数値探索します。期待値ベースの近似は n ≈ k / p ですが、指定の信頼度(例 95%)を満たすかは別計算が必要です。推奨は下記の数値探索(コード例)で確認すること。
簡易探索(Python の場合、例示):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import math from math import comb def prob_at_least_k(n, k, p): # P(X >= k) = 1 - sum_{i=0}^{k-1} C(n,i) p^i (1-p)^{n-i} s = 0.0 for i in range(0, k): s += comb(n, i) * (p**i) * ((1-p)**(n-i)) return 1.0 - s # 探索例(例示値(仮)) p = 0.01 k = 3 q_target = 0.95 n = k while True: if prob_at_least_k(n, k, p) >= q_target: break n += 1 # 得られた n が最小必要回数(例示値(仮)) |
この方法で厳密な n を求めてください。期待値だけで判断すると不足する場合があります。
天井(ピティ)仕様の扱いとモデリング
天井仕様があると純粋な二項モデルでは表現できません。ハード天井とソフト天井の違いを示し、実装上のポイントを述べます。
ハード天井のモデル
ハード天井とは「N 回目で確実に当たる」仕様です。分布の扱いは次の通りです。
- i < N の場合: P(success at i) = (1 − p)^{i−1} p
- i = N の場合: P(success at N) = (1 − p)^{N−1}
期待試行回数の解析式は存在しますが、実務ではモンテカルロでの検証を推奨します。シミュレーション実装では「if draws >= N: force success」と処理します。
ソフト天井のモデル
ソフト天井は一定回数以降に確率が段階的に上昇する仕様です。典型的な実装方法は以下のパラメータ化です。
- base_p(初期確率)
- start_increase(増加開始回数)
- increment(回ごとの確率上昇量、または段階的な増加関数)
- cap(最大確率または最大回数での確定)
実装例(例示値(仮)):
- base_p = 0.01、start_increase = 70、increment = 0.001(回あたり0.1%増加)
シミュレーションでは各試行における p を pity 関数で返し、乱数判定を行います。
実測データの扱いと信頼区間
実測データを扱う際の基本手順と信頼区間の計算方法、サンプルサイズの目安を示します。
信頼区間の計算例
観測数 n、観測成功数 x、観測比率 p̂ = x / n。95% 信頼区間(正規近似):
- 標準誤差 SE = sqrt(p̂ (1 − p̂) / n)
- 95%CI ≈ p̂ ± 1.96 × SE
例(例示値(仮)): n = 10,000、x = 120 → p̂ = 0.012
- SE ≈ sqrt(0.012 × 0.988 / 10000) ≈ 0.00109
- 95%CI ≈ 0.012 ± 1.96×0.00109 ≈ [0.0099, 0.0141](0.99%〜1.41%)
小サンプル時は Wilson interval 等を使った方が精度が良いです。
サンプルサイズの目安
誤差幅(許容誤差)ME として必要試行数 n はおおよそ次式で計算できます(正規近似):
n ≈ p(1 − p) / ( (ME / z)^2 ), z = 1.96(95%)
例(例示値(仮)): p ≈ 0.01、ME = 0.001(±0.1%) のとき
- n ≈ 0.01×0.99 / ( (0.001/1.96)^2 ) ≈ 38,000 前後(約 3.8 万回)
現場では「p が約 1% の場合、誤差 ±0.1% にするには 3〜4 万回のサンプルが目安」と覚えておくと便利です。
目的別の引き方戦略と石配分(実務ガイド)
目的に応じた石配分の考え方を示します。すべての数値は例示値(仮)です。必ず公式値と自分の予算で再計算してください。
ケーススタディ(例示値(仮))
前提: 個別PU確率 p = 0.01(1%/例示値(仮))、1回あたりのコスト = 5 石(例示値(仮))
- ケースA:1体だけ欲しい(目標到達率 80%)
- n = ceil( ln(1 − 0.8) / ln(1 − 0.01) ) = ceil(160.148...) = 161 回 → 石換算 161 × 5 = 805 石(例示値(仮))
- ケースB:期待値で「3体揃えたい」
- 期待値ベース n ≈ k / p = 3 / 0.01 = 300 回(期待値)→ 石換算 300 × 5 = 1,500 石(例示値(仮))
- ただし「95%の確率で3体揃えたい」なら上記の負の二項分布法やシミュレーションで必要回数を求める(期待値よりかなり増える可能性あり)。
- ケースC:候補が複数(合算PU総率で計算)
- 例:候補3体で合算PU総率が 1.5%(0.015)の場合、合算 p を使って同様に逆算する。
リスク管理の基本:
- 目標確率と予算上限(ストップライン)を事前に決定する。
- フェスやステップアップは優先度を定め、無料枠は必ず消化する。
- すべての例示値には「例示値(仮)」を明示し、公式数値で差し替えること。
注意事項(出典管理・表記ルール・法的配慮)
出典と表記の一元管理、法的・倫理的な配慮は必須です。ここに主要な注意点を集約します。
出典管理と表記ルール
- 公式発表(アプリ内表示・運営お知らせ)を一次情報とする。出典は CSV の source 列に「URL と取得日」で残す(例: https://… 取得:2026-01-02)。
- 例示値はすべて「例示値(仮)」と明記し、公開データと混同しないようにする。
- CSV の単位はヘッダで明示し、per_unit_rate の算出式がヘッダまたは備考に入るようにする。
- データ公開時は個人情報(プレイヤーID、氏名など)を削除して公開すること。
ギャンブル依存対策と免責
- 本ガイドは確率の解説とツール説明を目的とし、投資助言や課金推奨を行うものではありません。課金・行動は自己責任で行ってください。
- ギャンブル依存や過度な課金が心配な場合は公的・専門の相談窓口を利用してください(自治体や厚生労働省の案内ページ等)。具体的な支援情報は自治体の公式サイトや医療機関の案内を参照してください。
- 商標やコンテンツ表記は運営のガイドラインに従い、ロゴや画像の無断転載をしないこと。ゲーム名は運営表記に準拠して記載してください(例:「パズドラ」は運営の表記に準じる)。
ステップバイステップ運用例(CSV登録から実行まで)
実際の運用手順を簡潔に示します。すべての数値は例示値(仮)です。
CSV登録からシミュレーション実行まで
- 公式お知らせとアプリ内表示を確認し、CSVテンプレートに入力する(単位は小数で統一推奨)。
- per_unit_rate をスプレッドシートで自動計算するか、シミュレーションスクリプトで計算する。
- シミュレーターの試行回数を 100,000 に設定して実行。中央値・95%点を確認する。
- 必要に応じて 1,000,000 試行などで精度を高める。
- 記録(CSV出力)と出典を保存し、意思決定ルール(目標確率・予算上限)と照合する。
簡易シミュレーション(Python、例示):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 単純モンテカルロ(例示値(仮)) import random, statistics def simulate_draws(p, trials=100000, pity=None): draws_list = [] for _ in range(trials): draws = 0 while True: draws += 1 p_now = p # pity を入れる場合はここで調整 if random.random() < p_now: draws_list.append(draws) break # ハード天井例: if pity is int and draws >= pity: draws_list.append(draws); break return draws_list p = 0.012 # per_unit_rate(例示値(仮)) res = simulate_draws(p, trials=100000) print('mean', statistics.mean(res), 'median', statistics.median(res)) |
この出力を CSV 化して意志決定材料とします。
よくある質問(FAQ)
疑問の多い点を短くQ&Aでまとめます。
Q: 表示の「40%」はどの単位ですか?
A: CSVヘッダで単位を確認してください。ヘッダに「pickup_within_rate: 小数(0–1)」とあるなら 0.40、%表記なら 40% を意味します。単位不明なら公式お知らせを優先して確認してください。
Q: 天井が明記されていない場合は?
A: 明記がない限り天井がない可能性が高いです。疑義がある場合は運営の公式お知らせを参照し、出典をCSVに記録してください。
Q: 運営への問い合わせで伝えるべき情報は?
A: バナー名、開催期間、確率表記がある画面の表示文(該当の表記をそのまま書く)を伝えると対応がスムーズです。個人情報は送らないでください。
Q: 実測値と公式値がずれている場合は?
A: サンプル数・信頼区間を確認してください。小サンプルでは揺らぎが大きいので、まず信頼区間を添えて比較するのが必須です。
まとめ
- CSV は単位を統一(推奨: 小数 0–1)して出典(URL と取得日)を必ず記録してください。
- per_unit_rate は「小数同士の掛け算(total_rate × pickup_within_rate)」で計算し、表示時は%へ変換してください。例: 0.012×0.40=0.0048 → 0.48%(例示値(仮))。
- 目標確率の逆算は n = ceil( ln(1−q) / ln(1−p) ) を用い、端数は必ず切り上げます(例: p=1% q=90% → 230 回)。
- シミュレーターはまず 100,000 試行を推奨し、分位点(50/90/95/99%)と中央値を確認して意思決定に使ってください。
- すべての例示値は「例示値(仮)」と明記し、公開時は個人情報を削除、過度な課金を促さない運用を徹底してください。
著者(編集者): データ運用チーム(例)
CSVテンプレート: v1.0(例)