跳到主内容
研究主线统计估计与回归基础 · 第6–13讲2/8 · 配套练习模块导览 →
练习

第7讲:方差 (Variance) · 练习

手工计算离散度指标,绘制滚动波动率,比较组合权重的方差,并检查年化频率与协方差贡献。

← 返回本讲讲义
完成状态保存在当前浏览器,可随时取消。

所需库与工具:

code
import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

练习1:基础离散度量#

数据集生成:

code
np.random.seed(42)
X = np.random.randint(100, size=100)
print("样本数据前10项:", X[:10])

1a 极差计算

计算随机数组X的极差:

code
# 你的代码写在此处
# range_X = _____
# print(f"极差: {range_X}")

1b 平均绝对偏差

计算X的平均绝对偏差:

code
mu = _____
abs_dev = _____
MAD = _____
# print(f"平均绝对偏差: {MAD:.2f}")

1c 方差与标准差

计算样本方差和总体标准差:

code
variance = _____  # 样本方差
std_dev = _____   # 总体标准差
# print(f"方差: {variance:.2f}")
# print(f"标准差: {std_dev:.2f}")

1d 半方差分析

计算低于均值的半方差:

code
lows = _____
semivar = _____
# print(f"半方差: {semivar:.2f}")
# print(f"半标准差: {np.sqrt(semivar):.2f}")

1e 目标半方差(B=60)

计算低于目标值60的半方差:

code
B = 60
lows_B = _____
semivar_B = _____ if len(lows_B)>0 else 0
# print(f"目标半方差: {semivar_B:.2f}")

练习2:滚动波动分析#

2a 30日滚动方差

分析AT&T股价的波动聚集效应:

code
att = yf.download('T', start='2016-01-01', end='2017-01-01')['Open']

# 计算滚动方差
rolling_var = _____
# plt.plot(rolling_var)
# plt.title('30日滚动方差')

2b 15日滚动标准差

比较不同窗口的波动率:

code
rolling_std = _____
# 可视化代码
# plt.figure(figsize=(10,5))
# _____

练习3:投资组合优化#

3a 协方差计算

获取苹果和金融ETF数据:

code
aapl = yf.download('AAPL', start='2016-01-01', end='2017-01-01')['Open']
xlf = yf.download('XLF', start='2016-01-01', end='2017-01-01')['Open']

# 对齐数据日期
combined = pd.DataFrame({'AAPL': aapl, 'XLF': xlf}).dropna()
cov_matrix = _____
cov = _____

3b 组合权重优化

求解使组合方差为50的权重配置:

code
v_aapl = _____
v_xlf = _____

# 权重方程组求解
# (w1^2)*v_aapl + ((1-w1)^2)*v_xlf + 2*w1*(1-w1)*cov = 50
# 你的代码写在此处

# w1 = _____
# w2 = 1 - w1
# print(f"优化权重: AAPL={w1:.2%}, XLF={w2:.2%}")

高级练习:风险可视化#

4a 波动率锥分析

创建标普500指数不同窗口的波动率分布:

code
spy = yf.download('SPY', period='max')['Close']
returns = _____

windows = [10, 30, 60, 90]
vol_cones = pd.DataFrame({
    f'{w}d': _____
    for w in windows
})

# plt.figure(figsize=(10,6))
# _____

4b 协方差矩阵热力图

分析FAANG股票相关性:

code
tickers = ['META', 'AMZN', 'AAPL', 'NFLX', 'GOOG']
data = yf.download(tickers, period='3y')['Close']

cov_matrix = _____
corr_matrix = _____

# 生成热力图
# import seaborn as sns
# sns.heatmap(_____, annot=True)

提示与工具:

  1. 滚动计算使用.rolling(window).var().std()

  2. 组合方差公式:σ²ₚ = w₁²σ₁² + w₂²σ₂² + 2w₁w₂Cov₁₂

  3. 对齐不同资产数据:pd.DataFrame({'A': a, 'B': b}).dropna()

  4. 年化波动率转换:日波动率 × √252

  5. 权重优化可能需要解二次方程

完成练习后,建议:

  1. 对比不同时间窗口的波动率特征

  2. 测试不同目标方差下的权重组合

  3. 分析行业间协方差变化规律

  4. 探索极端市场条件下的风险指标变化


完成练习后,自评一次

建议先独立作答,再展开参考答案进行核对。