跳转到内容

统计学基础

上一章解决了「数据是什么口径」,这一章解决「怎么用数字描述数据」。量化里的每一句话——「这个策略年化 15%、最大回撤 8%」「这两只股票相关性很高」「这个信号显著」——背后都是统计学的概念。这一章是全教程数学最重的一章,但每个公式都只有三件事:它怎么写、它说人话是什么意思、拿几个真数字手算一遍。

统计学不直接研究价格,研究的是收益率。原因很简单:茅台 1700 元涨 17 元和一只 100 元的股票涨 1 元,价格变动差了 17 倍,但对持有人来说都是 +1%。收益率把不同价位的股票换算到同一把尺子上。

rt=Pt−Pt−1Pt−1=PtPt−1−1r_t = \frac{P_t - P_{t-1}}{P_{t-1}} = \frac{P_t}{P_{t-1}} - 1

人话解释:今天赚的钱除以昨天的本钱。PtP_t 是第 tt 天的(复权)收盘价,Pt−1P_{t-1} 是前一天的。rt=0.02r_t = 0.02 就是「今天赚了 2%」。

手算一遍:一只股票昨天收盘 10 元,今天收盘 11 元:

rt=11−1010=0.10=10%r_t = \frac{11 - 10}{10} = 0.10 = 10\%

如果明天从 11 元跌回 10 元:rt+1=(10−11)/11=−9.09%r_{t+1} = (10 - 11) / 11 = -9.09\%。注意这个不对称:涨 10% 再跌 9.09%,价格回到原点,但两个简单收益率加起来是 +0.91%,不是 0。

ℓt=ln⁡(PtPt−1)\ell_t = \ln\left(\frac{P_t}{P_{t-1}}\right)

人话解释:ln⁡\ln 是自然对数,先把「今天价格是昨天的几倍」取对数再当收益率用。它的数值和简单收益率非常接近(涨跌幅度小时差别在小数点后三位),但有一个简单收益率没有的好性质:可以直接相加。两天的对数收益之和 = 两天的总对数收益。

手算一遍:还是 10 元涨到 11 元:

ℓt=ln⁡(11/10)=ln⁡(1.1)≈0.0953=9.53%\ell_t = \ln(11/10) = \ln(1.1) \approx 0.0953 = 9.53\%

第二天跌回 10 元:ℓt+1=ln⁡(10/11)=−ln⁡(1.1)≈−9.53%\ell_{t+1} = \ln(10/11) = -\ln(1.1) \approx -9.53\%。两天相加正好等于 0——价格回到原点,对数收益归零,对上了。而简单收益率那笔账(+10%、−9.09%)要靠乘法才能复原:(1+0.10)×(1−0.0909)=1(1 + 0.10) \times (1 - 0.0909) = 1。

实际怎么用:算单日涨跌、给客户看业绩,用简单收益率(直观);做统计建模、把多期收益加总,用对数收益率(可加)。本章后面的例子都用简单收益率,因为手算更直观。

拿到一串收益率,最先问的三个问题:平均赚多少?波动有多大?波动用「平均赚多少」的单位怎么表达?分别对应均值、方差、标准差。

rˉ=1n∑t=1nrt\bar{r} = \frac{1}{n}\sum_{t=1}^{n} r_t

人话解释:把所有天的收益率加起来除以天数,∑\sum 就是「求和」的记号。日均收益 0.1%,一年 250 个交易日,粗略年化就是 25%。

s2=1n−1∑t=1n(rt−rˉ)2,s=s2s^2 = \frac{1}{n-1}\sum_{t=1}^{n}(r_t - \bar{r})^2, \qquad s = \sqrt{s^2}

人话解释:方差是「每天收益偏离均值多远」的平方的平均——先平方是为了让涨 2% 和跌 2% 都算「偏离」,不至于正负抵消。除以 n−1n-1 而不是 nn 是统计学的修正(样本方差),nn 大时两者几乎没区别。方差的单位是「百分比的平方」,没法和收益率直接比,所以开平方得到标准差 ss——它和收益率同单位,日收益的标准差就是交易员口中的日波动率。

手算一遍:某只股票 5 天的日收益率(%):1、−2、3、0、2。

均值:(1−2+3+0+2)/5=4/5=0.8%(1 - 2 + 3 + 0 + 2) / 5 = 4 / 5 = 0.8\%。

每天的偏离:1−0.8=0.21-0.8=0.2、−2−0.8=−2.8-2-0.8=-2.8、3−0.8=2.23-0.8=2.2、0−0.8=−0.80-0.8=-0.8、2−0.8=1.22-0.8=1.2。

