🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

第9讲:相关系数 (Correlation Analysis)

💡

查看全集:💎Quantopia量化分析56讲

一、相关系数基础概念

1.1 什么是相关系数?

相关系数是衡量两个变量之间线性关系强度的指标,取值范围为[-1, 1]:

1.2 关键计算公式

相关系数ρ的计算公式:

ρX,Y=cov(X,Y)σXσY\rho_{X,Y} = \frac{cov(X,Y)}{\sigma_X \sigma_Y}

其中:

二、相关系数 vs 协方差

2.1 核心区别

指标特点量纲取值范围
协方差反映变量共同变化趋势有量纲(-∞, +∞)
相关系数标准化后的协方差无量纲[-1, 1]

2.2 代码演示对比

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)

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 相关性计算

# 计算相关系数矩阵
corr_matrix = data.corr()
print("相关系数矩阵:")
print(corr_matrix)

# 可视化相关性
import seaborn as sns
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

3.3 滚动相关性分析

# 计算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值判断相关性是否显著:

from scipy.stats import pearsonr

corr, p_value = pearsonr(data['AAPL'], data['LRCX'])
print(f"P值: {p_value:.4e}")
# P值 < 0.05 表示相关性显著

4.2 注意事项与局限性

  1. 非线性关系:只能检测线性关系,可能漏判非线性关联
  1. 异常值敏感:离群值会显著影响结果
  1. 相关≠因果:不能证明因果关系
  1. 时间段依赖:不同时期可能呈现不同相关性

五、综合案例:投资组合构建

5.1 低相关性资产筛选

# 获取多资产数据
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 投资组合优化建议

  1. 选择相关系数<0.5的资产组合
  1. 定期监控相关性变化
  1. 结合夏普比率等指标综合评估

关键要点总结:

提示:在Quantopian等量化平台进行回测时,需特别注意相关性随时间变化的特点,避免过度依赖历史相关性。

附:练习合集