五个旗舰模拟
它们能回答什么,不能回答什么。
模型版本:0.1.0 · 口径版本:3.0.0
先说清这一点
这些模拟不是对未来的预测。它们只回答一个问题:「在我写明的这组假设下,数字会是多少。」
任何把模拟路径说成「未来会发生什么」的表述,在这套系统里都是错的。
可信度的三层
模拟引擎把自己分成三层,每个结果都知道自己属于哪一层(meta.layer):
| 层 | 是什么 | 对应实现 |
|---|---|---|
| Layer 1 · Deterministic | 确定性计算:利息、债务计划、现金流、给定假设下的复利。输入相同,结果必然相同。 | finance-core 全部口径 + scenario-core 的 project |
| Layer 2 · Scenario | 用户定义的保守 / 基础 / 乐观情景,输出区间而不是一条曲线。 | projectBands、compare |
| Layer 3 · Stochastic | 随机模拟。必须同时给出模拟次数、随机种子、收益分布、相关性、波动率、费用、通胀与模型限制。 | 首版未实现,种子机制已经就位 |
首版只上线 Layer 1 和 Layer 2。Layer 3 属于 P2——缺了上面那一整串说明的随机模拟,看起来比确定性计算更可信,实际上更容易误导人。
四个必须支持的动作
每个模拟都要能做到:
- Reproduce — 拿着导出的假设重跑,得到一样的结果(
reproduce); - Compare — 并列两三条情景(
compare); - Reset — 回到基准假设;
- Export Assumptions — 导出假设本身,而不是导出结果(
exportAssumptions)。
其中 Compare 有一条硬约束:任何情景比较不得静默改变其他变量。 compare 要求调用方声明这次比较改的是哪几个变量,改了别的就抛 UndeclaredChangeError,而不是悄悄给出一个看起来更好的结果。
这条约束是整个模块里最重要的一行代码。一个比较如果可以顺手多调一个参数,它就能证明任何结论。
Simulation A · Debt vs Investing
simulateDebtVsInvesting
手上有一笔现金,几种用法:全部还债、全部留作应急金、全部投资、按比例分配。四种分配各自给出:省下的利息、期末投资账户、期末净值、Runway 月数、还清债务需要的月数,以及这一种用法最容易出问题的地方。
教学目标:理解确定的债务成本与不确定的投资回报之间的差别。
结果里同时给基础假设和一个不利情景(回报可以为负)。两列数字的确定性不一样,不能只比大小。
局限:不含税务、提前还款违约条款、协商减免,也不含「因为心里踏实了所以在工作上表现更好」这类真实但无法建模的效应。
→ 对应 第 4 章 负债翻盘。现在可以先用 计算口径说明书 里的雪球 vs 雪崩对比。
Simulation B · First Capital Snowball
simulateFirstCapital
从零本金开始,调整收入、储蓄率、投入频率、投资期限、费用与收益假设,观察本金贡献和资本回报在不同时期的占比。
教学目标:早期积累更依赖储蓄与收入,之后资本规模才可能发挥更明显作用。
| 第几年 | 余额(名义) | 本金贡献 | 回报贡献 | 回报占余额 |
|---|---|---|---|---|
| 1 | 68,818 元 | 67,200 元 | 1,618 元 | 2.4% |
| 3 | 222,183 元 | 207,708 元 | 14,474 元 | 6.5% |
| 5 | 398,540 元 | 356,774 元 | 41,766 元 | 10.5% |
| 10 | 958,105 元 | 770,373 元 | 187,733 元 | 19.6% |
| 15 | 1,728,219 元 | 1,249,847 元 | 478,372 元 | 27.7% |
| 20 | 2,772,136 元 | 1,805,689 元 | 966,447 元 | 34.9% |
储蓄率敏感性
- 储蓄率 15.0% → 期末 2,079,102 元
- 储蓄率 20.0% → 期末 2,772,136 元
- 储蓄率 25.0% → 期末 3,465,171 元
前几年余额几乎等于你投进去的钱。能更快改变结果的是收入与储蓄率,不是再调高回报假设。
局限:回报是一个固定年率,不含波动,也不含回报出现的顺序。真实的二十年不会是一条平滑曲线,而这个模型画出来的就是一条平滑曲线。
→ 对应 第 25 章 第一桶资本 与 第 26 章 复利与时间。
Simulation C · AI Career Leverage
simulateCareerLeverage
几种选择并列:继续原岗位、提高专业能力、建立 AI Workflow、开展咨询、做一个小产品。每种选择要写明学习成本、时间投入、收入区间、失败情况与经营成本。
教学目标:人力资本和可扩展收入都不是免费增长的。
局限:收入区间是你自己填的假设。这个模型最大的作用不是算出哪条路更赚钱,而是逼你把「爬坡期有多长、失败的概率有多大、持续成本是多少」这三件事写下来——大多数人在做这个决定时根本没写过。
→ 对应 Phase III 的第 13–18 章。
Simulation D · Lifestyle Inflation
simulateLifestyleInflation
收入逐渐上升,你决定怎么处理每一次涨薪:增加储蓄、提高消费、增加住房负担、购置资产。观察 Freedom Runway 怎么变化。
教学目标:收入增长不必然转化为财务自由。
这个模拟经常给出一个反直觉的结果:收入涨了 60%,Runway 反而变短了——因为必要支出跟着涨,而安全储备的目标月数是乘在必要支出上的。
局限:它不判断「提高生活质量」是不是错的。把消费压缩到极端水平不是这套系统的目标,这个模拟只是显示代价。
→ 对应 Phase III 与 Phase V。
Simulation E · Retirement Stress Test
simulateRetirementStress
长期资产组合,叠加几种不利条件:提前退休、市场下跌、较高通胀、不理想的回报顺序、延长退休期限、调整支出。
教学目标:退休风险不仅取决于平均收益率。
同样的平均年化回报,如果不利的年份出现在退休的头两年,结果会和出现在第二十年完全不同。这叫序列风险,它是 FI Number 那道除法算不出来的东西。
局限:首版只做确定性的不利情景(Layer 2),不做随机模拟。所以它能告诉你「这几种不利情况下会怎样」,不能告诉你「失败的概率是多少」。概率需要 Layer 3,而 Layer 3 需要一整套必须公开的分布假设。
→ 对应 第 33 章 退休提款与序列风险。
模型自己承认的限制
project 返回的每个结果都带着这四条:
- 这是在给定假设下的推演,不是对未来的预测。
- 回报、通胀与收入增长按固定年率施加,不含真实市场的波动与顺序。
- 不含税务申报、社保、汇率变动与地区差异,这些需要结合当地规则单独核对。
- 人生事件只在你写明的年龄发生,真实世界的冲击不会按计划到来。
界面有义务把它们和结果一起显示,而不是折叠在「免责声明」里。