Learning
VOL. VI · NO. 17 · Mathematics · 01 JAN 1970

蒙特卡洛模拟:用随机数理解不确定性

数学 · 01 JAN 1970 · 11 min read · 2,492 words
· · ·

产品经理的数学课 · 第17讲

蒙特卡洛模拟:用随机数理解不确定性

你无法预测未来,但你可以模拟成千上万种可能的未来,看看哪些结果更可能发生。


前言

你的产品下个月要上线一个新功能。你估计:

  • 开发时间:3-5 周
  • 用户增长:1000-5000 人
  • 转化率:2%-8%

老板问:「下个月能赚多少?」

你怎么回答?

  • 乐观估计:5 周开发完,5000 用户,8% 转化率 → 400 转化
  • 悲观估计:5 周开发完,1000 用户,2% 转化率 → 20 转化
  • 最可能估计:4 周开发完,3000 用户,5% 转化率 → 150 转化

但这些都是点估计——现实不会正好是这些数字。

蒙特卡洛模拟:用计算机模拟成千上万次,每次都随机抽取开发时间、用户增长、转化率,看看最终结果的分布

模拟 10000 次后,你发现:

  • 50% 的概率转化 > 120 人
  • 90% 的概率转化 > 50 人
  • 10% 的概率转化 > 300 人

这比任何点估计都有用——它告诉你结果的不确定性有多大


核心概念

蒙特卡洛模拟的基本思想

蒙特卡洛模拟(Monte Carlo Simulation) 是一种用随机数模拟不确定性的方法:

  1. 定义输入变量的概率分布(开发时间、用户增长、转化率)
  2. 随机抽取输入变量的值(从概率分布中抽样)
  3. 计算输出结果(转化人数)
  4. 重复很多次(比如 10000 次)
  5. 分析输出结果的分布(均值、标准差、分位数)

概率分布:输入变量的不确定性

每个输入变量都有一个概率分布:

均匀分布(Uniform):每个值的概率相等

  • 开发时间:3-5 周,均匀分布
  • P(开发时间 = x) = 1/(5-3) = 0.5,3 ≤ x ≤ 5

正态分布(Normal):均值附近概率高,远离均值概率低

  • 用户增长:均值 3000,标准差 1000
  • P(用户增长 = x) ~ N(3000, 1000²)

三角分布(Triangular):最小值、最可能值、最大值

  • 转化率:最小 2%,最可能 5%,最大 8%
  • 三角分布:2%, 5%, 8%

随机抽样:从分布中取值

随机抽样:从概率分布中随机取一个值。

例子:开发时间服从均匀分布 [3, 5]。

  • 第 1 次模拟:随机抽到 3.7 周
  • 第 2 次模拟:随机抽到 4.2 周
  • 第 3 次模拟:随机抽到 3.1 周

输出分布:结果的概率

模拟 10000 次后,你得到 10000 个输出结果。分析这些结果的分布:

例子(转化人数):

统计量
均值150 人
标准差80 人
5% 分位数30 人
25% 分位数90 人
50% 分位数(中位数)140 人
75% 分位数200 人
95% 分位数300 人

解读

  • 50% 的概率 > 140 人(中位数)
  • 90% 的概率 > 30 人(5% 分位数)
  • 10% 的概率 > 300 人(95% 分位数)

风险量化:VaR 和 CVaR

VaR(Value at Risk):在给定置信水平下,最大可能损失。

例子:95% VaR = -50 万,意味着有 5% 的概率亏损超过 50 万。

CVaR(Conditional VaR):超过 VaR 时的平均损失。

例子:95% CVaR = -80 万,意味着如果亏损超过 50 万,平均亏损 80 万。

敏感性分析:哪个变量影响最大?

蒙特卡洛模拟可以告诉你哪个输入变量对结果影响最大

例子(相关系数):

变量与转化人数的相关系数
用户增长0.85
转化率0.72
开发时间0.15

结论:用户增长影响最大。如果想提高转化人数,应该优先提高用户增长。


产品经理的应用

应用场景一:收入预测

你的 SaaS 产品有 3 个不确定变量:

变量分布参数
新客户数正态均值 100,标准差 20
转化率三角最小 5%,最可能 10%,最大 15%
ARPU(客单价)正态均值 500 元,标准差 100 元

模拟结果(10000 次):

统计量月收入
均值52,500 元
标准差18,200 元
5% 分位数25,000 元
95% 分位数85,000 元

结论

  • 期望月收入 5.25 万
  • 有 90% 的概率收入在 2.5 万到 8.5 万之间
  • 可以用这个范围做预算规划

应用场景二:项目时间估算

你的项目有 5 个任务,每个任务的时间不确定:

任务最短最可能最长
需求分析2 天3 天5 天
设计3 天5 天8 天
开发5 天8 天12 天
测试3 天4 天6 天
部署1 天1 天2 天

模拟结果

统计量项目总时间
均值22.5 天
标准差4.2 天
95% 分位数30 天

结论

  • 期望 22.5 天完成
  • 有 95% 的概率 30 天内完成
  • 可以承诺 30 天交付(高置信度)

