从这一章开始,动真格的。目标:今天之内,让你亲手跑完人生第一次蒙特卡洛模拟。不需要会编程——代码让 AI 写,你负责出题和读答案。
选一个你真正关心的问题
别拿"抛硬币"练手,那不疼。拿你自己的问题开刀。本书用一个人人都绕不开的例子:我存的钱,退休后够不够花 30 年?
假设你 60 岁退休时攒了 300 万,每年取出 15 万生活,剩下的钱拿去投资,年化收益"平均"5%,但有波动。问:30 年后钱还在吗?
理财顾问的做法:按每年 5% 算一条线,告诉你"没问题,30 年后还剩 200 多万"。这条线是对的,也是没用的——因为市场不会每年准时给你 5%。有的年份 +20%,有的年份 -15%。顺序和波动会改变命运(还记得第五章吗:亏 40% 之后要赚 67% 才回本)。这种问题,正是蒙特卡洛的主场。
把问题"翻译"给 AI 听
关键一步是出题。对着 AI(ChatGPT、Claude、任何一个都行)照抄这段提示词:
"帮我写一个 Python 的蒙特卡洛模拟:本金 300 万,每年年初取出 15 万,剩余资金当年收益率服从均值为 5%、标准差为 15% 的正态分布。模拟 30 年,跑 10000 次。告诉我:(1) 有多少次模拟里钱提前花光了;(2) 30 年后剩余资金的中位数和最差的 5% 是多少。请给我完整代码,并逐行用中文注释。"
AI 会给你一段这样的代码(核心部分长这样):
import random
def one_life():
money = 3000000
for year in range(30):
money -= 150000 # 年初取出生活费
if money <= 0: return 0 # 花光了
r = random.gauss(0.05, 0.15) # 掷骰子:均值5%波动15%的收益
money *= (1 + r)
return money
results = [one_life() for _ in range(10000)] # 一万条平行人生
broke = sum(1 for x in results if x <= 0)
print("破产概率:", broke / 10000)
看不懂没关系,只认三件事就行:one_life 是"一条平行人生";random.gauss 是"掷骰子"(随机抽一个收益率);跑一万次、数破产几次——就是塔勒布交易桌上那套,一个零件都不少。
去哪运行这段代码
三条路,按省事程度排:
- 让 AI 直接跑。很多 AI 自带代码执行功能,提示词最后加一句"请直接运行并把结果告诉我",它跑完会把破产概率、中位数都报给你。
- 在线运行器。搜"Python 在线运行",把代码粘进去点运行,不用装任何东西。
- 装个 Python。想长期玩就装一个,一劳永逸。
结果会让你沉默
跑完你会得到一个这样的答案(这段文字不是瞎编的——我们真的把上面的代码跑了三遍,三种随机种子下结果几乎一样):破产概率约 42%——十条平行人生里,有四条你在钱花光的时候人还活着;撑满 30 年的那些人生里,剩余资金的中位数也只有 65 万左右。而理财顾问那条"每年准时 5%"的线告诉你的是:稳赢,还能剩两百多万。
顺便说一句实话:这个数对假设很敏感。每年取 15 万,是初始本金的 5%——而理财圈有个著名的"4% 法则",说的就是年取 4% 比较安全。你踩的 5% 正好在悬崖边上,这是 42% 这么高的部分原因。
这就是你亲手掷出的第一个塔勒布式结论:平均值给你的安慰,在分布面前不堪一击。
接下来呢?这正是模拟的价值——把问题变成可调参数的游戏:每年取 12 万行不行?收益率降到 3% 的世界呢?工作到 65 岁呢?改一个数字,重跑一万次,三十秒就有答案。你开始像塔勒布一样思考了:不问"未来会怎样",问"我这种活法死得多快"。
不过,先别急着把人生大事都交给 AI 生成的代码。AI 会犯错,而且犯得理直气壮。下一章讲怎么当它的质检员。