ひとことで言うと#
前提条件に乱数を使って何千〜何万通りものシナリオを自動生成し、結果がどんな確率分布になるかを把握する手法。「最悪でいくら?」「成功確率は何%?」といった問いに、単一の予測ではなく確率の幅で答えられる。
押さえておきたい用語#
- 確率分布
- ある変数がどの値をどの確率で取るかを示すパターンを指す。正規分布、三角分布、一様分布などがある。変数の特性に合った分布を選ぶ。
- パーセンタイル
- データを小さい順に並べたとき、下から何%の位置にあるかを示す値。「95パーセンタイルで利益800万円」は「95%の確率で800万円以上」を意味する。
- 三角分布
- 最小値・最頻値・最大値の3つの値だけで定義する確率分布。過去データが少ないときに専門家の見積もりで設定しやすい。
- シミュレーション回数
- 乱数を生成して計算を繰り返す回数である。最低1,000回、できれば10,000回以上で結果が安定する。
- 感度分析
- シミュレーション結果にどの変数が最も影響しているかを特定する分析。最も影響の大きい変数に注力してリスクを管理する。
モンテカルロシミュレーションの全体像#
こんな悩みに効く#
- 事業計画の「ベストケース」と「ワーストケース」だけでは足りないと感じる
- 「このプロジェクトは期限内に終わるのか?」と聞かれても自信を持って答えられない
- リスクを「高・中・低」ではなく、確率と金額で定量化したい
基本の使い方#
分析対象の計算モデルを作り、不確実な変数を特定する。
例: 新店舗の初年度利益モデル
- 利益 = (来店客数 × 客単価 × 来店頻度) − (家賃 + 人件費 + その他経費)
- 不確実な変数: 来店客数、客単価、来店頻度
- 確定している変数: 家賃、人件費(これらは固定値で入れる)
ポイント: モデルはシンプルに。不確実な変数は3〜5個に絞ると解釈しやすい。
不確実な変数に**「こういう範囲でこういうバラつき方をする」**という確率分布を設定する。
よく使う分布:
- 正規分布: 平均の周辺に集まる(例: 客単価は平均2,000円、標準偏差300円)
- 三角分布: 最小・最頻・最大を指定(例: 来店客数は最小50人、最頻100人、最大180人)
- 一様分布: どの値も同じ確率(例: 為替レートは100〜120円の範囲で均等)
ポイント: 分布の設定には過去データ、業界データ、専門家の見積もりを活用する。
各変数の分布から乱数を生成し、モデルに代入して結果を計算する。これを10,000回以上繰り返す。
1回のシミュレーション:
- 来店客数 → 乱数で115人を生成
- 客単価 → 乱数で2,150円を生成
- 来店頻度 → 乱数で月2.8回を生成
- → 利益を計算
これを10,000回繰り返すと、10,000通りの利益の値が得られる。
ツール: Excelでも可能(乱数関数 + データテーブル)、Python(NumPy)、専用ツール(@RISK、Crystal Ball)など。
10,000回分の結果をヒストグラムにして確率分布を可視化する。
読み取るべき情報:
- 期待値(平均): 最も予想される結果
- 標準偏差: 結果のバラつきの大きさ
- パーセンタイル: 「95%の確率で利益は〇〇万円以上」
- 赤字確率: 利益がマイナスになるシナリオの割合
例:
- 期待利益: 2,400万円
- 95%信頼区間: 800万円〜4,200万円
- 赤字確率: 5%
→ 「95%の確率で黒字になるが、最悪のケースでは800万円程度の利益にとどまる」と報告できる。
具体例#
状況: 3,000万円の初期投資が必要な新規事業。3年で回収できるか判断したい。
変数の確率分布:
| 変数 | 分布 | パラメータ |
|---|---|---|
| 月間顧客数 | 三角分布 | 最小200、最頻500、最大800 |
| 客単価 | 正規分布 | 平均3,000円、標準偏差500円 |
| 粗利率 | 三角分布 | 最小30%、最頻45%、最大55% |
10,000回シミュレーションの結果:
- 期待利益: +1,800万円
- 3年以内の投資回収確率: 72%
- 赤字確率: 28%
- 最悪ケース(5パーセンタイル): -800万円
投資回収確率72%。6ヶ月時点のKPIレビューと月間顧客数300未満での撤退条件を付けて承認した。「おそらく大丈夫」ではなく「72%の確率で回収可能」と言えることが意思決定の質を変えた。
状況: 6ヶ月の大規模システム開発。PM経験上「遅延しそう」だが、具体的な根拠がない。
モデル: 全体工期 = 設計フェーズ + 開発フェーズ + テストフェーズ + バッファ
- 設計: 三角分布(最小3週、最頻5週、最大8週)
- 開発: 三角分布(最小8週、最頻12週、最大20週)
- テスト: 三角分布(最小3週、最頻5週、最大10週)
シミュレーション結果:
- 期待工期: 24週(6ヶ月)
- 26週以内の完了確率: 65%
- 最悪ケース: 38週
対策: 開発フェーズの不確実性が最大(感度分析で寄与率55%)と判明。開発チームを2人増員し、最大見積もりを16週に縮小して再シミュレーション。
26週以内の完了確率は65%→88%に向上。増員コスト400万円は、遅延時の違約金2,000万円のリスクと比較して合理的だった。
状況: 個人投資家が3,000万円のポートフォリオ(株式60%・債券30%・現金10%)のリスクを定量化したい。
変数の確率分布(年間リターン):
| 資産 | 分布 | 平均 | 標準偏差 |
|---|---|---|---|
| 株式 | 正規分布 | +7% | 18% |
| 債券 | 正規分布 | +2% | 5% |
10,000回シミュレーション結果(現行配分):
- 期待年間リターン: +5.4%(+162万円)
- 10%以上の損失確率: 12%
- 最悪ケース(5パーセンタイル): -420万円
配分変更後(株式40%・債券40%・現金20%):
- 期待年間リターン: +3.8%(+114万円)
- 10%以上の損失確率: 5%
- 最悪ケース: -240万円
リターンを年48万円減らす代わりに、大幅損失リスクを**12%→5%**に半減できる。この「リターンとリスクのトレードオフ」を数字で把握し、配分変更を実行した。
やりがちな失敗パターン#
- 確率分布の設定が雑 — 「とりあえず正規分布」で全変数を設定してしまうケース。変数の特性に合った分布を選ぶこと。上限・下限がある変数には三角分布や一様分布が適している
- シミュレーション回数が少なすぎる — 100回程度では結果が安定しない。最低でも1,000回、できれば10,000回実行する。結果が収束しているか確認すること
- 変数間の相関を無視する — 「景気が悪いと顧客数も客単価も下がる」のように変数が連動する場合、独立に乱数を生成すると現実離れした組み合わせが生まれる。重要な変数間には相関を設定する
- シミュレーション結果を過信する — モンテカルロの精度は入力する分布の設定に依存する。「結果は入力次第」であることを常に意識し、感度分析でどの変数が最も影響しているか確認する
まとめ#
モンテカルロシミュレーションは、乱数を使って何千通りものシナリオを生成し、不確実な状況を確率分布で把握する手法。単一の予測ではなく「成功確率」「最悪ケース」まで定量化できるため、リスクを伴う意思決定に威力を発揮する。まずはExcelで簡単なモデルを作り、3つの変数に乱数を入れて100回シミュレーションするところから始めよう。