# 蒙地卡羅模擬詳解：範例與程式碼

> 了解什麼是蒙地卡羅模擬、它如何運作、實際的商業應用案例、應避免的常見錯誤，以及如何用清晰、實用的方法來應用它。

Source: https://www.electe.net/tc/post/monte-carlo-simulation

Site guide: https://www.electe.net/tc/llms.txt

你的零售商必須在旺季來臨前決定要採購多少庫存，但需求不會等你取得完美資訊才出現。天氣、促銷時機和競爭對手的定價，可能讓銷量落在**800 到 1,400 件**之間的任何位置，這讓單一的試算表預測面臨一個尷尬的任務：把眾多可能的未來壓縮成一個數字。

假設團隊決定訂購**1,100 件**。如果需求接近下限，過多的庫存會佔用現金，甚至可能需要打折出清。如果需求趨向上限，缺貨可能會損失銷售、客戶信任和利潤。試算表本身未必出錯，它只是回答了一個比業務實際需求更狹窄的問題。

**蒙地卡羅模擬**用一系列可能結果的分布，取代那個單一數值的估計。它反覆測試不確定輸入變數的合理組合，然後顯示每種結果出現的頻率。這讓你能提出一個更有用的問題：不是「我們會賣出多少件？」，而是「什麼庫存水準能在缺貨與過剩之間取得可接受的平衡？」

