查看全集:💎Quantopia量化分析56讲
置信区间(Confidence Intervals)是统计学中的核心工具之一,它通过样本数据为我们提供了一个估计总体参数(如均值、比例等)真实值的范围,并以置信水平(如95%或99%)量化这一估计的可靠性。在金融领域,置信区间的应用尤为广泛,它不仅帮助投资者和分析师理解投资组合预期回报率或风险度量(如波动率)的不确定性,还在风险管理和假设检验中扮演着重要角色。这里我们将深入探讨置信区间的理论基础、计算方法及其在量化金融中的实际应用。
在统计学和量化金融中,均值分为两种:
关键公式:
其中, 为样本均值, 为样本观测值, 为样本量。
示例:
假设随机生成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")
在量化金融中,总体均值(如某股票的长期收益率)难以直接获得,因此通过样本均值进行估计。例如,分析某股票过去一年的日收益率来推测其长期表现。
标准误差(SE)衡量样本均值分布的离散程度,反映样本均值与总体均值之间的差异。SE越小,样本均值越接近总体均值。
关键公式:
其中, 为样本标准差, 为样本量。
计算示例:
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调整标准误以提高估计精度。
错误解读
说明:置信区间描述的是估计范围的可靠性,而非真实均值的概率分布。
前提验证
构建置信区间前需验证数据假设:
from scipy.stats import jarque_bera
jb_stat, pval = jarque_bera(returns)
print(f"Jarque-Bera P值: {pval:.4f}")
from statsmodels.stats.diagnostic import acorr_ljungbox
lb_test = acorr_ljungbox(returns, lags=5)
print(lb_test)
置信区间是量化金融中评估参数估计不确定性的核心工具。表格整理了关键概念:
关键概念 | 适用条件 | 公式 | Python函数 |
Z区间 | n>30 | | stats.norm.interval() |
t区间 | n≤30 | | stats.t.interval() |
自相关修正 | 时间序列 | Newey-West标准误 | statsmodels.NeweyWest |
正态检验 | 所有数据 | Jarque-Bera统计量 | stats.jarque_bera() |
以下将介绍两种常用方法:
当样本量时,中心极限定理保证样本均值近似正态分布,可使用Z分数构建置信区间:
其中:
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}]")
在金融数据中,即使,若数据偏态或厚尾(如股票收益率),正态分布法可能不适用,需验证前提条件。
当样本量时,样本均值分布更接近t分布,使用t分数构建置信区间:
其中:
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分布的厚尾特性更适合小样本的不确定性。
以下以苹果公司(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%}]")
置信区间与假设检验密切相关。以下检验苹果股票日均收益率是否显著大于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())