置信区间
置信区间给出一个范围——而不仅仅是一个点估计——它可能包含真实参数。理解 95% 置信的真正含义对于解读量化研究很重要。
超越点估计
假设你计算出一只股票的样本均值日收益率为0.05%。这是一个单一的数值——点估计。但这个估计有多精确?真实的总体均值可能略高于或略低于0.05%,我们希望量化我们的不确定性。
置信区间通过为真实参数提供一个可信值范围来解决这个问题。与其说”均值是 0.05%“,不如说”我们有 95% 的置信度认为真实均值在 0.02% 和 0.08% 之间”。
构建置信区间
当总体标准差 已知时,总体均值 的95%置信区间为:
其中 是标准正态分布的第97.5百分位(对于双侧区间,每侧留出2.5%的尾部)。
当 未知时——这在实际中几乎总是如此——我们用样本标准差 代替 ,并使用 t 分布而不是正态分布:
临界值来自自由度为 的 t 分布。对于大 ,t 分布趋近正态分布,所以对于95%置信区间,。
“95%置信”的真正含义
这是统计学中最常被误解的短语。
正确的解释是:如果你多次重复这个抽样过程,每次用新样本构建一个95%置信区间,那么大约95%的这些区间将包含真实的总体均值 。
错误的解释是:” 落在这个特定区间内的概率为95%。“这混淆了参数(一个固定的未知常数)与随机区间。真实均值要么在这个区间内,要么不在——它不会随机变动。随机变动的是生成区间的过程。
可以这样理解:在根据你的样本计算区间之后,它是固定的。概率陈述是关于生成该区间的过程的,而不是关于 的。你要么做了一个捕获 的好区间,要么没有——你只是不知道是哪一个。
Python:计算和可视化置信区间
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
true_mean = 0.0005 # 真实总体均值(对我们未知)
true_std = 0.015 # 真实总体标准差
n = 252
returns = np.random.normal(true_mean, true_std, n)
sample_mean = np.mean(returns)
sample_std = np.std(returns, ddof=1)
se = sample_std / np.sqrt(n)
# 使用 t 分布的95%置信区间
df = n - 1
t_crit = stats.t.ppf(0.975, df) # 双侧
ci_lower = sample_mean - t_crit * se
ci_upper = sample_mean + t_crit * se
print(f"样本均值: {sample_mean:.6f}")
print(f"标准误: {se:.6f}")
print(f"95%置信区间: [{ci_lower:.6f}, {ci_upper:.6f}]")
print(f"真实均值: {true_mean:.6f} (CI是否包含? {ci_lower <= true_mean <= ci_upper})")
# 可视化:50个CI来展示"95%置信"的含义
fig, ax = plt.subplots(figsize=(12, 8))
n_experiments = 50
ci_contains_true = []
for i in range(n_experiments):
sample = np.random.normal(true_mean, true_std, n)
x_bar = np.mean(sample)
s = np.std(sample, ddof=1)
se_i = s / np.sqrt(n)
t_crit_i = stats.t.ppf(0.975, df)
lo = x_bar - t_crit_i * se_i
hi = x_bar + t_crit_i * se_i
contains = lo <= true_mean <= hi
ci_contains_true.append(contains)
color = 'steelblue' if contains else 'crimson'
ax.plot([lo, hi], [i, i], color=color, lw=1.5)
ax.plot(x_bar, i, 'o', color=color, ms=4)
ax.axvline(true_mean, color='black', linestyle='--', lw=2, label=f'True μ = {true_mean:.4f}')
ax.set_xlabel('收益率')
ax.set_ylabel('实验编号')
ax.set_title('50个模拟的95%置信区间\n(红色 = 未包含, 蓝色 = 包含)')
ax.legend()
ax.grid(alpha=0.3)
plt.tight_layout()
plt.show()
coverage = sum(ci_contains_true) / n_experiments
print(f"\n覆盖率: {coverage:.2%} (期望: 95%)")
提示词
用 numpy 模拟日收益,用 scipy.stats.t.ppf 计算 t 临界值,演示 95% 置信区间,重复 50 次看实际覆盖率。
这个可视化使”95%置信”的含义变得具体:大约95%的蓝色区间捕获了真实均值,而红色区间没有。在图中,你通常会看到50个区间中有约2或3个红色(未包含)的,这与95%的覆盖率一致。
置信区间宽度如何随样本量变化
标准误 随 增加而减小,所以更多数据会使置信区间变窄。具体来说,要将置信区间的宽度减半,你需要四倍的观测数据——因为宽度与 成正比。
这对量化研究有直接影响:要获得对策略夏普比率等指标的精确估计,你需要的数据量比你最初预期的要多得多。
比例的置信区间
对于二元(伯努利)数据——股票今天是涨还是跌?——我们使用比例置信区间。 次试验中 次成功,样本比例为 。
标准误为 ,对于大 ,正态近似效果很好:
对于小 或接近0或1的比例,Wilson 得分区间(一种更精确的方法)更可取。
为什么这在量化研究中很重要
当阅读一篇学术论文或内部量化报告声称”夏普比率为1.45,95%置信区间为[1.12, 1.78]“时,你现在理解了它的含义:如果这项研究被多次重复,大约95%的结果区间将包含真实的夏普比率。窄置信区间意味着精确估计;宽置信区间意味着很大的不确定性。
如果策略均值收益的置信区间包含零,那么在该置信水平下,策略收益与零没有统计上的显著差异——这是配置资本前的一个关键区分。
参考文献
Moore, D. S. and McCabe, G. P. Introduction to the Practice of Statistics, Chapter 5. Freeman. Ross, S. M. A First Course in Probability, Chapter 7. Pearson.