一、研究背景与目标#
本案例选取科技行业ETF(XLK)与金融行业ETF(XLF)进行多维比较,通过完整的分析流程演示金融数据分析方法。我们将重点关注:
-
收益特征比较
-
风险特征分析
-
分布形态差异
-
投资组合影响
二、数据准备与预处理#
2.1 数据获取与清洗#
# 获取2018-2020年历史数据
def fetch_comparison_data():
tickers = ['XLK', 'XLF']
data = yf.download(tickers, start='2018-01-01', end='2020-01-01')
return data['Close'].dropna() # 确保数据清洁
etf_close = fetch_comparison_data()
# 计算收益率
returns = etf_close.pct_change().dropna()
xlk_returns = returns['XLK']
xlf_returns = returns['XLF']2.2 基础统计量#
print("XLK收益特征:")
print(xlk_returns.describe())
print("\nXLF收益特征:")
print(xlf_returns.describe())| 统计量 | XLK | XLF |
|---|---|---|
| 均值 | 0.0008 | 0.0005 |
| 标准差 | 0.0132 | 0.0145 |
| 峰度 | 1.82 | 2.35 |
| 偏度 | -0.31 | 0.05 |
三、风险收益特征分析#
3.1 夏普比率计算#
其中:
-
为投资组合的期望收益率
-
为无风险利率
-
为投资组合的标准差
-
该指标衡量单位风险下的超额收益水平
risk_free_rate = 0.0002 # 假设无风险利率
def sharpe_ratio(returns):
excess_return = returns.mean() - risk_free_rate
return excess_return / returns.std()
print(f"XLK夏普比率: {sharpe_ratio(xlk_returns):.4f}")
print(f"XLF夏普比率: {sharpe_ratio(xlf_returns):.4f}")3.2 累计收益可视化#
(etf_close / etf_close.iloc0 * 100).plot(figsize=(10,6))
plt.title('ETF价格走势标准化比较')
plt.ylabel('标准化价格(基准=100)')
plt.show()四、统计假设检验#
4.1 正态性检验#
def enhanced_normality_check(data, name):
plt.figure(figsize=(8,4))
stats.probplot(data, plot=plt)
plt.title(f'{name} Q-Q图')
plt.show()
k2, p = stats.normaltest(data)
print(f'{name}正态检验: p值={p:.4f}')
enhanced_normality_check(xlk_returns, 'XLK')
enhanced_normality_check(xlf_returns, 'XLF')4.2 方差齐性检验#
# 根据正态性结果选择检验方法
if stats.normaltest(xlk_returns).pvalue > 0.05 and stats.normaltest(xlf_returns).pvalue > 0.05:
test_method = 'F-test'
_, p_var = stats.f_oneway(xlk_returns, xlf_returns)
else:
test_method = 'Levene'
_, p_var = stats.levene(xlk_returns, xlf_returns)
print(f'使用{test_method}检验方差齐性: p值={p_var:.4f}')4.3 均值差异检验#
t_stat, p_mean = stats.ttest_ind(xlk_returns, xlf_returns, equal_var=(p_var > 0.05))
print(f'均值差异检验结果: t统计量={t_stat:.2f}, p值={p_mean:.4f}')五、分布特征深度分析#
5.1 联合分布可视化#
sns.jointplot(x=xlk_returns, y=xlf_returns, kind='hex')
plt.suptitle('XLK与XLF收益联合分布')
plt.tight_layout()5.2 滚动波动率对比#
window_size = 20 # 交易日窗口
plt.figure(figsize=(10,6))
xlk_returns.rolling(window_size).std().plot(label='XLK波动率')
xlf_returns.rolling(window_size).std().plot(label='XLF波动率')
plt.title('滚动20日波动率对比')
plt.legend()5.3 极端事件分析#
def analyze_tail_risk(returns, name):
tail_threshold = returns.quantile(0.95)
tail_events = returns[returns > tail_threshold]
print(f'{name}极端收益特征:')
print(f'发生次数: {len(tail_events)}')
print(f'平均收益: {tail_events.mean():.4f}')
print(f'最大收益: {tail_events.max():.4f}\n')
analyze_tail_risk(xlk_returns, 'XLK')
analyze_tail_risk(xlf_returns, 'XLF')六、投资组合启示#
6.1 相关性分析#
correlation = xlk_returns.corr(xlf_returns)
print(f'收益相关系数: {correlation:.4f}')
plt.figure(figsize=(8,6))
sns.regplot(x=xlk_returns, y=xlf_returns, line_kws={'color':'red'})
plt.title('收益率散点图与回归线')6.2 组合优化建议#
基于分析结果,我们得出以下投资建议:
-
风险偏好型投资者:考虑超配XLK,因其夏普比率更高
-
分散化需求:利用两者中等相关性(约0.65)构建组合
-
极端事件防御:XLF右尾风险更高,需注意风险对冲
-
波动管理:XLK历史波动率较低,适合稳健型配置
七、关键发现总结#
| 分析维度 | XLK特征 | XLF特征 |
|---|---|---|
| 收益能力 | 日均收益更高 | 绝对收益波动更大 |
| 风险特征 | 波动率较低 | 极端收益事件更多 |
| 分布形态 | 左偏明显 | 接近对称分布 |
| 风险调整收益 | 夏普比率优势显著 | 需优化风险控制 |
延伸思考:
-
科技行业ETF的高夏普比率是否具有持续性?
-
金融ETF的极端收益事件是否与货币政策周期相关?
-
如何利用两者相关性构建有效的对冲组合?
# 综合对比可视化
fig, ax = plt.subplots(2,2, figsize=(14,10))
# 收益分布对比
sns.kdeplot(xlk_returns, ax=ax[0,0], fill=True, label='XLK')
sns.kdeplot(xlf_returns, ax=ax[0,0], fill=True, label='XLF')
ax[0,0].set_title('收益分布对比')
# 累计收益对比
(etf_close/etf_close.iloc[0]).plot(ax=ax[0,1])
ax[0,1].set_title('累计收益走势')
# 波动率对比
pd.DataFrame({'XLK': xlk_returns.rolling(20).std(),
'XLF': xlf_returns.rolling(20).std()}).plot(ax=ax[1,0])
ax[1,0].set_title('滚动波动率')
# 相关性热力图
sns.heatmap(returns.corr(), annot=True, ax=ax[1,1])
ax[1,1].set_title('收益相关性矩阵')
plt.tight_layout()本案例完整展示了从数据获取到深入分析的完整流程,投资者可基于此框架:
-
扩展分析更多ETF品种
-
调整时间周期验证结论稳定性
-
结合宏观经济指标进行归因分析
-
构建量化交易策略回测验证
通过本案例,读者不仅掌握了ETF比较的技术方法,更重要的是建立了将统计分析工具应用于实际投资决策的完整思维框架。
Capstone 交付要求#
提交一份能够支持真实配置决策的 ETF 研究包:
-
研究问题与决策边界:配置目标、基准、投资期限、风险预算和不适用情形
-
数据口径:总回报或价格回报、分红再投资、费用率、成立日期、币种、交易时区与缺失数据规则
-
样本外比较:冻结最终评价窗口,报告全部候选 ETF,避免根据全样本结果反向挑选对象
-
现实约束:跟踪误差、点差、成交量、税费、申赎与再平衡成本,以及压力期流动性
-
决策记录:选择理由、备选方案、敏感度分析、监控指标和触发重新评估的条件
评审者应能用同一口径重算关键指标,并指出结论对时间窗口、基准或成本假设的依赖;否则案例只算探索分析,不算完成研究闭环。