超越均值与方差
两个收益率序列可以有相同的均值和波动率,持有起来却大不相同。一个缓慢上涨,偶尔一天暴跌 6%;另一个对称而平静。均值和方差是分布的前两个矩。k 阶中心矩是 (x - mean) ** k 的平均值。3 阶和 4 阶矩描述形状:偏度说明哪一侧尾部更长,峰度说明尾部有多厚。
m_k = mean((x - mean)^k) skewness = m3 / m2^1.5 excess kurtosis = m4 / m2^2 - 3
import numpy as np
def central_moment(x, k):
return float(np.mean((x - x.mean()) ** k))
# Calm days of about +1%, and one crash of -6%
returns = np.array([0.010, 0.012, 0.008, 0.011, 0.009, 0.010, 0.012, -0.060, 0.010, 0.009])
print(round(central_moment(returns, 2), 8)) # 0.00044389 the variance with ddof=0
print(round(central_moment(returns, 3), 10)) # -2.47823e-05 odd powers keep the sign: the crash dominates
print(round(central_moment(returns, 4), 12)) # 1.587946e-06 even powers are always positive偏度:哪一侧尾部更长
立方保留每个偏差的符号,并让大偏差的权重大得多,所以三阶矩由最极端的值主导。除以 m2 ** 1.5 消去量纲,得到偏度:对称分布为 0;长尾在左侧(罕见的大亏损)时为负,长尾在右侧(罕见的大盈利)时为正。股票指数通常是负偏:缓慢上涨、突然下跌。10 万个正态样本的偏度约为 0。
m2 = central_moment(returns, 2)
m3 = central_moment(returns, 3)
print(round(m3 / m2 ** 1.5, 3)) # -2.65 strongly negative: one big loss among calm gains
mirror = -returns # flip every return: the long tail moves to the right
print(round(central_moment(mirror, 3) / central_moment(mirror, 2) ** 1.5, 3)) # 2.65峰度:尾部有多厚
四次方让极端值的权重极大,所以 m4 / m2 ** 2 随尾部变厚而增大。正态分布的这个值是 3,因此我们报告超额峰度 m4 / m2 ** 2 - 3:正态分布为 0,厚尾为正(极端日出现得比钟形预测的更频繁),薄尾为负(最薄的情形,即两个相等的尖峰,得 -2)。大多数资产的日收益率超额峰度明显为正,常常达到 5 以上。这两个统计量在收益率缩放或平移后都不变,因此只描述形状。
m4 = central_moment(returns, 4)
print(round(m4 / m2 ** 2 - 3, 3)) # 5.059 fat tails: one crash dominates the fourth moment
calm = np.array([-0.02, -0.01, -0.005, 0.0, 0.005, 0.01, 0.02, -0.015, 0.015, 0.0])
c2, c3, c4 = (central_moment(calm, k) for k in (2, 3, 4))
print(round(c3 / c2 ** 1.5, 3), round(c4 / c2 ** 2 - 3, 3)) # 0.0 -1.033 symmetric, slightly thin tails# Shape does not depend on scale or shift: multiply the returns by 3 and add 1
rescaled = returns * 3 + 1
print(round(central_moment(rescaled, 3) / central_moment(rescaled, 2) ** 1.5, 3)) # -2.65
print(round(central_moment(rescaled, 4) / central_moment(rescaled, 2) ** 2 - 3, 3)) # 5.059 the same two numbers一次暴跌就能改变一切偏度和峰度由少数最极端的值决定,因此远不如均值或波动率稳定:增加或删除一天,它们就会大幅跳动。请用足够多的数据(至少数百天)计算,并在相信某个数字之前也看看直方图。
- k 阶中心矩是
mean((x - mean) ** k):2、3、4 阶矩分别给出方差、偏度、峰度。 - 偏度
m3 / m2 ** 1.5:负值表示左侧长尾(罕见的大亏损);超额峰度m4 / m2 ** 2 - 3对正态分布为 0。 - 超额峰度为正表示厚尾;两个统计量都由少数极端日决定,需要大量数据。
下一节:厚尾与正态性检验,正式检验收益率是否服从钟形曲线。
实验:评分内容
- 用
central_moment计算基础构件25 分 - 用
skewness衡量哪一侧尾部更长25 分 - 用
excess_kurtosis衡量尾部有多厚25 分 - 用
shape_label给形状命名25 分