モンテカルロシミュレーション

英語名 Monte Carlo Simulation
読み方 モンテカルロ シミュレーション
難易度
所要時間 4〜8時間
提唱者 スタニスワフ・ウラム、ジョン・フォン・ノイマン(1940年代、マンハッタン計画)
目次

ひとことで言うと
#

前提条件に乱数を使って何千〜何万通りものシナリオを自動生成し、結果がどんな確率分布になるかを把握する手法。「最悪でいくら?」「成功確率は何%?」といった問いに、単一の予測ではなく確率の幅で答えられる。

押さえておきたい用語
#

押さえておきたい用語
確率分布
ある変数がどの値をどの確率で取るかを示すパターンを指す。正規分布、三角分布、一様分布などがある。変数の特性に合った分布を選ぶ。
パーセンタイル
データを小さい順に並べたとき、下から何%の位置にあるかを示す値。「95パーセンタイルで利益800万円」は「95%の確率で800万円以上」を意味する。
三角分布
最小値・最頻値・最大値の3つの値だけで定義する確率分布。過去データが少ないときに専門家の見積もりで設定しやすい。
シミュレーション回数
乱数を生成して計算を繰り返す回数である。最低1,000回、できれば10,000回以上で結果が安定する。
感度分析
シミュレーション結果にどの変数が最も影響しているかを特定する分析。最も影響の大きい変数に注力してリスクを管理する。

モンテカルロシミュレーションの全体像
#

不確実な変数に確率分布を設定し、大量のシナリオを生成して結果を分析する
モデル定義計算式と不確実な変数を特定変数は3〜5個に絞る確率分布の設定正規分布・三角分布・一様分布過去データや専門家の見積もり10,000回シミュレーション実行各変数に乱数を生成→モデルに代入→結果を記録Excel・Python・専用ツールで実行確率分布で意思決定期待値・パーセンタイル・赤字確率で根拠ある判断
モンテカルロシミュレーションの実行フロー
1
モデル定義
計算式と不確実な変数を特定
2
分布設定
各変数に確率分布を設定
3
実行
10,000回以上のシミュレーション
意思決定
確率分布から根拠ある判断を導く

こんな悩みに効く
#

  • 事業計画の「ベストケース」と「ワーストケース」だけでは足りないと感じる
  • 「このプロジェクトは期限内に終わるのか?」と聞かれても自信を持って答えられない
  • リスクを「高・中・低」ではなく、確率と金額で定量化したい

基本の使い方
#

ステップ1: モデルと不確実な変数を定義する

分析対象の計算モデルを作り、不確実な変数を特定する。

例: 新店舗の初年度利益モデル

  • 利益 = (来店客数 × 客単価 × 来店頻度) − (家賃 + 人件費 + その他経費)
  • 不確実な変数: 来店客数、客単価、来店頻度
  • 確定している変数: 家賃、人件費(これらは固定値で入れる)

ポイント: モデルはシンプルに。不確実な変数は3〜5個に絞ると解釈しやすい。

ステップ2: 各変数に確率分布を設定する

不確実な変数に**「こういう範囲でこういうバラつき方をする」**という確率分布を設定する。

よく使う分布:

  • 正規分布: 平均の周辺に集まる(例: 客単価は平均2,000円、標準偏差300円)
  • 三角分布: 最小・最頻・最大を指定(例: 来店客数は最小50人、最頻100人、最大180人)
  • 一様分布: どの値も同じ確率(例: 為替レートは100〜120円の範囲で均等)

ポイント: 分布の設定には過去データ、業界データ、専門家の見積もりを活用する。

ステップ3: シミュレーションを実行する

各変数の分布から乱数を生成し、モデルに代入して結果を計算する。これを10,000回以上繰り返す。

1回のシミュレーション:

  • 来店客数 → 乱数で115人を生成
  • 客単価 → 乱数で2,150円を生成
  • 来店頻度 → 乱数で月2.8回を生成
  • → 利益を計算

これを10,000回繰り返すと、10,000通りの利益の値が得られる。

ツール: Excelでも可能(乱数関数 + データテーブル)、Python(NumPy)、専用ツール(@RISK、Crystal Ball)など。

ステップ4: 結果の確率分布を解釈する

10,000回分の結果をヒストグラムにして確率分布を可視化する。

読み取るべき情報:

  • 期待値(平均): 最も予想される結果
  • 標準偏差: 結果のバラつきの大きさ
  • パーセンタイル: 「95%の確率で利益は〇〇万円以上」
  • 赤字確率: 利益がマイナスになるシナリオの割合

例:

  • 期待利益: 2,400万円
  • 95%信頼区間: 800万円〜4,200万円
  • 赤字確率: 5%

→ 「95%の確率で黒字になるが、最悪のケースでは800万円程度の利益にとどまる」と報告できる。

具体例
#

例1:新規事業3,000万円の投資判断を72%の回収確率で承認する

状況: 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%の確率で回収可能」と言えることが意思決定の質を変えた。

例2:システム開発プロジェクトの納期遵守確率を65%→88%に改善する

状況: 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:投資ポートフォリオの年間損失リスクを確率で把握し配分を最適化する

状況: 個人投資家が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%**に半減できる。この「リターンとリスクのトレードオフ」を数字で把握し、配分変更を実行した。

やりがちな失敗パターン
#

  1. 確率分布の設定が雑 — 「とりあえず正規分布」で全変数を設定してしまうケース。変数の特性に合った分布を選ぶこと。上限・下限がある変数には三角分布や一様分布が適している
  2. シミュレーション回数が少なすぎる — 100回程度では結果が安定しない。最低でも1,000回、できれば10,000回実行する。結果が収束しているか確認すること
  3. 変数間の相関を無視する — 「景気が悪いと顧客数も客単価も下がる」のように変数が連動する場合、独立に乱数を生成すると現実離れした組み合わせが生まれる。重要な変数間には相関を設定する
  4. シミュレーション結果を過信する — モンテカルロの精度は入力する分布の設定に依存する。「結果は入力次第」であることを常に意識し、感度分析でどの変数が最も影響しているか確認する

まとめ
#

モンテカルロシミュレーションは、乱数を使って何千通りものシナリオを生成し、不確実な状況を確率分布で把握する手法。単一の予測ではなく「成功確率」「最悪ケース」まで定量化できるため、リスクを伴う意思決定に威力を発揮する。まずはExcelで簡単なモデルを作り、3つの変数に乱数を入れて100回シミュレーションするところから始めよう。