一、相关系数基础概念#
1.1 什么是相关系数?#
相关系数是衡量两个变量之间线性关系强度的指标,取值范围为[-1, 1]:
-
+1 表示完全正相关
-
1 表示完全负相关
-
0 表示无线性关系
1.2 关键计算公式#
相关系数ρ的计算公式:
其中:
-
cov(X,Y) 是协方差
-
σX 和 σY 是标准差
二、相关系数 vs 协方差#
2.1 核心区别#
| 指标 | 特点 | 量纲 | 取值范围 |
|---|---|---|---|
| 协方差 | 反映变量共同变化趋势 | 有量纲 | (-∞, +∞) |
| 相关系数 | 标准化后的协方差 | 无量纲 | [-1, 1] |
2.2 代码演示对比#
code
import numpy as np
# 生成相关数据
X = np.random.rand(50)
Y = 2 * X + np.random.normal(0, 0.1, 50)
# 计算协方差和相关系数
cov_xy = np.cov(X, Y)[0, 1]
corr_xy = np.corrcoef(X, Y)[0, 1]
print(f"协方差: {cov_xy:.4f}")
print(f"相关系数: {corr_xy:.4f}")三、实战应用:股票相关性分析#
3.1 数据获取(使用yfinance)#
code
import yfinance as yf
import pandas as pd
# 获取股票数据
tickers = ['AAPL', 'LRCX', 'SPY']
start = '2013-01-01'
end = '2015-01-01'
data = yf.download(tickers, start=start, end=end)['Close']
data.columns = tickers # 简化列名3.2 相关性计算#
code
# 计算相关系数矩阵
corr_matrix = data.corr()
print("相关系数矩阵:")
print(corr_matrix)
# 可视化相关性
import seaborn as sns
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')3.3 滚动相关性分析#
code
# 计算60日滚动相关系数
rolling_corr = data['AAPL'].rolling(window=60).corr(data['LRCX'])
# 可视化结果
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
rolling_corr.plot(title='AAPL与LRCX的60日滚动相关系数')
plt.ylabel('相关系数')
plt.show()四、深入理解相关系数#
4.1 统计显著性检验#
使用 p 值判断相关性是否显著:
code
from scipy.stats import pearsonr
corr, p_value = pearsonr(data['AAPL'], data['LRCX'])
print(f"P值: {p_value:.4e}")
# P值 < 0.05 表示相关性显著4.2 注意事项与局限性#
-
非线性关系:只能检测线性关系,可能漏判非线性关联
-
异常值敏感:离群值会显著影响结果
-
相关≠因果:不能证明因果关系
-
时间段依赖:不同时期可能呈现不同相关性
五、综合案例:投资组合构建#
5.1 低相关性资产筛选#
code
# 获取多资产数据
assets = ['AAPL', 'MSFT', 'GLD', 'TLT', 'OIL']
data = yf.download(assets, period='5y')['Close']
# 计算相关系数矩阵
corr_matrix = data.corr()
# 筛选低相关性资产组合
low_corr_pairs = corr_matrix[(corr_matrix > -0.3) & (corr_matrix < 0.3) & (corr_matrix != 1)]
print("低相关性资产对:")
print(low_corr_pairs.dropna(how='all'))5.2 投资组合优化建议#
-
选择相关系数<0.5的资产组合
-
定期监控相关性变化
-
结合夏普比率等指标综合评估
关键要点总结:
-
相关系数是量化资产关系的核心工具
-
实际应用需结合统计显著性检验
-
注意区分相关性与因果关系
-
动态监控比单一时点分析更重要
提示:在Quantopian等量化平台进行回测时,需特别注意相关性随时间变化的特点,避免过度依赖历史相关性。