查看全集:💎Quantopia量化分析56讲
相关系数是衡量两个变量之间线性关系强度的指标,取值范围为[-1, 1]:
相关系数ρ的计算公式:
其中:
指标 | 特点 | 量纲 | 取值范围 |
协方差 | 反映变量共同变化趋势 | 有量纲 | (-∞, +∞) |
相关系数 | 标准化后的协方差 | 无量纲 | [-1, 1] |
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}")
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 # 简化列名
# 计算相关系数矩阵
corr_matrix = data.corr()
print("相关系数矩阵:")
print(corr_matrix)
# 可视化相关性
import seaborn as sns
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
# 计算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()
使用p值判断相关性是否显著:
from scipy.stats import pearsonr
corr, p_value = pearsonr(data['AAPL'], data['LRCX'])
print(f"P值: {p_value:.4e}")
# P值 < 0.05 表示相关性显著
# 获取多资产数据
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'))
关键要点总结:
提示:在Quantopian等量化平台进行回测时,需特别注意相关性随时间变化的特点,避免过度依赖历史相关性。