平方:0.040.04、7.847.84、4.844.84、0.640.64、1.441.44,合计 14.814.8。

样本方差:s2=14.8/(5−1)=3.7s^2 = 14.8 / (5-1) = 3.7(%²)。标准差:s=3.7≈1.92%s = \sqrt{3.7} \approx 1.92\%。

解读:这只股票平均日涨 0.8%,典型的一天在均值上下约 2 个百分点的范围里晃。注意均值(0.8%)还不到波动(1.92%)的一半——单日的涨跌里噪声远大于趋势,这是后面假设检验一节重要的直觉基础。

收益的分布:直方图与正态分布

Section titled “收益的分布:直方图与正态分布”

均值和方差是两个数字,分布是完整的一张图:把所有收益率按大小分桶,数每个桶里有几天,画成柱状图,就是直方图。

下面是用 500 个合成日收益(模拟一只日波动约 2% 的股票两年的行情)画的直方图,柱子上叠加了一条同均值、同标准差的正态分布曲线(那条钟形曲线,就是「理想情况」长什么样):

人话解读:正态分布是统计学的「标准答案」——大部分日子挤在均值附近,越极端的日子越少,左右对称。它有个著名的经验法则:约 68% 的日子落在均值 ±1 个标准差内,约 95% 落在 ±2 个标准差内,±3 个标准差以外的日子理论上只占 0.27%。

但仔细看这张图,实际分布和正态曲线有两处对不上:

  • 中间更尖:正态曲线预测的峰值天数约 62 天,实际中间的桶有 74 天——小涨小跌的日子比正态预期的更多;
  • 两端更厚:±3 个标准差以外的日子,正态预期 500 天里约 1.4 天,实际有 11 天——暴涨暴跌比正态预期的多得多。

中间尖、两端厚,合起来叫厚尾(fat tails),是真实股票收益的普遍特征。这份合成数据是故意按厚尾生成的,超额峰度约 3.5(正态分布是 0)——真实 A 股个股的日收益,厚尾程度往往比这还夸张。记住这张图:任何假设收益服从正态分布的公式,都在低估极端行情的概率。

均值和方差描述了分布的「位置」和「宽度」,偏度和峰度描述「形状」。

偏度=n(n−1)(n−2)∑t=1n(rt−rˉs)3\text{偏度} = \frac{n}{(n-1)(n-2)}\sum_{t=1}^{n}\left(\frac{r_t - \bar{r}}{s}\right)^3

人话解释:结构和方差几乎一样,只是把平方换成了立方。立方保留正负号:右边(大涨)的极端值立方后是巨大的正数,左边(大跌)是巨大的负数。加总之后哪边赢,分布就偏向哪边:

  • 偏度 > 0(右偏/正偏):右边尾巴更长——大多数时候小跌,偶尔暴涨(彩票型);
  • 偏度 < 0(左偏/负偏):左边尾巴更长——大多数时候小涨,偶尔暴跌(瀑布型,个股和爆仓策略的典型形态);
  • 偏度 ≈ 0:左右大致对称。

手算一遍(简化为符号判断):5 天收益率(%):0、1、1、1、4。均值 =7/5=1.4%= 7/5 = 1.4\%,偏离为 −1.4、−0.4、−0.4、−0.4、+2.6。立方:

(−1.4)3=−2.744,(−0.4)3=−0.064 (×3),2.63=17.576(-1.4)^3 = -2.744,\quad (-0.4)^3 = -0.064\ (\times 3),\quad 2.6^3 = 17.576

合计 −2.744−0.192+17.576=+14.64>0-2.744 - 0.192 + 17.576 = +14.64 > 0。右边那个 +4% 的极端值在立方后被放大成 17.6,压过了左边所有项——正偏,和「偶尔暴涨」的直觉一致。把数据镜像成 −4、−1、−1、−1、0,所有立方变号,合计 −14.64,负偏。

人话解释:峰度是四次方版的偏离加总(公式结构和偏度相同,指数从 3 换成 4,这里不展开)。四次方把极端值放大得更狠,所以峰度本质上是在称量尾巴的重量。实际报告里都用超额峰度 = 峰度 − 3,这样正态分布正好是 0:

  • 超额峰度 > 0:厚尾,极端行情比正态预测的多——股票收益的常态;
  • 超额峰度 ≈ 0:接近正态;
  • 超额峰度 < 0:薄尾,罕见。

本节合成数据的超额峰度约 3.5、偏度约 0.16——轻微正偏、明显厚尾。直方图里看到的「尖峰厚尾」,用这两个数就量化了。