应用场景三:定价决策

你正在决定新产品的价格:

价格需求量(正态)收入 = 价格 × 需求量
99 元均值 5000,标准差 1000均值 495,000 元
129 元均值 3500,标准差 800均值 451,500 元
159 元均值 2000,标准差 500均值 318,000 元

模拟结果(考虑需求的不确定性):

价格期望收入收入标准差5% 分位数
99 元495,000 元99,000 元335,000 元
129 元451,500 元103,200 元285,000 元
159 元318,000 元79,500 元190,000 元

选择 99 元——期望收入最高,且 5% 分位数也最高(风险最低)。


常见误区

误区一:精确的输入 ≠ 精确的输出

「我精确估计了每个变量,输出应该很精确」

不确定性会累积。即使每个输入只有 20% 的不确定性,输出的不确定性可能超过 50%。这就是为什么需要蒙特卡洛模拟——它量化了累积的不确定性。

误区二:只看均值

「期望值是 150 人,我们就按 150 人规划」

均值只是中心趋势。你需要看整个分布——特别是尾部风险(5% 分位数)。规划应该基于分位数,不是均值。

误区三:分布假设错误

「用户增长服从正态分布」

正态分布是对称的,但用户增长通常右偏(有很多小值,少数大值)。用错误的分布会得到错误的结果。

误区四:忽略相关性

「开发时间和转化率是独立的」

如果开发时间长(延期),用户增长可能受影响(错过市场窗口)。变量之间可能有相关性,忽略相关性会低估风险。


PM/BA 应用

场景蒙特卡洛工具决策价值
收入预测概率分布 + 模拟量化收入不确定性
项目时间任务时间分布估算交付日期
定价需求不确定性选择最优价格
风险评估VaR/CVaR量化最大损失
敏感性分析相关系数找出关键变量

课后测验

题目 1

你的蒙特卡洛模拟显示:收入的 5% 分位数是 10 万,95% 分位数是 50 万,均值是 25 万。以下哪种说法最准确?

A. 你一定会赚 25 万
B. 有 90% 的概率收入在 10 万到 50 万之间
C. 最可能的收入是 25 万
D. 收入超过 50 万的概率是 10%

查看答案与解析

答案:B(有 90% 的概率收入在 10 万到 50 万之间)

5% 分位数 = 10 万,意味着有 5% 的概率 < 10 万,95% 的概率 > 10 万
95% 分位数 = 50 万,意味着有 95% 的概率 < 50 万,5% 的概率 > 50 万

所以 90% 的概率在 10 万到 50 万之间(100% - 5% - 5% = 90%)。

A 错误:均值不是确定值
C 不确定:均值不一定是最可能值(取决于分布形状)
D 错误:超过 50 万的概率是 5%,不是 10%

题目 2

蒙特卡洛模拟显示:变量 A 与结果的相关系数是 0.9,变量 B 是 0.3。这意味着:

A. 变量 A 对结果影响更大
B. 变量 B 对结果影响更大
C. 两个变量影响一样大
D. 无法判断

查看答案与解析

答案:A(变量 A 对结果影响更大)

相关系数绝对值越大,变量与结果的线性关系越强——对结果影响越大

0.9 > 0.3,所以变量 A 影响更大。

行动:如果想控制结果的不确定性,应该优先控制变量 A 的不确定性。

题目 3

你模拟了 1000 次,发现 5% 分位数是 -20 万。这意味着:

A. 有 5% 的概率亏损超过 20 万
B. 有 95% 的概率亏损超过 20 万
C. 期望亏损是 20 万
D. 最大亏损是 20 万

查看答案与解析

答案:A(有 5% 的概率亏损超过 20 万)

5% 分位数 = -20 万,意味着有 5% 的结果 < -20 万(即亏损超过 20 万)。

这是 VaR(Value at Risk):在 95% 置信水平下,最大亏损是 20 万。

B 错误:95% 的概率 > -20 万(亏损不超过 20 万)
C 错误:均值可能不是 -20 万
D 错误:最大亏损可能远超 -20 万(只是概率很低)


本课要点

  1. 蒙特卡洛模拟 = 随机抽样 × 重复 × 统计分析——量化不确定性
  2. 输入是概率分布,不是点估计——反映变量的真实不确定性
  3. 输出是结果的分布——告诉你结果的不确定性有多大
  4. VaR 和 CVaR:量化尾部风险——最坏情况有多坏
  5. 敏感性分析:找出关键变量——控制哪个变量最有效

延伸阅读

  • Metropolis & Ulam, 《The Monte Carlo Method》 — 蒙特卡洛模拟的原始论文
  • Robert & Casella, 《Monte Carlo Statistical Methods》 — 蒙特卡洛方法的教材
  • Glasserman, 《Monte Carlo Methods in Financial Engineering》 — 金融领域的应用

下一步

下一课:贝叶斯思维:从数据中更新信念 — 用贝叶斯定理从数据中学习。


工具提示:用 Excel 的 @RISK 插件或 Python 的 numpy 做蒙特卡洛模拟。从简单模型开始(3-5 个变量),逐步增加复杂度。