WHY:上一篇说完正态分布的"迷人假设",今天我们聊聊现实
上一篇我讲了正态分布在金融世界的统治地位——优雅、好用、但致命地低估了尾部风险。文章结尾留了个问题:既然正态分布不够用,那用什么替代?
答案不是一句话能说清的,因为金融数据"不正常"有两个层面:
- 收益率的分布"不正常"——尾部太肥,正态分布兜不住
- 价格的分布"不正常"——价格不能为负,而且涨起来是乘性的,不是加减的
这两个"不正常",分别对应两种在量化实战中使用频率极高的分布:
- t分布:专门治"肥尾病"
- 对数正态分布:专门描述"价格是怎么走的"
你可能会问:这些东西跟我的年化20%有什么关系?
关系大了。
你做量化策略,第一步就是建模——对收益率建模、对价格建模、对风险建模。模型选错了,后面所有的回测结果、风控参数、仓位计算全是假的。
我见过太多,策略回测漂亮得不行,一上实盘就翻车。很大一部分原因,就是底层分布假设选错了。
今天这篇,我把t分布和对数正态分布讲透。不是纯数学推导,而是从"为什么用"到"怎么用"到"什么时候别用",全链条说清楚。
一句话总结:正态分布是理论理想国,t分布和对数正态分布才是现实世界的工具。搞懂它们,你的建模才算入了门。
HOW:两个分布的数学本质、适用场景与实战选择
一、t分布:给肥尾量身定做的"加厚版正态"
1.1 t分布长什么样?
t分布(Student's t-distribution)的形状和正态分布很像——对称的、钟形的、中间高两边低。但关键区别在于尾部:
- 正态分布的尾部衰减极快(e−x2)
- t分布的尾部衰减慢得多(多项式衰减),所以尾部更厚、更肥
这个"肥"的程度,由一个参数控制——自由度(degrees of freedom)ν:
表格
自由度 ν | 尾部特征 | 实际含义 |
ν = 1 | 极肥(就是柯西分布) | 极端事件概率极高,均值都不存在 |
ν = 3 | 很肥 | 方差存在但较大,尾部风险显著 |
ν = 5 | 中等肥 | 四阶矩存在,峰度可计算 |
ν = 10 | 轻微肥 | 接近正态,但仍比正态厚 |
ν = 30 | 非常接近正态 | 几乎所有矩都存在,尾部差异很小 |
ν → ∞ | 就是正态分布 | 完全退化为正态 |
关键认知:自由度越低,尾部越肥,极端事件概率越高。自由度越大,越接近正态分布。
1.2 为什么金融收益率适合用t分布?
回头看上一篇的数据:标普500日收益率的超额峰度约7-14。用正态分布去拟合,尾部风险被低估10万倍以上。
但用t分布拟合呢?
t分布的超额峰度公式为 ν−46(当ν > 4时)。如果令超额峰度 = 10,解出ν ≈ 4.6。
也就是说,用自由度约为5的t分布,就能捕捉到金融数据中观察到的肥尾特征。
具体对比(假设均值=0,日波动率=1%):
事件 | 正态分布预测概率 | t分布(ν=5)预测概率 | 现实观察 |
单日跌幅 > 3% | 0.13% | 1.2% | ~1-2% |
单日跌幅 > 5% | 0.00006% | 0.25% | ~0.3% |
单日跌幅 > 7% | ≈0 | 0.08% | ~0.1% |
t分布的预测与现实数据的吻合度,比正态分布好了几个数量级。
1.3 t分布在量化中的实战应用
应用场景一:策略回测中的显著性检验
你回测了一个策略,年化收益25%,夏普比率1.8。但你只跑了3年(约750个交易日)。这个收益是"真有alpha"还是"运气好"?
如果你用正态分布做t检验,会高估显著性(因为正态假设尾部太薄)。用t分布做检验,结论更稳健。
操作步骤:
- 计算策略的日收益率序列
- 用t分布(而非正态)计算均值的置信区间
- 如果95%置信区间的下界仍 > 0,策略才有统计显著的alpha
应用场景二:风险建模中的肥尾VaR
标准VaR假设正态,99%分位数对应的z值为2.33。但如果收益率服从t分布(ν=5),99%分位数对应的t值为3.36——比正态假设下的VaR高了44%。
这意味着:如果你用正态VaR来设定止损线和仓位上限,你的实际风险承受能力被高估了近一半。
应用场景三:参数估计的稳健性
用正态分布做MLE(最大似然估计),一个极端异常值就能把均值和方差拉偏。t分布因为尾部更厚,对异常值的敏感度更低,参数估计更稳健。
这在金融数据中特别重要——你的数据里总会有几次"史诗级暴跌",t分布不会被它们带跑。
1.4 t分布的局限
- t分布是对称的,无法捕捉金融数据的负偏度(下跌比下跌更猛)
- t分布假设尾部行为一致,但实际中上行和下行尾部可能不对称
- 自由度ν的估计本身有不确定性,小样本下不太稳定
- 多资产联合建模时,t-copula的计算量比高斯copula大得多
二、对数正态分布:价格为什么"只能涨到天上,不能跌到地下"?
2.1 对数正态分布长什么样?
先说定义:如果X服从正态分布,那么e^X就服从对数正态分布(Log-Normal Distribution)。
反过来,如果价格S服从对数正态分布,那么ln(S)服从正态分布。
对数正态分布的特征:
- 取值范围:(0, +∞)——只能为正,不能为负
- 形状:右偏(正偏度),右边拖着一条长长的尾巴
- 含义:价格可以翻倍、翻三倍、翻十倍,但不能跌到零以下
这完美匹配了金融资产价格的两个基本特征:
- 价格不能为负(你不可能倒贴钱买一只股票)
- 收益率是乘性的(涨10%是在前一个价格基础上×1.1,不是加一个固定值)
2.2 为什么资产价格是对数正态的?
这要从Black-Scholes模型说起。
Black和Scholes在1973年做了一系列假设:
- 资产价格连续交易
- 收益率独立同分布
- 收益率服从正态分布
- 无风险利率和波动率为常数
如果收益率 r=SdS 服从正态分布,那么对价格S取对数:
ln(ST)=ln(S0)+(r−2σ2)T+σT⋅Z
其中Z是标准正态变量。因为右边是正态的,所以 ln(ST) 是正态的,因此 ST 是对数正态的。
这就是Black-Scholes公式的底层逻辑链:收益率正态 → 价格对数正态 → 期权可以定价。
2.3 对数正态分布在量化中的实战应用
应用场景一:资产价格模拟(蒙特卡洛方法)
当你需要模拟未来价格路径时(比如期权定价、压力测试),直接在正态分布上模拟价格会出问题——可能出现负价格。
正确做法:
模拟收益率 r ~ N(μ, σ²)
价格路径 S_t = S_{t-1} × exp(r)
这样价格永远是正的,且收益率分布保持正态。
应用场景二:几何布朗运动(GBM)
GBM是金融建模中最基础的价格过程模型:
dSt=μStdt+σStdWt
这个方程的解就是:
ST=S0exp((μ−2σ2)T+σWT)
WT 是正态的,所以 ST 是对数正态的。几乎所有金融工程教材的第一个价格模型,都是这个。
应用场景三:收益率的"对数收益率"转换
在量化分析中,我们常用"对数收益率"而非"简单收益率":
- 简单收益率:
- 对数收益率:
对数收益率的优势:
- 如果价格是对数正态的,对数收益率就严格服从正态分布
- 对数收益率具有时间可加性(周的收益率 = 每天对数收益率之和)
- 当收益率较小时,对数收益率 ≈ 简单收益率(差异可忽略)
2.4 对数正态分布的局限
- 尾部太薄:对数正态的右尾虽然比正态厚,但仍然不够肥。真实价格的极端上涨(如meme stock暴涨100倍)概率被严重低估
- 波动率不是常数:GBM假设σ不变,但真实市场波动率会变化(微笑曲线、波动率聚集)
- 跳跃缺失:对数正态假设价格路径连续,但真实市场有跳空(开盘gap、突发事件)
- 尾部改进方案:Merton跳扩散模型(在GBM基础上加入泊松跳跃)、随机波动率模型(Heston模型)
三、怎么选?t分布 vs 对数正态 vs 正态
三种分布在量化建模中的定位完全不同,不是"选一个替代另一个"的关系,而是各管一摊:
维度 | 正态分布 | t分布 | 对数正态分布 |
建模对象 | 收益率(理论近似) | 收益率(肥尾修正) | 价格(路径模拟) |
尾部特征 | 薄尾 | 厚尾(可控) | 右偏厚尾 |
对称性 | 对称 | 对称 | 右偏 |
取值范围 | (-∞, +∞) | (-∞, +∞) | (0, +∞) |
核心参数 | μ, σ | μ, σ, ν | μ, σ |
典型应用 | 理论推导、CLT近似 | 风险建模、显著性检验 | 价格模拟、期权定价 |
实战频率 | ★★★ | ★★★ | ★★★★ |
选择原则:
1.对收益率建模:
- 理论推导用正态(简洁、有CLT支撑)风险管理用t分布(肥尾更真实)高频数据可以用正态(大数定律生效)日频/周频数据用t分布(肥尾效应明显)
2.对价格建模:
- 基准模型用对数正态/GBM(行业标准)需要捕捉极端价格用跳扩散模型需要拟合波动率微笑用随机波动率模型
3.做策略回测:
- 收益率序列的统计分析用t分布做假设检验蒙特卡洛模拟价格路径用对数正态压力测试用历史模拟(不依赖任何分布假设)
一句话:收益率用t分布看风险,价格用对数正态做模拟,正态分布做理论推导。三者各有分工,不是替代关系。
WHAT:掌握两个分布后,你的建模能力升级在哪?
核心认知清单
- t分布是"加厚版正态"——通过对自由度ν的控制,灵活调整尾部厚度。ν越小尾部越肥,对极端事件的捕捉能力越强
- 对数正态分布是"价格的自然语言"——价格不能为负、收益率是乘性的,这两个基本事实决定了价格服从对数正态
- Black-Scholes模型的底层逻辑:收益率正态 → 价格对数正态 → 期权可定价。理解这条链条,期权定价不再是黑盒
- t分布和正态分布不是二选一:理论推导用正态,风险建模用t分布,价格模拟用对数正态——三者各有分工
- 所有分布模型都是近似:真实金融数据比任何单一分布都复杂,需要组合使用+压力测试补充
实战应用升级路径
第一步:检查你当前模型的分布假设
- 你的VaR是否假设正态?如果是,用t分布重算一遍,看看风险被低估了多少
- 你的蒙特卡洛模拟是否在正态分布上直接模拟价格?如果是,改成对数正态
- 你的回测显著性检验是否用了正态z检验?换成t检验
第二步:参数估计实操
用Python估计t分布的自由度ν:
import scipy.stats as stats
import numpy as np
# 假设returns是你的日收益率序列
returns = np.array([...])
# 用最大似然估计拟合t分布
params = stats.t.fit(returns)
# params返回 (df, loc, scale) = (ν, μ, σ)
print(f"自由度 ν = {params[0]:.2f}")
print(f"位置 μ = {params[1]:.6f}")
print(f"尺度 σ = {params[2]:.6f}")
自由度ν的诊断意义:
- ν < 3:尾部极肥,你的资产风险极高,需要非常保守的仓位管理
- 3 < ν < 5:典型金融资产特征,中等肥尾
- 5 < ν < 10:轻度肥尾,接近正态但不可忽视尾部
- ν > 10:非常接近正态,正态近似可接受
第三步:对数正态价格模拟实操
python
# GBM价格路径模拟
import numpy as np
S0 = 100 # 初始价格
mu = 0.10 # 年化收益率10%
sigma = 0.20 # 年化波动率20%
T = 1 # 1年
dt = 1/252 # 日步长
n_steps = 252
# 生成正态随机收益率
Z = np.random.standard_normal(n_steps)
log_returns = (mu - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * Z
# 计算价格路径(永远为正)
prices = S0 * np.exp(np.cumsum(log_returns))
第四步:正态 vs t分布的VaR对比
置信水平 | 正态VaR乘数 | t(ν=5)VaR乘数 | 差异 |
95% | 1.645 | 2.571 | +56% |
99% | 2.326 | 3.365 | +45% |
99.5% | 2.576 | 4.032 | +57% |
如果你的日持仓是$100万,用正态99%VaR算出来是$2.33万。但用t(ν=5)算出来是$3.37万——** 差了45%,超过1万美元 **。
这1万美元的差距,就是你的模型选错分布所付出的"认知税"。
行动清单
- 拉取你主力策略的日收益率序列,用scipy.stats.t.fit()拟合t分布,记录自由度ν
- 对比正态VaR和t分布VaR在99%置信水平下的差异,量化"认知税"
- 检查你的蒙特卡洛模拟代码,确保价格路径用对数正态(乘exp)而非正态(加delta)
- 在策略回测报告中,同时报告正态假设和t分布假设下的VaR,增加信息密度
- 对自由度ν做滚动窗口分析,观察市场不同阶段(平静vs危机)的尾部变化
一句话总结
金融数据的"不正常"不是bug,是feature。t分布告诉你尾部有多肥,对数正态告诉你价格怎么走。掌握这两个分布,你的量化建模才算从"理想国"走进"真实世界"。
下一篇预告:第27篇——相关性分析:为什么"分散投资"不是简单的多买几只股票?