ρX,Y=Cov(X,Y)sX⋅sY,Cov(X,Y)=1n−1∑t=1n(xt−xˉ)(yt−yˉ)\rho_{X,Y} = \frac{\text{Cov}(X,Y)}{s_X \cdot s_Y}, \qquad \text{Cov}(X,Y) = \frac{1}{n-1}\sum_{t=1}^{n}(x_t - \bar{x})(y_t - \bar{y})

人话解释:协方差 Cov\text{Cov} 度量两个序列「同涨同跌」的程度:每天把 X 的偏离和 Y 的偏离相乘,同向得正、反向得负,再加总平均。问题是协方差的数值没有上限、单位也怪,没法判断「多大算大」。于是除以两个标准差把它压缩到 −1 和 +1 之间,这就是相关系数 ρ\rho:+1 是完全同步,−1 是完全反向,0 是线性上互不相关。

手算一遍:股票 A 和股票 B 的 5 日收益(%):

日AB
112
2−2−3
334
40−1
523

均值:xˉA=0.8%\bar{x}_A = 0.8\%(上一节算过),xˉB=5/5=1.0%\bar{x}_B = 5/5 = 1.0\%。

偏离相乘,逐日算:(0.2)(1)=0.2(0.2)(1)=0.2、(−2.8)(−4)=11.2(-2.8)(-4)=11.2、(2.2)(3)=6.6(2.2)(3)=6.6、(−0.8)(−2)=1.6(-0.8)(-2)=1.6、(1.2)(2)=2.4(1.2)(2)=2.4,合计 22.022.0。

协方差:Cov=22.0/4=5.5\text{Cov} = 22.0 / 4 = 5.5(%²)。

标准差:sA=14.8/4=3.7≈1.92%s_A = \sqrt{14.8/4} = \sqrt{3.7} \approx 1.92\%;sB=34/4=8.5≈2.92%s_B = \sqrt{34/4} = \sqrt{8.5} \approx 2.92\%。

ρ=5.51.92×2.92=5.55.61≈0.98\rho = \frac{5.5}{1.92 \times 2.92} = \frac{5.5}{5.61} \approx 0.98

两只股票几乎完全同步——这不奇怪,看数据就知道 B 每天的涨跌方向和幅度都紧跟着 A。量化的用途:组合里放两只 ρ = 0.98 的股票等于加倍下注同一件事,没有分散效果;真正的分散要找 ρ 接近 0 甚至为负的资产。

yt=α+βxt+εty_t = \alpha + \beta x_t + \varepsilon_t

人话解释:把个股收益 yy 拆成三部分:大盘收益 xx 能解释的部分(βx\beta x)、与大盘无关的固定部分(α\alpha)、解释不了的噪声(ε\varepsilon)。β\beta 是相对波动的放大倍数:β = 1.5 表示大盘涨 1%,这只股票平均涨 1.5%;β = 0.5 表示它只跟一半。α 是去掉大盘影响后「白赚」的部分——选股 Alpha 这个词就来自这里。

β\beta 不是拍脑袋定的,它和上一节的相关系数是一家人:

β=Cov(X,Y)sX2=ρ⋅sYsX\beta = \frac{\text{Cov}(X, Y)}{s_X^2} = \rho \cdot \frac{s_Y}{s_X}

手算一遍:沿用上面 A、B 两只股票的数据,把 A 当「大盘」、B 当「个股」:

β=5.53.7≈1.49,α=xˉB−βxˉA=1.0−1.49×0.8≈−0.19%\beta = \frac{5.5}{3.7} \approx 1.49, \qquad \alpha = \bar{x}_B - \beta \bar{x}_A = 1.0 - 1.49 \times 0.8 \approx -0.19\%

解读:B 的波动是 A 的约 1.5 倍(β = 1.49),但去掉跟随 A 的部分后,B 平均每天还跑输 0.19%(α 为负)——高 β 不等于好股票,它只是放大器。用 ρ⋅sY/sX\rho \cdot s_Y / s_X 验算:0.98×2.92/1.92≈1.490.98 \times 2.92 / 1.92 \approx 1.49,两条路算出来一致。

假设检验与 p 值:这个结果是不是运气

Section titled “假设检验与 p 值:这个结果是不是运气”

这是全章最重要、也最容易被用错的一节。

场景:一个策略回测了 100 天,赚了钱。它是真有用,还是瞎猫碰上死耗子?假设检验的处理方式是反着问:先假设策略没用(这叫原假设),再算「在策略没用的前提下,出现这么好(或更好)结果的概率」——这个概率就是 p 值。p 值越小,「纯靠运气」这个解释越站不住脚。

掷硬币类比:有人声称能预测硬币,抛 10 次猜中 8 次。他真有超能力吗?先假设他没有(猜中的概率就是 50%),算「纯蒙也能蒙对 8 次或更多」的概率:

