蒙特卡洛模拟:用随机数理解不确定性
产品经理的数学课 · 第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) 是一种用随机数模拟不确定性的方法:
- 定义输入变量的概率分布(开发时间、用户增长、转化率)
- 随机抽取输入变量的值(从概率分布中抽样)
- 计算输出结果(转化人数)
- 重复很多次(比如 10000 次)
- 分析输出结果的分布(均值、标准差、分位数)
概率分布:输入变量的不确定性
每个输入变量都有一个概率分布:
均匀分布(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 万(只是概率很低)
本课要点
- 蒙特卡洛模拟 = 随机抽样 × 重复 × 统计分析——量化不确定性
- 输入是概率分布,不是点估计——反映变量的真实不确定性
- 输出是结果的分布——告诉你结果的不确定性有多大
- VaR 和 CVaR:量化尾部风险——最坏情况有多坏
- 敏感性分析:找出关键变量——控制哪个变量最有效
延伸阅读
- 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 个变量),逐步增加复杂度。