🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

第21讲:置信区间 (Confidence Intervals)

💡

查看全集:💎Quantopia量化分析56讲

置信区间(Confidence Intervals)是统计学中的核心工具之一,它通过样本数据为我们提供了一个估计总体参数(如均值、比例等)真实值的范围,并以置信水平(如95%或99%)量化这一估计的可靠性。在金融领域,置信区间的应用尤为广泛,它不仅帮助投资者和分析师理解投资组合预期回报率或风险度量(如波动率)的不确定性,还在风险管理和假设检验中扮演着重要角色。这里我们将深入探讨置信区间的理论基础、计算方法及其在量化金融中的实际应用。

一、核心概念解析

1.1 样本均值 vs 总体均值

在统计学和量化金融中,均值分为两种:

关键公式:

xˉ=1ni=1nxi\bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i

其中,xˉ\bar{x} 为样本均值,xix_i 为样本观测值,nn 为样本量。

示例:

假设随机生成10位女性的身高样本,总体均值为64 cm,标准差为5 cm:

import numpy as np
np.random.seed(10)
POPULATION_MU = 64   # 总体均值
POPULATION_SIGMA = 5 # 总体标准差

sample_size = 10
heights = np.random.normal(POPULATION_MU, POPULATION_SIGMA, sample_size)
print(f"样本均值: {np.mean(heights):.2f} cm")

在量化金融中,总体均值(如某股票的长期收益率)难以直接获得,因此通过样本均值进行估计。例如,分析某股票过去一年的日收益率来推测其长期表现。

1.2 标准误差 (Standard Error)

标准误差(SE)衡量样本均值分布的离散程度,反映样本均值与总体均值之间的差异。SE越小,样本均值越接近总体均值。
关键公式:

SE=snSE = \frac{s}{\sqrt{n}}

其中,ss 为样本标准差,nn 为样本量。

计算示例:

SE = np.std(heights, ddof=0) / np.sqrt(sample_size)
print(f"标准误差: {SE:.2f}")

# 使用scipy验证
from scipy import stats
print(f"Scipy计算结果: {stats.sem(heights, ddof=0):.2f}")

在金融时间序列中,收益率常存在自相关性或异方差性,普通SE可能低估不确定性。此时,可使用Newey-West调整标准误以提高估计精度。

1.3 错误解读和前提验证

错误解读

说明:置信区间描述的是估计范围的可靠性,而非真实均值的概率分布。

前提验证

构建置信区间前需验证数据假设:

  1. 正态性检验:若P值<0.05,拒绝正态性假设,需考虑非参数方法。
    from scipy.stats import jarque_bera
    jb_stat, pval = jarque_bera(returns)
    print(f"Jarque-Bera P值: {pval:.4f}")
  1. 自相关检测:若检测到显著自相关,需调整标准误。
    from statsmodels.stats.diagnostic import acorr_ljungbox
    lb_test = acorr_ljungbox(returns, lags=5)
    print(lb_test)

二、置信区间构建

置信区间是量化金融中评估参数估计不确定性的核心工具。表格整理了关键概念:

关键概念适用条件公式Python函数
Z区间n>30xˉ±Zα/2SE\bar{x} \pm Z_{\alpha/2}SEstats.norm.interval()
t区间n≤30xˉ±tα/2,dfSE\bar{x} \pm t_{\alpha/2,df}SEstats.t.interval()
自相关修正时间序列Newey-West标准误statsmodels.NeweyWest
正态检验所有数据Jarque-Bera统计量stats.jarque_bera()

以下将介绍两种常用方法:

2.1 正态分布法(大样本)

当样本量n>30n>30时,中心极限定理保证样本均值近似正态分布,可使用Z分数构建置信区间:

xˉ±Zα/2SE\bar{x} \pm Z_{\alpha/2} \cdot SE

其中:

from scipy import stats

mean_height = np.mean(heights)
conf_level = 0.95
z_score = stats.norm.ppf((1 + conf_level)/2)
ci = (mean_height - z_score*SE, mean_height + z_score*SE)
print(f"95%置信区间: [{ci[0]:.2f}, {ci[1]:.2f}]")

在金融数据中,即使n>30n>30,若数据偏态或厚尾(如股票收益率),正态分布法可能不适用,需验证前提条件。

2.2 t分布法(小样本)

当样本量n30n \leq 30时,样本均值分布更接近t分布,使用t分数构建置信区间:

xˉ±tα/2,dfSE\bar{x} \pm t_{\alpha/2, df} \cdot SE

其中:

df = sample_size - 1  # 自由度
t_score = stats.t.ppf((1+conf_level)/2, df)
ci_t = (mean_height - t_score*SE, mean_height + t_score*SE)

可视化对比:

import matplotlib.pyplot as plt
x = np.linspace(-4, 4, 100)
plt.plot(x, stats.norm.pdf(x), label='Normal')
plt.plot(x, stats.t.pdf(x, df), label='t-dist (df=9)')
plt.legend()
plt.title("Normal vs t-Distribution")
plt.show()

小样本置信区间常用于分析短期市场行为或新资产表现,t分布的厚尾特性更适合小样本的不确定性。

三、应用实践

3.1 金融数据示例

以下以苹果公司(AAPL)股票为例,计算其2020-2022年日收益率的95%置信区间:

import yfinance as yf

# 获取苹果公司收盘价
data = yf.download('AAPL', start='2020-01-01', end='2023-01-01')
returns = data['Close'].pct_change().dropna()

# 计算95%置信区间
mean_ret = returns.mean()
SE_ret = stats.sem(returns)
ci = stats.norm.interval(0.95, loc=mean_ret, scale=SE_ret)

print(f"日均收益率: {mean_ret:.4%}")
print(f"95%置信区间: [{ci[0]:.4%}, {ci[1]:.4%}]")

金融数据常具自相关性和异方差性,建议使用Newey-West标准误调整置信区间:

import statsmodels.api as sm

model = sm.OLS(returns, np.ones_like(returns)).fit(cov_type='HAC', cov_kwds={'maxlags':5})
SE_NW = model.bse[0]
ci_NW = (mean_ret - 1.96*SE_NW, mean_ret + 1.96*SE_NW)
print(f"Newey-West调整95%置信区间: [{ci_NW[0]:.4%}, {ci_NW[1]:.4%}]")

3.2 假设检验

置信区间与假设检验密切相关。以下检验苹果股票日均收益率是否显著大于0:

t_stat, p_value = stats.ttest_1samp(returns, 0)
print(f"T统计量: {t_stat:.2f}, P值: {p_value:.4f}")

输出(示例):

T统计量: 4.32, P值: 0.0000

解读:P值<0.05,拒绝原假设,认为日均收益率显著大于0。

综合练习

练习题1:

收集特斯拉(TSLA)过去3年的日收益率数据,计算其99%置信区间,并检验数据是否满足正态性假设。

练习题2:

生成一个自相关系数为0.6的AR(1)序列(n=50),比较普通SE与Newey-West调整后的SE差异。

# 提示:Newey-West调整示例
from statsmodels.stats.api import NeweyWest
model = sm.OLS(returns, sm.add_constant(np.ones_like(returns)))
results = model.fit(cov_type='HAC', cov_kwds={'maxlags':5})
print(results.conf_int())

附:练习合集