p=C108+C109+C1010210=45+10+11024=561024≈5.5%p = \frac{C_{10}^{8} + C_{10}^{9} + C_{10}^{10}}{2^{10}} = \frac{45 + 10 + 1}{1024} = \frac{56}{1024} \approx 5.5\%

人话解读:一个纯蒙的人,每 1000 次「抛 10 次」的实验里,约有 55 次能蒙对 8 次以上——不算太罕见。所以 10 中 8 不足以让我们相信他有超能力,这就是「p = 5.5%,不显著」的含义。

p 值最常见的误读:p = 5.5% 不是「策略没用的概率是 5.5%」,也不是「结论正确的概率是 94.5%」。它只回答了一个问题:如果策略没用,看到这么极端的结果有多意外。原假设本身为真的概率,p 值给不出来。

两条实战推论:

  • 5% 这条线是人为约定的,p = 4.9% 和 p = 5.1% 没有本质区别,别把「显著/不显著」当开关用;
  • 试得越多,假阳性越多:每个无效策略都有 5% 的概率蒙出 p < 5%。如果你回测了 100 个策略只报告最好的那个,它「显著」很可能只是 100 次抽奖里的中奖者。策略池越大,对 p 值的要求就该越苛刻。

QQ 图:一眼看穿「是不是正态」

Section titled “QQ 图:一眼看穿「是不是正态」”

直方图看厚尾要靠眼力,QQ 图(分位数-分位数图)把这个问题变成「点是否在一条直线上」。

做法:把 500 个收益从小到大排序,第 ii 个就是样本的 i/ni/n 分位数(比如中位数是第 250 个);再算标准正态分布在同样位置的分位数应该是多少;把两者配成点对画出来。如果收益真是正态分布,所有点应该落在 y = x 这条 45° 直线上(图中红色虚线)。

人话解读:图中间的点基本贴在直线上——普通日子的收益确实接近正态;但两端的点明显「翘起来」离开直线:最左端的点理论值约 −3.1 个标准差,实际到了 −4.9;最右端理论 +3.1,实际 +4.4。两端上翘(下翘)成 S 形,就是厚尾的图形签名。以后看任何收益序列,画一张 QQ 图,三秒钟就能判断「能不能用正态假设」。

给定一串复权收盘价,算出收益率,再算均值、方差、偏度——这是后面每一章都会复用的流程:

输入:复权收盘价序列 prices[0..n](共 n+1 个价格)
输出:均值 mean、标准差 sd、偏度 skew
第一步:计算收益率
对 t 从 1 到 n:
r[t] = prices[t] / prices[t-1] - 1
(收益率比价格少一个点,共 n 个)
第二步:均值
sum = 0
对每个 r[t]:sum = sum + r[t]
mean = sum / n
第三步:方差与标准差
sq = 0
对每个 r[t]:sq = sq + (r[t] - mean) 的平方
variance = sq / (n - 1) // 样本方差,除以 n-1
sd = variance 开平方
第四步:偏度
cube = 0
对每个 r[t]:cube = cube + ((r[t] - mean) / sd) 的立方
skew = cube * n / ((n - 1) * (n - 2))
第五步:健全性检查
若 sd 等于 0:序列没有波动,偏度无法计算,直接报错
若 n 小于 30:打印警告「样本太少,统计量不可靠」
  1. 相关 ≠ 因果。两只股票 ρ = 0.98,不一定是 A 带动 B——很可能它们同属一个板块,被同一个因素(行业政策、大盘情绪)同时驱动。冰淇淋销量和溺水人数高度相关,因为背后都是「天热」。拿相关性当因果用,会做出「买入 A 就能预测 B」之类的错误策略。
  2. 小样本的统计量不可靠。20 天回测算出的夏普比率 3.0、5 天数据算出的相关系数 0.9,噪声远大于信号。经验上,均值和相关系数至少需要上百个观测才谈得上稳定,偏度峰度需要更多。样本不够时,正确的做法是承认「不知道」,而不是把噪声当结论。
  3. 用正态假设给尾部风险定价。直方图一节已经看到:±3 个标准差以外的日子,正态预测 1.4 天、实际 11 天,差了近 8 倍。凡是以正态为前提的风控公式(如经典 VaR),都会系统性地低估爆仓概率。厚尾不是理论细节,是真金白银。

统计语言备齐了:收益率是原料,均值方差是概况,偏度峰度看形状,相关与回归看关系,p 值负责泼冷水。下一章用这套语言定义「假设」与「信号」——把一个模糊的交易想法,变成可以被数据检验的命题。