同樣的邏輯也適用於預算、現金流、專案成本、外匯風險敞口和投資風險。如果你已經在使用[假設分析（what-if analysis）](https://www.electe.net/post/what-if-analysis-tool)，蒙地卡羅模擬能為你正在比較的情境增添機率與發生頻率的維度。不過，首先你需要對這個方法在做什麼建立清晰的心智模型。

## 目錄

- 單靠試算表無法預測的商業決策
-
  - 單一預測的弱點
  - 從單一答案到一系列決策
- 蒙地卡羅模擬究竟是什麼
-
  - 五個讓這個方法更易理解的術語
  - 為什麼輸出結果比平均值更有用
- 蒙地卡羅模擬如何逐步運作
-
  - 1. 定義問題與目標指標
  - 2. 找出不確定的輸入變數
  - 3. 指定分佈
  - 4. 建立模型
  - 5. 執行迭代運算
  - 6. 分析分佈結果
- 企業目前如何運用蒙地卡羅模擬
-
  - 銷售預測
  - 庫存優化
  - 財務風險評估
- 即使計算正確,結果仍可能誤導的原因
-
  - 輸入分佈設定了上限
  - 相關性形塑了綜合結果
  - 停止規則保護尾端結果
- 執行蒙地卡羅模擬時常見的錯誤
-
  - 錯誤一,將輸出結果當作單一估計值
  - 錯誤二,忽略相關性
  - 錯誤三,所有情況都套用常態分佈
  - 錯誤四,一味追求迭代次數而非改善輸入變數
  - 錯誤五,略過尾端收斂檢查
- 將蒙地卡羅模擬導入您的分析工作流程
-
  - 一條實務可行的採用路徑

## 單靠試算表無法預測的商業決策

### 單一預測的弱點

試算表儲存格中顯示 **1,100 件**看起來相當精確。這數字可能是根據上一季的銷售數據、某位經理的估計,或多份預測的平均值而來。然而,這個儲存格隱藏了使決策變得困難的各種因素:需求可能隨天氣變化,促銷活動可能改變購買時機,競爭對手也可能在您下單後調整價格。

零售商實際面臨的規劃問題至少有兩個面向:

- **需求不確定性：**顧客實際購買量可能遠低於或遠高於預期。
- **決策成本：**庫存過多會佔用營運資金，庫存過少則會造成缺貨與營收損失。
- **時機風險：**團隊可能必須在尚未掌握完整市場資訊的情況下就做出承諾。

基本情境預測仍有其價值。它為團隊提供一個參考點，並建立一個起始假設。問題出在當人們把這個參考點當成沒有任何有意義範圍的預測結果時。

> **實務原則：**預測應該呈現可能發生的情況，而不只是某人希望發生的情況。

### 從單一答案到一系列決策

蒙地卡羅模型可以為每個模擬季度抽取一個需求值，將該值與提議的庫存水準連結，並記錄由此產生的缺貨或庫存過剩結果。重複這個過程會產生一個分佈，讓權衡取捨變得清晰可見。

模型可能會顯示，較低的訂購量能降低庫存過剩的風險，但會提高缺貨的機率。較高的訂購量或許能維持供貨穩定，但會帶來更多降價出清的風險。這個方法不會替零售商做出訂購決定，而是讓決策者更清楚看見每個選項所附帶的後果。

這個區別對中小企業來說很重要。你不需要完美的預測就能改善規劃。你需要的是反映現實的假設、一個能將這些假設連結到決策的模型，以及能清楚傳達不確定性的輸出結果。

這種方法的歷史根源可追溯至**1777年**，當時喬治-路易．勒克萊爾，布豐伯爵，提出了一項針投實驗，透過比較針與平行線相交的機率來估算π值。這套現代方法在第二次世界大戰期間於洛斯阿拉莫斯有系統地發展成形，史坦尼斯瓦夫．烏拉姆與約翰．馮諾伊曼將隨機取樣應用於中子傳輸與屏蔽問題。**1948年**，一個包含約翰與克拉拉．馮諾伊曼以及尼克．梅特羅波利斯在內的團隊，在ENIAC上執行了首次電腦化的蒙地卡羅模擬，接著在**1953年**發表了奠基性論文〈快速計算機的狀態方程式計算〉，詳情記載於這篇[蒙地卡羅方法歷史](https://pmc.ncbi.nlm.nih.gov/articles/PMC2924739/)中。

## 蒙地卡羅模擬究竟代表什麼

先從一顆灌鉛骰子說起。你不知道它真正的行為模式，但你可以反覆擲骰並記錄出現的點數。經過多次擲骰後，每個點數出現的觀察頻率便成為該骰子潛在機率的估計值。平均值告訴你它的集中趨勢，而離散程度則告訴你結果的變異程度有多大。

蒙地卡羅模擬將這種直覺應用於商業模型。你不是擲骰子，而是從機率分佈中抽取一個數值。你不是記錄點數，而是計算出某項輸出結果，例如營收、剩餘庫存、專案成本或投資組合損失。你重複這個過程，並彙整出結果分佈的摘要。

### 五個讓這個方法更容易理解的術語

1. **隨機抽樣：**從輸入分佈中抽取的一個樣本值，例如從零售商需求歷史中選取的一個需求值。
2. **迭代：**模型的一次完整運算過程。它使用抽樣輸入並產生一個可能的結果。
3. **機率分佈：**描述哪些輸入值是合理的，以及其可能性如何變化。
4. **輸出分佈：**所有迭代中產生的結果集合。
5. **收斂：**額外的迭代不再對你所關心的結果產生實質改變的那一點。

這種做法之所以有效，其統計學原理是**大數法則**。隨著隨機試驗次數增加，樣本平均值會收斂於期望值。這正是為什麼重複模擬能將不確定性轉化為估計值，例如中獎機率、風險分佈與信賴區間。根據這份[關於蒙地卡羅模擬的統計學課程講義](https://people.stat.sc.edu/gregorkb/STAT_540_fa_2025/Lec_R_08.pdf)，蒙地卡羅方法在**1940年代**進入核能應用領域，於**1960年代**擴展至更廣泛的統計學領域，並在**1980年代**獲得統計學家的廣泛採用。

### 為什麼輸出結果比平均值更有用

單一平均值可能掩蓋一長串代價高昂的結果。輸出分佈讓你能夠檢視中心值、變異程度，以及邊緣較不常見的結果。對零售商而言，這可能代表比較不同訂購數量下缺貨的機率。對財務團隊而言，這可能代表檢視潛在盈虧的範圍，而非僅依賴單一預期報酬。

此方法也區分了團隊經常混淆的兩個概念：

- **不確定性：**輸入值合理地可能取不同的數值。
- **誤差：**模型或假設可能有誤。

增加迭代次數可以降低抽樣噪音，但無法修復有缺陷的需求分佈。它們無法發現缺失的相關性，也無法修正錯誤呈現業務流程的公式。

隨著模擬規模擴大，資料維運同樣重要。團隊應該設計能[將資料基礎架構成本控制在合理範圍內](https://digna.ai/solutions/data-platform-observability/databricks)的工作流程，尤其是在重複的模型運算消耗大量運算資源時。現代變體可能會使用準隨機序列，以更均勻地覆蓋輸入空間，同時GPU加速可縮短執行時間。這些技術能改善抽樣效果或速度，但無法免除對合理假設的需求。

## 蒙地卡羅模擬的逐步運作方式

一個實用的模型應從決策開始，而非從隨機數產生器開始。請依循以下步驟。

### 1. 定義問題與目標指標

用營運語言寫下這項決策。「我們應該訂購多少庫存？」是一個實用的起點，但模型需要一個可衡量的輸出，例如缺貨風險、多餘庫存或預期利潤。

### 2. 找出不確定的輸入變數

列出可能大幅改變結果的變數。以零售商為例,這些可能包括需求、促銷時機、競爭對手的定價,以及補貨前置時間。已知或合約上固定的數值,則不必納入不確定性層。

### 3. 指定分配

在有可信依據的情況下,使用歷史觀測資料。若證據不足,則記錄專家判斷,並明確標示範圍。選擇分配不應只是因為熟悉,而應該是因為它能反映該輸入變數實際的行為方式。

舉例來說,需求可以用基於可比期間的經驗分配來表示。若前置時間有明確的最小值、最可能值與最大值,三角分配可能較為合適。至於財務損失變數,可能需要一種比簡單鐘形曲線更重視極端結果的分配。

### 4. 建立模型

模型會將抽樣得到的輸入值轉換為輸出結果。基本的獲利關係可以表示為:

`Profit = Revenue - Expenses`

以庫存為例,邏輯可以計算銷售量為需求與可用庫存兩者中較小的一方,再據此推算剩餘庫存與利潤。這個關係在每次迭代中維持一致,改變的是抽樣得到的輸入值。

### 5. 執行迭代

每次迭代都會抽樣不確定的輸入值、執行模型,並儲存輸出結果。大數法則說明了為何隨著重複次數增加,輸出估計值通常會變得更穩定,但仍須針對真正重要的指標檢查其穩定性,尤其是尾端結果。

### 6. 分析分配結果

檢視完整的分配形狀,而不是只看平均值。可以參考以下問題:

- 結果低於目標的頻率有多高?
- 管理階層認為可接受的結果,落在哪個範圍內?
- 哪個輸入變數對變異的影響最大?
- 當關鍵假設改變時,結論是否也會跟著改變?

以下是一段簡短的虛擬碼概要:

`define target_metric`
`define distributions for uncertain inputs`
`for each iteration:`
`draw values from the input distributions`
`calculate the model output`
`store the output`
`summarize the output distribution`
`check convergence and sensitivity`
`stop when the decision metric is stable enough to use`

以下是使用 NumPy 的簡潔 Python 範例。它模擬了在零售商規劃假設的上下限範圍內的需求。

`import numpy as np`

`# 設定可重現的隨機生成器，以便重複分析`
`rng = np.random.default_rng(42)`

`# 定義模擬季度的數量`
`iterations = 10000`

`# 為每個模擬季度抽取一個需求值`
`demand = rng.uniform(800, 1400, iterations)`

`# 設定建議的庫存承諾量`
`inventory = 1100`

`# 計算每個模擬季度的銷售單位數`
`units_sold = np.minimum(demand, inventory)`

`# 當需求超過可用庫存時，計算缺貨單位數`
`stockout_units = np.maximum(demand - inventory, 0)`

`# 總結模擬結果`
`average_demand = demand.mean()`
`stockout_rate = np.mean(stockout_units > 0)`

這段程式碼僅使用均勻分佈來說明運作機制。實際生產模型應根據需求資料、季節性、促銷活動及相關依賴關係，來證明所選分佈的合理性。

停止規則也應該明確訂定。比較各批次間的估計值，監控目標尾端或百分位數，並在進一步的迭代不再對決策造成實質改變時停止。正確的問題不是「我們是否已執行大量迭代？」而是「這個結果對此決策而言是否足夠穩定？」

步驟單點估算蒙地卡羅模擬決策定義產生單一目標值定義目標及其風險邊界輸入處理固定不確定的輸入值以機率分布表示輸入值模型執行執行一次以抽樣輸入值重複執行輸出結果單一預測值可能結果的分布檢視將實際值與單一估算值比較檢視機率、尾端風險與敏感度

如需進一步了解更有效率的抽樣方法，請參閱[ELECTE 中小企業指南](https://www.electe.net/post/latin-hypercube-sampling)，尤其是在輸入涵蓋範圍與原始迭代次數同樣重要時。

## 企業如今在哪些場景使用蒙地卡羅模擬

相同的計算架構出現在不同的業務職能中：

1. 定義不確定範圍。
2. 抽取輸入樣本。
3. 彙整輸出結果。
4. 依決策門檻解讀結果。

會改變的是資料、相依結構，以及犯錯的代價。

使用案例關鍵輸入變數主要輸出指標改善的決策典型迭代次數銷售預測歷史需求、促銷效果、價格反應、季節性營收或單位需求分佈銷售目標、促銷計畫、產能分配透過收斂檢驗選定庫存優化需求、補貨前置時間、供應商可靠度、可用庫存缺貨與過剩庫存分佈再訂購點、訂購量、服務水準政策透過收斂檢驗選定財務風險評估報酬、現金流、專案成本、匯率、風險暴露假設損失分佈、風險值（VaR）、預算超支機率避險規模、應急準備金、風險限額透過收斂檢驗選定

### 銷售預測

銷售團隊可以將需求建模為一種分布，而非固定目標。輸入資料可能包括歷史銷售、活動時程、價格變動及產品供貨情況。輸出結果可顯示達到營收門檻的機率，並找出價格、銷售量或促銷時程中，哪一項造成最大的變異。

這項資訊有助於更精準地分配資源。管理者可以據此調整活動預算、設定銷售承諾的範圍，或為更強勁的需求準備產能，而不是把最高結果當作必然發生的保證。

### 庫存優化

庫存模型將需求的不確定性與補貨機制連結起來。交貨時間很重要，因為供應商的延誤可能讓原本中等的需求期變成缺貨。相關性同樣重要。一場促銷活動可能同時提高需求並改變下單時程，因此若將這些變數視為互不相關，可能會扭曲結果。

決策輸出結果應具備可操作性。團隊可以利用該分布來比較再訂購點、評估缺貨風險，並制定應變政策。當模型能改變採購人員在不確定性發生之前的行動時，這個模型才真正發揮作用。

### 財務風險評估

財務團隊可能會模擬投資組合損失、專案成本、現金流或外匯變動。風險分布可支援有關準備金、避險、核准額度與預算容忍度的決策。它也能揭示在不同波動性或相依性假設下，結果會如何變化。

風險值（Value at Risk）只是整體分布的其中一種概要指標。需要進一步了解該指標背景的團隊，可搭配[解讀風險值](https://www.electe.net/post/value-at-risk)，並結合敏感度分析與壓力情境測試一併使用。

財務輸出結果絕不應在未經適當專業審查的情況下，被視為個人投資、借貸或法規遵循方面的建議。對於受監管的工作，應記錄假設條件、模型所屬單位、驗證證據及核准控制機制。

## 為何結果即使計算正確，仍可能產生誤導

模擬可以完美執行，卻仍產生不可靠的答案。運算引擎會完全依照指示進行取樣。如果指示對業務的描述不夠準確，輸出結果也會繼承這個缺陷。

三種因素造成了大部分的問題。

### 輸入分布設下了上限

稀疏或不穩定的資料使得分布的選擇變得困難。短期的銷售歷史可能無法代表新的促銷活動、中斷的供應鏈，或正在變化的客戶組合。分析師若將一條漂亮的曲線套用在薄弱的證據上，可能會產生一張看起來精緻的直方圖，卻讓人產生錯誤的確定感。

一篇**2026年方法學論文**指出，收斂速度緩慢、對準確輸入分布的依賴，以及運算成本，是限制蒙地卡羅方法可靠性的因素，尤其是在不確定環境中用於決策層級的用途時更為明顯。其對中小企業具有重要實務意涵：輸出結果的精確度可能超過假設本身的品質。

### 相關性形塑了綜合結果

需求與價格可能同步變動。當延誤需要額外人力時，專案成本與完工時間可能一併上升。匯率變動可能同時影響營收與支出。如果模型獨立抽樣相關變數，可能產生商業上罕見的組合，或遺漏會造成嚴重風險的組合。

相關結構，包括在適當情況下採用基於 copula 的方法，有助於模型呈現聯合行為。所採用的技術應與資料及決策相匹配。若團隊無法驗證，更複雜的方法未必更好。

### 停止規則保護尾端估計

假設某營收模型回報了 **90% 信賴區間**。抽取更多樣本可能使該區間看起來變窄，因為抽樣雜訊已經降低。但這並不能證明商業模式有所改善，也不代表上尾或下尾已被妥善估計。

監控你將據以行動的指標。如果決策取決於高損失邊界，應跨批次檢查該邊界，而不是只檢查平均值。

**2026 年代的工作流程**應結合收斂診斷、相關性建模、敏感度圖表以及與已知結果的驗證。暴力運算或許能更快產出結果，但速度無法回答唯一重要的問題：**這個結果是否穩定到足以據以行動？**

## 執行蒙地卡羅模擬時的常見錯誤

最危險的錯誤，往往在忙碌的規劃週期中看起來合情合理。在分享結果之前，請先使用以下診斷問題進行檢視。

### 錯誤一：將輸出結果當成單一點估計

如果報告只強調一個平均值，請問：**這個平均值背後隱藏了什麼樣的結果範圍？**決策者需要的是分佈狀況、相關百分位數，以及行動門檻的轉折點。

### 錯誤二：忽略相關性

如果需求與價格、成本與時程，或是營收與匯率之間可能同步變動，請問：**模型是否呈現了這種關係？**獨立的隨機抽樣可能產生不切實際的組合。

### 錯誤三：所有情況都使用常態分佈

鐘形曲線用起來很方便，但方便不等於證據。請問：**該輸入變數是否有明確的下限、明顯的偏態，或是異常重要的極端結果？**分佈應反映觀察到的實際行為，或有清楚記載的判斷依據。

### 錯誤四：追求迭代次數而非改善輸入資料

增加運算量可以降低抽樣雜訊，但無法修補有偏差的歷史資料、缺失的變數，或不完善的模型邏輯。請問：**更好的資料或更好的相依性假設，是否比再跑一大批模擬更能改善決策品質？**

### 錯誤五：跳過尾端收斂檢查

平均值可能看起來穩定，但與高風險相關的邊界卻仍然雜訊很大。請問：**與決策相關的指標，是否已在重複批次中趨於穩定？**

AI驅動的分析層可以透過建議候選分佈、揭示上傳資料中的關聯性、以及標記仍不穩定的輸出結果，來減少設定上的阻力。它們應該支援分析師的判斷，而不是取代它。企業主仍需要問：這份資料是否反映當前市場狀況，以及這個模型是否反映了決策過程。

> 只有在假設具備可信度之後，更快的模擬才有價值。

## 將蒙地卡羅模擬導入您的分析工作流程

中小企業不需要重建整個分析架構才能使用機率規劃。從一個已經受到不確定性影響會議、預算或客戶服務的決策開始著手。

### 實務採用路徑

- **準備證據：**清理歷史資料，記錄缺失時段與異常事件，並將可靠的觀測值與假設區分開來。
- **建立假設庫：**記錄分佈、範圍、相關性、負責人，以及每次變更的日期。
- **試行單一決策：**選擇庫存、銷售產能、現金流或專案成本。在建立模型之前先定義輸出結果。
- **驗證邏輯：**將模型與歷史結果、簡單基準以及相關人員審查進行比較。
- **嵌入結果：**將分佈、敏感度視圖與決策門檻加入定期報告中。
- **謹慎自動化：**當重大輸入條件改變時重新執行，同時保留模型版本與核准記錄。

現代分析環境可以降低沒有專職統計人員的團隊在技術上的門檻。Python 和 R 提供了靈活性，而試算表附加元件則適合已經在使用 Excel 的團隊。AI 增強型平台可以幫助揭示候選分佈與相關性，但治理仍然不可或缺。

第一個有用的模型可能比一次完整的分析轉型花費更少時間，但要獲得值得信賴的採用成果，仍需要反覆迭代。將每次執行視為一項受治理的分析資產，配有指定負責人、記錄完整的假設、驗證說明，以及版本控制。

ELECTE 是一個為中小企業打造的 AI 驅動資料分析平台，能夠串連企業資料、產生預測、評估風險，並產出讓不確定性更易於討論的報告。可將此平台視為一個環繞在已記錄模型周圍的可能層次，並搭配人工審查來檢視假設與決策。

---

準備好將不確定性納入日常規劃了嗎？造訪 [ELECTE](https://www.electe.net)，探索用於預測、風險分析、自動化報告與更清晰業務決策的 AI 驅動分析工具。從一個經常出現的問題開始，測試假設，並將產生的分佈結果轉化為團隊可以審查的行動方案。
