You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何对数正态回报的cumprod/cumsum得到的最终价格均值偏离1.0?

几何布朗运动最终价格期望偏离1的问题分析与解决

理论正确性确认

你的公式mu = -sigma²/2是完全正确的。几何布朗运动的离散化中,单步对数回报r_t = ln(S_t/S_{t-1})服从正态分布N(mu, sigma²),对应的单步价格因子exp(r_t)的期望为:

E[exp(r_t)] = exp(mu + sigma²/2)

要让该期望为1(保证每一步价格的期望不变),解得mu = -sigma²/2,进而最终价格S_n = S_0 * product(exp(r_t))的期望为1^(n-1) = 1,理论上完全成立。

模拟结果偏离的原因

你观察到的结果并非理论缺陷或数值稳定性问题,而是参数组合导致最终价格的分布极度右偏,有限次模拟中未抽到足够多的极端大值样本:
当你设置sigma=1、n=100时,共有99个对数回报,它们的和服从正态分布N(99*mu, 99*sigma²),代入mu=-0.5后,和的均值为-49.5,标准差约为9.95。此时:

  • 绝大多数样本的和会落在-49.5 ± 3*9.95区间内,对应exp(和)的取值约为3e-9到1e-34;
  • 和为正值的概率极低(Z值约为4.97,对应概率仅约3e-7),意味着10万次模拟中几乎抽不到让exp(和)大幅大于1的样本。

这种情况下,样本均值会被大量极小值主导,远低于理论均值1。

解决方法

1. 调整模拟参数

选择更合理的参数组合,让最终价格的分布右偏程度降低:

  • 减小sigma:比如将sigma设为0.1,此时单步对数回报的均值为-0.005,99个回报和的均值为-0.495,标准差约0.995,和为正值的概率约31%,10万次模拟就能得到接近1的均值。
  • 减小n:比如设n=2(仅1个对数回报),此时和的分布为N(-0.5,1),和为正值的概率约31%,模拟结果会快速收敛到1。

2. 大幅增加模拟次数

如果必须使用原参数,需要将模拟次数提升到千万甚至亿级,才能抽到足够多的极端大值样本,让样本均值收敛到理论值。

验证示例

调整参数后的代码:

import numpy as np

def gen_prices(n: int, start_price: float = 1.0, sigma: float = 1.0) -> np.ndarray:
    mu = -(sigma**2) / 2
    log_returns = np.random.normal(mu, sigma, size=n - 1)
    prices = np.exp(
        np.cumsum(
            np.concatenate([np.array([np.log(start_price)]), log_returns]),
        )
    )
    return prices

# 使用sigma=0.1,n=100
num_iter = 100000
num_prices = 100
final_prices = [gen_prices(n=num_prices, sigma=0.1)[-1] for _ in range(num_iter)]
print(np.mean(final_prices))  # 结果会接近1.0

内容的提问来源于stack exchange,提问作者bluenote10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:29:57